Hallo liebe Community,
ich bin blutiger Anfänger im programmieren und verstehe folgendes nicht. Die Variablen sind alle richtig befüllt. Aber laut Fehler wurde NULL zurückgegeben.
Wer kann mir helfen das richtig zu verstehen ?
Besten Dank schon jetzt ! Danke !
Die erste Spalte heißt doch "location" und nicht "locationdatagrid", oder?
Weeks of programming can save you hours of planning
Ich kann nicht erkennen, wie die Bilder zusammen passen.
Die Cell wird abgefragt mit "locationdatagrid" aber im Screenshot der Tabelle ist nur "location" die Spalte.
IIRC wars beim DGV so, dass null
heisst, dass die Information nicht geladen wurde, und sie empty ("") ist, wenn nichts drin ist.
Schreib daher mal
var cell = row.Cells["NameHier"].Value;
if (cell != null) {
}
Auf ein potentielle Null-Eigenschaft direkt ein Methode anzusetzen widerspricht ohnehin dem Prinzip der defensiven Programmierung.
Noch besser und schlauer wäre es gar nicht auf der UI-Ebene zu arbeiten, sondern auf dem Binding. Auf der UI zu agieren is eh nie so ne dolle Idee.
https://docs.microsoft.com/de-de/dotnet/desktop/winforms/controls/how-to-access-objects-bound-to-windows-forms-datagridview-rows?view=netframeworkdesktop-4.8
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Ihr Beiden,
danke für euere Zeit.
@Abt - war leider nicht zielführend.
Der Headertext ist: location
Der Name ist: locationdatagrid
Alle Variablen erhalten ja auch alle richtigen Werte aus dem Grid, ABER dann kommt die Fehlermeldung.
Alle Variablen erhalten ja auch alle richtigen Werte aus dem Grid, ABER dann kommt die Fehlermeldung.
An welcher Stelle gibt es denn die Exception?
Weeks of programming can save you hours of planning
Das weiß ich leider nicht - ich glaube im ersten Bild oben, ist die Stelle markiert.
Es ist schon komplex zu lernen am Anfang 😦
Jedenfalls kommt der gleiche FEhler, auch wenn ich nur eine Zeile drin stehen habe.
string locationtovar = row.Cells["locationdatagrid"].Value.ToString();
Du kannst via Debugging schauen, was genau null ist.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Wir bräuchten dazu eine Glaskugel 🙂
Schau die einzelnen Bestandteile der Zeile an, die Null wirft.
var cell = row.Cells["locationdatagrid"];
var value = cell.Value;
etc...
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Danke für die Links !
Step by Step Debugging:
1: Es geht erst jede einzelne Zeile durch (durch foreach ?¿),
2: Dann springt er zur ersten Zeile **string locationtovar = row.Cells["locationdatagrid"].Value.ToString(); ** Die Variable _locationtovar _erhält den richtigen Wert aus dem GridView
3: Beim nächsten Step kommt der Fehler
Dein Code:
var cell = row.Cells["locationdatagrid"].Value;
if (cell != null) {}
peinlich, aber hab ich leider nicht verstanden 😦
Mit dem Murks unten kommt 1 MessageBox mit der richtigen variable, nach dem schließen eine Weitere die leer ist.
var cell = row.Cells["locationdatagrid"];
string value = (string)cell.Value;
MessageBox.Show(value);
Das ist kein Murks, sondern nennt sich Casting - das Du nicht bräuchtest, würdest Du mit Bindings arbeiten.
Der Zelle ist der Datentyp offenbar unbekannt - ergo muss gecastet werden.
[FAQ] Casten aber richtig: Boxing/Unboxing - () / is / as / Pattern Matching
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich habe ewig nichts mehr mit Winforms und dem DGV gemacht.
Aber kann es sein das die NullReferenceException beim zweiten Durchlauf kommt.
Ich meine wenn die Rows durchlaufen werden sind alle dabei, auch die Zeile um eine neue zustellen dabei.
Lösung gefunden - Fehler nicht 😉
foreach (DataGridViewRow row in dataGridView1.Rows)
{
string locationtovar = row.Cells["locationdatagrid"].Value.ToString();
string hoehetovar = row.Cells["hoehedatagrid"].Value.ToString();
string nummertovar = row.Cells["nummerdatagrid"].Value.ToString();
string statustovar = row.Cells["statusdatagrid"].Value.ToString();
string arttovar = row.Cells["artdatagrid"].Value.ToString();
string kommentartovar = row.Cells["kommentardatagrid"].Value.ToString();
string fotolinktovar = row.Cells["fotolinkdatagrid"].Value.ToString();
break; // <----------- Beim ersten Durchlauf schreibt er die Werte in die Variablen, beim 2ten auch, dann kommt der Fehler. Hiermit nicht
}
break ist aber keine Lösung. Denn was machst Du, wenn es mehr als eine Zeile ist.
Schaue dir DataGridViewRow.IsNewRow Eigenschaft an.
Beim ersten Durchlauf schreibt er die Werte in die Variablen, beim 2ten auch, dann kommt der Fehler. Hiermit nicht
Das wäre eine Info gewesen, die Du per Debugger locker gefunden hättest - das ist nämlich in keinem Bild ersichtlich.
Gut, dass wir jemand wie david.m hier hatten, der das noch wusste 🙂
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ja....es tut mir auch schrecklich Leid, aber ihr erinnert euch warscheinlich nicht mal mehr an eure Anfangszeiten 😉
Manchmal raucht meine Rübe schon ordentlichst....
@david.m
Der ursprünglicher Plan war: Direkt einzelne Zellen aus einer MySQL Datanbank zu lesen und in Variablen zu packen.
Daraus geworden ist: Ein Import aus einer MySQL Datanbank in eine DataGridView aus der ich den Inhalt der jeweiligen Columns der einzelnen importierte Zeile auslese und in Variablen packe. Deswegen wird temporör "break;" helfen, da ich nur 1 Zeile importieren muss.
@Abt
Ich werde mir das nächste mal noch mehr Mühe geben. :•]
Vorweg: ich seh auch dass Du mich anschreibst ohne dass Du den Text Fett und in 27 verschiedenen Farben markierst 🙂
aber ihr erinnert euch warscheinlich nicht mal mehr an eure Anfangszeiten
Deswegen versuchen wir Dir zu sagen, wie man es richtig macht - weil wir die Probleme kennen.
zB dass man Daten lieber binden sollte, statt über UI Controls zu interagieren. Das macht nan so halt nicht, weil es Probleme verursacht, die man sich damit selbst schafft.
Sags Dir daher gern ein drittes Mal: arbeite mit typisierten Daten, zB über Bindung - siehe Link oben.
Keiner sagt Dir sowas, um Dich zu ärgern.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code