Autor Beitrag
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 04.06.13 11:49 
Hallo zusammen

Ich habe ein Problem mit der Zellinstanz, die beim Löschen des Zelinhaltes verloren geht.

Ich erstelle z.B. 3 Zeilen:
ausblenden 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.
ausblenden 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()); // Objektinstanz bei editierter Zelle ist leider weg
            }
        }

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.

_________________
Gruss
mats74
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: mats74
mats74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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.

_________________
Gruss
mats74
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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.

_________________
Gruss
mats74