Benutzer mit den meisten Antworten
DataGridView.ReadOnly=True

Frage
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.htmViele 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
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.
- Bearbeitet Zorro14 Montag, 1. Dezember 2014 13:39
- Als Antwort vorgeschlagen Aleksander Chalabashiev Dienstag, 2. Dezember 2014 14:31
- Als Antwort markiert Aleksander Chalabashiev Freitag, 5. Dezember 2014 07:31