VB.NET: Der Wert darf nicht NULL sein. Parametername: dataSource
In VB.Net (Visual Studio Version 16.11.40) soll an ein Datagridview eine Datatable gebunden werden. Lange funktionierte wie üblich: DGV.Datasource = xxx.Dataset.Tables("T_xxx"). Ich habe im Projekt Mehreres geändert, weiß aber nicht mehr alle Änderungen. Jetzt sagt der Debugger an dieser Stelle: ... Der Wert darf nicht NULL sein. Parametername: dataSource ...
Ich habe gesucht, die mir noch erinnerlichen Änderungen rückgängig gemacht, finde aber die letztlich die Ursache nicht. Das ansonsten hilfreiche Internet ist bei diesem Fehler nicht sehr ergiebig. Was bzw. wie könnte ich debuggen, um der Ursache näher zu kommen ? Die datatable hat 1 Row mit 7 Columns. Nichts besonderes (1 PK, sonst "normale" integer und string Spalten).
Danke, PCFJKG
Ich habe gesucht, die mir noch erinnerlichen Änderungen rückgängig gemacht, finde aber die letztlich die Ursache nicht. Das ansonsten hilfreiche Internet ist bei diesem Fehler nicht sehr ergiebig. Was bzw. wie könnte ich debuggen, um der Ursache näher zu kommen ? Die datatable hat 1 Row mit 7 Columns. Nichts besonderes (1 PK, sonst "normale" integer und string Spalten).
Danke, PCFJKG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668109
Url: https://administrator.de/contentid/668109
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
18 Kommentare
Neuester Kommentar
WOW Respekt, ich seh hier nix an Code ...
Der Wert darf nicht NULL sein. Parametername: dataSource
Vertippt beim Tabellennamen des Datasets? Oder Dataset leer.
Breakpoints im Code setzen und im Debugger alle Variablen und Ausdrücke live nachprüfen dann findest du auch den Fehler!
FAR.DS.Tables("T_ICD10")
Fehlt uns hier der Kontext, das bringt so nix, denke daran das wir hier nur das haben was du uns an Infos lieferst! No input no output.
Die ursprüngliche Meldung besagt doch, das du der Datasource einen NULL-Wert übergibst,
also ist höchstwahrscheinlich irgendwas mit deinem Dataset/Datatable nicht in Ordnung
Sollte sich aber bei Debuggen schnell finden lassen, was steht denn in der EX-Message und im Stacktrace wenn der Fehler auftritt?
also ist höchstwahrscheinlich irgendwas mit deinem Dataset/Datatable nicht in Ordnung
Sollte sich aber bei Debuggen schnell finden lassen, was steht denn in der EX-Message und im Stacktrace wenn der Fehler auftritt?
Hier nen Brocken da nen Brocken 🤮 , mittels Breakpoint kurz vor der Zuweisung kannst du schön selbst prüfen was da NULL ist, nicht nur die Variablen sondern explizit der Ausdruck den den du der Datasource zuweist!
Und auch das DataGridView selbst.
Und auch das DataGridView selbst.
Dim FAR As F_Abrechnungen = F_Abrechnungen
Das sieht mit sehr verdächtig aus, ein Objekt genauso benannt wie eine Klasse?? Da wird der Hase im Pfeffer liegen.Zitat von @PCFJKG:
Dim FAR As F_Abrechnungen = F_Abrechnungen
F_Abrechnungen ist eine Form. Hier wird auf sie in einer anderen Klasse verwiesen. Zugegeben etwas ungewöhnlich, hat aber tatsächlich bisher funktioneirt.
Nä das ist bäh, fällt dir aber auch jetzt auf die Füße wie du siehst . Und wieso eine neue Variable wenn die die ja schon direkt im Zugriff hast??Dim FAR As F_Abrechnungen = F_Abrechnungen
F_Abrechnungen ist eine Form. Hier wird auf sie in einer anderen Klasse verwiesen. Zugegeben etwas ungewöhnlich, hat aber tatsächlich bisher funktioneirt.
FAR.DS.Tables("T_ICD10")
Eine Form hat per Default keine Property Namens DS, wird diese überladen?Deswegen sag ich ja Breakpoint setzen dann siehst du solche Schweinereien sofort.
Wie gesagt, Variablen gleich benennen wie eine Klasse führt zu solchen Problemen. Das solltest du als erstes ändern.
Außerdem ist das Zugreifen auf externe Objekte aus der Funktion schlechter Stil. Du gehst davon aus das das Objekt existiert ohne das du es prüfst, ohne Try Catch führt das dann zusätzlich zum kompletten Abschmieren.
Außerdem ist das Zugreifen auf externe Objekte aus der Funktion schlechter Stil. Du gehst davon aus das das Objekt existiert ohne das du es prüfst, ohne Try Catch führt das dann zusätzlich zum kompletten Abschmieren.