Entwickler-Ecke
WinForms - DataGridView Fehlermeldung
Zegul-550 - Do 22.06.17 12:13
Titel: DataGridView Fehlermeldung
Hallo zusammen,
Ich habe ein DataGridView. Über einen Button möchte ich den ausgewählten Datensatz weiter bearbeiten.
Jedoch schon in der Zeile
C#-Quelltext
1:
| DataGridViewRow row = dgv.Rows[dgv.CurrentRow.Index]; |
bekomme ich die Fehlermeldungen:
Zitat: |
Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in Zegul.exe aufgetreten.
Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. |
Das DatagridView enthält Datensätze, die Anzahl sehe ich mit "dgv.RowCount".
Wie kann ich das Problem lösen, die Fehlermeldung sagt mir leider nicht viel.
Vielen Dank
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Do 22.06.17 13:20
Hallo und :welcome:
die Fehlermeldung besagt, daß du auf ein Objekt zugreifst, welches
null ist (also nicht initialisiert wurde).
Ich tippe darauf, daß bei dir
dgv.CurrentRow null ist (am besten kannst du dies im Debugger vom Visual Studio anschauen).
Du müßtest also ein Abfrage einbauen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if (dgv.CurrentRow != null) { DataGridViewRow row = dgv.Rows[dgv.CurrentRow.Index]; } else { } |
Zegul-550 - Do 22.06.17 13:51
Hallo und vielen Dank für die schnelle Antwort.
dgv.CurrentRow ist tatsächlich null. Ich weiß, das man nicht nach fertigen Lösungen fragt, aber meine C# Kenntnisse reichen leider nicht aus.
Bis jetzt war ich der Meinung, wenn ich auf das DataGridview zugreifen kann, stehen mir alle Methoden zur Verfügung. Auch mit dgv.Selected.Index bin ich leider nicht weiter gekommen.
Ich bekomme es einfach nicht hin, den Wert einer selektierten Zelle/Zeile eines DataGridview auszulesen und in eine Variable zu schreiben. Wie kann ich den das Objekt initialisieren?
Vielen Dank!
Zegul-550 - Do 22.06.17 15:34
Hallo Th69,
das Beispiel habe ich mal getestet. Schon dgv.GetCellCount(DataGridViewElementStates.Selected) gibt mir 0 zurück, obwohl eine Zelle markiert ist.
Jedoch "dgv.RowCount" gibt mir die exakte Anzahl der Datensätze. Unter Eigenschaften habe ich mal unter "SelectionMode" zwischen CellSelect und FullRowSelect gewechselt, ohne Erfolg.
Danke und Gruß
Zegul-550 - Do 22.06.17 16:16
dgv.SelectedRows.Count gibt mir 1 zurück, was auch richtig ist. Jetzt benötige ich so etwas wie den Index, der selektierten Zeile.
Th69 - Do 22.06.17 17:13
Die einzelnen Rows stehen ja dann in
dgv.SelectedRows[n] drin, und dort dann auch der Index.
Wenn du nur die erste (einzige) selektierte Zeile haben willst:
C#-Quelltext
1: 2: 3: 4: 5:
| if (dgv.SelectedRows.Count > 0) { var row = dgv.SelectedRows[0]; int index = row.Index; } |
Zegul-550 - Do 22.06.17 18:22
Erst einmal vielen Dank für die Geduld mit mir. Langsam kommen wir dem Fehler näher.
Mit:
C#-Quelltext
1: 2:
| row = dgv.SelectedRows[0]; string guid = row.Cells["guid"].Value.ToString(); |
kann ich die Zelle auslesen. Aber es ist die Falsche!!!
Zitat: |
Der Ausnahmefehler des Typs "System.NullReferenceException" in Zegul.exe ist aufgetreten, als ich nur 1 Datensatz im DataGridView hatte.
|
Bei 1 Datensatz im DataGridView ist
dgv.RowCount = 1 - das ist ok
dgv.SelectedRows.Count = 0 - das ist falsch weil 1 Datensatz markiert.
Ich versteh das nicht.
Moderiert von
Th69: C#-Tags hinzugefügt
Delete - Do 22.06.17 19:24
- Nachträglich durch die Entwickler-Ecke gelöscht -
Zegul-550 - Do 22.06.17 19:32
Ja, die ganze Zeile ist markiert. Ich habe beide Varianten probiert.
Die Spalte guid ist vorhanden. Wenn ich mehrere Datensätze im dgv habe bekomme ich ja auch Ergebnisse, nur die Falschen.
Delete - Do 22.06.17 19:38
- Nachträglich durch die Entwickler-Ecke gelöscht -
Zegul-550 - Do 22.06.17 19:44
Die guid ist nicht die vom selektierten Datensatz.
Der Kommentar im Quelltext ist interessant. Wäre das ein Ansatz? Warum kommt bei nur einem Datensatz die Fehlermeldung?
Delete - Do 22.06.17 19:49
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen - Do 22.06.17 20:04
Ein wenig mehr Context als der Code würde auch helfen.
Zum Beispiel ob du MultiSelect zulässt oder nicht.
Und mir ist immer noch nicht klar welche Row du den jetzt genau willst? Die fokussierte Row oder eine der selektierten Rows? Die fokussierte Row muss nicht auch selektiert sein. Und eine selktierte Row muß keinen Focus haben. Das fokussiert/selektiert sind zwei zu unterscheidende Konzepte die nur manchmal zusammenfallen.
Zegul-550 - Fr 23.06.17 13:54
Hallo zusammen,
die Frage nach dem ButtonClick war der richtige Tip. Ich habe idiotischer Weise den Delete-Button vom BindingNavigator benutzt.
Das klärt natürlich einiges.
Der Datensatz wird aus dem DataGridview entfernt und ich bekomme die guid vom nächsten Datensatz. Bei nur einem Datensatz erhalte ich dann die "System.NullReferenceException".
Ich sehe keine andere Möglichkeit, wenn ich den Delete-Button benutzen möchte, schon bei der Auswahl eines Datensatzes die guid in eine Variable zu schreiben.
Vielen Dank an alle, die mir geholfen haben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!