none
DataGridView.ReadOnly=True RRS feed

  • Frage

  • Hallo zusammen,

    es scheint so zu sein dass wenn ich das DataGridView auf ReadOnly setze, ich einzelne Zellen nicht mehr auf ReadOnly=false setzen kann. Ist dem wirklich so? Gibt es da keine weiteren Optionen?

    Viele Grüße,

    Karl

    Montag, 1. Dezember 2014 08:02

Antworten

  • Hallo,

    wenn du das gesamte DataGridView auf Readonly setzt, ist das Verhalten tatsächlich so, wie du es beschreibst. Aber es gibt einen kleinen Workaround. Eine Möglichkeit um dein Verhalten zu realisieren ist, dass du nicht das gesamte DatagridView auf Readonly setzt, sondern jede einzelne Zeile. Dieses Vorgehen ermöglicht es dir, dass du jetzt noch einzelne Zellen auf ReadOnly = false setzen kannst. Hier ein kleines Beispiel: 

     private void button1_Click(object sender, EventArgs e)
            {
    
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    row.ReadOnly = true;
                }
               this.dataGridView1.Rows[2].Cells["XXX"].ReadOnly = false;
    
                //Ist jetzt auf false gesetzt
               var b = this.dataGridView1.Rows[2].Cells["XXX"].ReadOnly;
            }
    Das gesamte Beispiel findest du hier:
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Load += new EventHandler(Form1_Load); 
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                
                DataTable dt = new DataTable("Daten");
                dt.Columns.Add(new DataColumn("Name"));
                dt.Columns.Add(new DataColumn("Reich", typeof(bool)));
                dt.Columns.Add(new DataColumn("Neffen", typeof(int)));
                dt.Columns.Add(new DataColumn("Geburtsdatum", typeof(DateTime)));
                AddNewRow(dt, "Dagobert Duck", true, 1, new DateTime(1962, 10, 11));
                AddNewRow(dt, "Donald Duck", false, 3, new DateTime(1973, 8, 12));
                AddNewRow(dt, "Gustav Gans", false, 0, new DateTime(1973, 6, 13));
                AddNewRow(dt, "Trick Duck", false, 0, new DateTime(1985, 4, 14));
                dataGridView1.DataSource = dt;
                dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
                dataGridView1.Location = new Point(15, 15); this.Controls.Add(dataGridView1);
                BreiteAnSpaltenAnpassen(dataGridView1);
                dataGridView1.Columns[3].DefaultCellStyle.Format = "dd.MMMM yyyy";
              
            }
    
            private void AddNewRow(DataTable dt, string name, bool reich, int neffen, DateTime geburtsDatum)
            {
                DataRow dr = dt.NewRow();
                dr[0] = name; dr[1] = reich; dr[2] = neffen; dr[3] = geburtsDatum;
                dt.Rows.Add(dr);
            }
    
            private void BreiteAnSpaltenAnpassen(DataGridView dgv)
            {
                int wdth = dgv.RowHeadersWidth + (int)(dgv.Columns.Count * 2);
                for (int c = 0; c < dgv.Columns.Count; c++)
                    wdth += dgv.Columns[c].Width;
                dgv.Width = wdth;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    row.ReadOnly = true;
                }
               this.dataGridView1.Rows[2].Cells["XXX"].ReadOnly = false;
    
                //Ist jetzt auf false gesetzt
               var b = this.dataGridView1.Rows[2].Cells["Reich"].ReadOnly;
            }
        }

    Dabei habe ich den Code aus [1] wiederverwendet. Ich hoffe, dass kann dir weiterhelfen. 


    [1] http://dzaebel.net/DataGridViewBeispiel.htm

    Viele Grüße
    Markus Kocybik    
    Entwickler-Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN-Entwickler-Hotline: http://www.msdn-online.de/Hotline
    MSDN-Entwickler-Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN-Entwickler-Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen, Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN-Entwickler-Hotline.







    Montag, 1. Dezember 2014 13:33