Entwickler-Ecke
WinForms - DatagridView Zellinstanz geht verloren
mats74 - Di 04.06.13 11:49
Titel: DatagridView Zellinstanz geht verloren
Hallo zusammen
Ich habe ein Problem mit der Zellinstanz, die beim Löschen des Zelinhaltes verloren geht.
Ich erstelle z.B. 3 Zeilen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private void Form1_Load(object sender, EventArgs e) { DataGridViewRow row1 = new DataGridViewRow(); row1.CreateCells(dataGridView1); row1.Cells[0].Value = "Hallo1"; dataGridView1.Rows.Add(row1); DataGridViewRow row2 = new DataGridViewRow(); row2.CreateCells(dataGridView1); row2.Cells[0].Value = "Hallo2"; dataGridView1.Rows.Add(row2); DataGridViewRow row3 = new DataGridViewRow(); row3.CreateCells(dataGridView1); row3.Cells[0].Value = "Hallo3"; dataGridView1.Rows.Add(row3); } |
Ich editiere die Zeile 2 und lösche den Text aus der Zelle (Hallo2).
Danach möchte ich das DGV durchlaufen und die Zellwerte verarbeiten.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void button1_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { MessageBox.Show(row.Cells[0].Value.ToString()); } } |
Dabei verliere ich bei der editerten Zelle die Objektinstanz.
Dies geschieht nur dann, wenn das Zell-Value leer ist.
Wenn ich einen Text oder einen Leerschlag einfüge funktioniert die Schleife wunderbar.
Woher kommt dieser Fehler, wie kann ich ihn vermeiden und die Objektinstanz beim Löschvorgang des Inhaltes beibehalten?
Vielen Dank für eure Hilfe.
Ralf Jansen - Di 04.06.13 12:13
Value wird null sein. Und dann darf man wohl kaum ToString() aufrufen. Du mußt schon testen ob value null ist und dann irgendwas alternatives tun.
mats74 - Di 04.06.13 13:46
... ja so ist es.
Was für mich aber nicht ganz logisch ist.
Wenn ich den Zellinhalt mit Delete lösche, sollte das Zell-value per default nicht auf null gesetzt werden sondern auf "".
Aber das ist sicherlich eine andere Geschichte :wink: .
Vielen Dank für Deinen Hinweis, Proglem ist gelöst.
Ralf Jansen - Di 04.06.13 13:53
| Zitat: |
| Wenn ich den Zellinhalt mit Delete lösche, sollte das Zell-value per default nicht auf null gesetzt werden sondern auf "". |
Und wen der Inhalt der Zelle ein Integer, DateTime oder was auch immer ist? Null ist das einzig sinnvolle das immer paßt.
Wenn es, wie du gerade angenommen hast, immer ein string wäre dann bräuchtest du auch nicht das problemauslösende ToString aufrufen oder ;)
mats74 - Di 04.06.13 14:04
... sorry, nicht bei einer Deklaration der Spalte durch DataGridViewTextBoxColumn().
Da erwarte ich eigentlich schon einen String :wink: .
Aber Du hast schon recht.
NULL ist ein Bisschen allgemeingültiger als ein typiserter Defaultwert in Bezug auf die Deklaration des Objektes.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!