none
DataGridView NULL Wert Error RRS feed

  • Frage

  • Hallo,ich habe einen Null Wert Fehler in meinem DataGridView und weiß nicht genau wie ich diesen ausbügeln kann, habe schon einiges herumprobiert aber der fehler ist immer noch da.(bin kein c# experte, kenne mich mit syntax aus usw.)

    Der Fehler tritt immer dann auf wenn in der Tabelle des DatagridViews ein NULL Wert entsteht.

    Habe den Fehler mit einem Try Catch konstrukt abgefangen nun zeigt er nurnoch eine MessageBox an mit dem Fehler der Wert ist DBNULL.

                        try
                        {
                            
                        //    Double.TryParse(Convert.ToString(dataGridView.Rows[0].Cells[0].Value), out d);
                            //  this.dataGridView.DefaultCellStyle.NullValue = "no entry";
                            var query = from o in lagerverwaltungPIADataSetSQL.Article
                                        where o.ArticleName == txtSearch.Text //Fehler umwandlung nicht möglich ?
                                        select o;
                            dataGridView.DataSource = query.ToList();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message.ToString(), "Error",
                           MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            throw;
                        }

    Vielleicht könnt Ihr mir weiterhelfen.

    Danke schonmal für eure Hilfe mit freundlichen Grüß

    Pascal Zentek

    Mittwoch, 2. Mai 2018 12:28

Antworten

  • articleBindingSource1.Filter = "[ArticleName] = '" + txtSearch.Text + "'");

    • Als Antwort markiert Pascal_1991 Freitag, 4. Mai 2018 08:07
    Donnerstag, 3. Mai 2018 11:39
  • Ich nehme mal an, dass xxxDataSetxxx bereits geladene Daten aus der Datenbank enthalten.
    Die Frage ist nun, wie werden die Daten geladen?
    Wird in die Tabelle Article auch das Schema geladen, so dass auf der Spaltendefinition das Flag für AllowNull gesetzt ist?

    Was passiert, wenn du die Article-Tabelle mal als DataSource dem Grid direkt zuweist (ohne Filter)?

    Der Einfachheit halber kannst du an dieser Stelle statt mit Linq besser mit einer BindingSource arbeiten.

    Dies geht ebenso im Designer bei der Zuweisung der DataSource des Grids (neue Datenquelle erstellen).
    Die Bindingsource wird dem DataGrid, die Article-Tabelle der Bindingsource zugewiesen.
    Anschließend setzt du einfach nur den Filter der Bindingsource und das Grid wird gefiltert.

    Vorteil: Die Bindingsource kannst du mehreren Dialogelementen (Einzelfelder) zuweisen und beim navigieren durch das Grid werden die verbundenen Felder direkt aktualisiert.
    Mit dem Zuweisen einer Linq-Abfrage ist das ohne Bindingsource nicht möglich.

    • Als Antwort markiert Pascal_1991 Donnerstag, 3. Mai 2018 11:02
    • Tag als Antwort aufgehoben Pascal_1991 Donnerstag, 3. Mai 2018 11:02
    • Als Antwort markiert Pascal_1991 Donnerstag, 3. Mai 2018 11:02
    Donnerstag, 3. Mai 2018 10:40
  • Und wie genau Filter ich die Bindingsource ?

    aktuell habe ich dies so gelöst:

                            articleBindingSource1.Filter = ("[ArticleName]");

    Scheint aber nicht zu klappen da er mir sagt spaltennamen nicht vorhanden,

    jetzt sgat er mir das es nicht auf einen boolean wert ausgibt ?

    • Als Antwort markiert Pascal_1991 Montag, 14. Mai 2018 13:10
    Donnerstag, 3. Mai 2018 11:09

Alle Antworten

  • Wo entsteht denn der NULL-Wert?

    Ggf. ist die Variable "query" leer, so dass query.ToList() auf den Fehler läuft.
    Debugge das doch mal oder verwende z.B. (je nach C#-version) einfach "query?.ToList();".
    Das "?" ruft ToList() nur auf, wenn Query != null ist.

    Mittwoch, 2. Mai 2018 13:00
  • Genau das ist ja mein Problem in der Datenbank sind Spalten mit einem NULL Wert versehen und jedes mal wenn ich in der Suchleiste einen Begriff eingebe wie zum Beispiel "Holzbohrer" ruft er alle Artikel mit einem Holzbohrer auf, das Problem dabei ist das in dem Datagridview Zellen mit einem NULL Wert sind wie zum beispiel Ausleihdatum[NULL], diese zu füllen würde das Problem nicht lösen es sol ja NULL werte erlauben bzw. soll es NULL werte geben dürfen.

    Mittwoch, 2. Mai 2018 13:31
  • Für das Grid sind NULL-Werte möglich und führen nicht zu Fehlern, genauso wenig wie DBNull (über ADO.NET).

    Der Fehler muss ein Folgefehler ggf. an ganz anderer Stelle sein.
    Debugge das Programm und halte nach dem catch an. Dann schau dir in der Exception genau den Callstack an.

    Vielleicht bedienst du im Grid irgendwelche Events, die nicht mit NULL/DBNull zurecht kommen.

    Mittwoch, 2. Mai 2018 13:48
  • Hi Pascal,
    die Abfrage bringt wegen DBNull Fehler. Du solltest also auch auf DBNUll prüfen, z.B. so:

                            var query = from o in lagerverwaltungPIADataSetSQL.Article
                                        where o.ArticleName == DBnull.Value || o.ArticleName == txtSearch.Text
                                        select o;

    Da werden dann auch die Datensätze geliefert die DBNull haben. Wenn Du die Datensätze mit DBNull ausschließen willst, dann könnte die Abfrage so aussehen:

                            var query = from o in lagerverwaltungPIADataSetSQL.Article
                                        where o.ArticleName != DBnull.Value && o.ArticleName == txtSearch.Text
                                        select o;


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 3. Mai 2018 07:27
  • Danke für eure antworten,

    Das ding ist das in der Datenbank NULL Werte vorhanden sind weil zum biespiel ein Artikel nicht ausgeliehen ist und somit in der Spalte Ausleihdatum ein Null wert entsteht da Sie leer ist und genau da meckert er das ein null wert vorhanden ist.

    eine lösung wäre natürlich diese zu füllen sind aber auch wieder 640 Datensätze die gefüllt werden müssten

    Donnerstag, 3. Mai 2018 10:23
  • Ich nehme mal an, dass xxxDataSetxxx bereits geladene Daten aus der Datenbank enthalten.
    Die Frage ist nun, wie werden die Daten geladen?
    Wird in die Tabelle Article auch das Schema geladen, so dass auf der Spaltendefinition das Flag für AllowNull gesetzt ist?

    Was passiert, wenn du die Article-Tabelle mal als DataSource dem Grid direkt zuweist (ohne Filter)?

    Der Einfachheit halber kannst du an dieser Stelle statt mit Linq besser mit einer BindingSource arbeiten.

    Dies geht ebenso im Designer bei der Zuweisung der DataSource des Grids (neue Datenquelle erstellen).
    Die Bindingsource wird dem DataGrid, die Article-Tabelle der Bindingsource zugewiesen.
    Anschließend setzt du einfach nur den Filter der Bindingsource und das Grid wird gefiltert.

    Vorteil: Die Bindingsource kannst du mehreren Dialogelementen (Einzelfelder) zuweisen und beim navigieren durch das Grid werden die verbundenen Felder direkt aktualisiert.
    Mit dem Zuweisen einer Linq-Abfrage ist das ohne Bindingsource nicht möglich.

    • Als Antwort markiert Pascal_1991 Donnerstag, 3. Mai 2018 11:02
    • Tag als Antwort aufgehoben Pascal_1991 Donnerstag, 3. Mai 2018 11:02
    • Als Antwort markiert Pascal_1991 Donnerstag, 3. Mai 2018 11:02
    Donnerstag, 3. Mai 2018 10:40
  • Und wie genau Filter ich die Bindingsource ?

    aktuell habe ich dies so gelöst:

                            articleBindingSource1.Filter = ("[ArticleName]");

    Scheint aber nicht zu klappen da er mir sagt spaltennamen nicht vorhanden,

    jetzt sgat er mir das es nicht auf einen boolean wert ausgibt ?

    • Als Antwort markiert Pascal_1991 Montag, 14. Mai 2018 13:10
    Donnerstag, 3. Mai 2018 11:09
  • articleBindingSource1.Filter = "[ArticleName] = '" + txtSearch.Text + "'");

    • Als Antwort markiert Pascal_1991 Freitag, 4. Mai 2018 08:07
    Donnerstag, 3. Mai 2018 11:39
  • Vielen Dank hat funktioniert !

    Mit freundlichen Gruß

    Pascal Zentek

    Freitag, 4. Mai 2018 08:08
  • Linq to SQL lohnt sich meist nicht für reine Dialoganwendungen da hier die Unterstützung mit typisierten Datasets, Bindingsourcen u.s.w. von Visualstudio direkt unterstützt wird und man 95% des Datenhandlings bereits per Designer erledigen kann.

    Sobald man sich in die Themen Entity's einarbeitet wird es dann schon wieder interessanter, da man hier dann Schichtenmodelle betreibt und SQL vom Entityframework bearbeitet wird.
    Dann ist "Linq To Objects" eher gefragt.

    Vielleicht kannst du dir das Leben noch leichter machen:

    https://msdn.microsoft.com/en-us/library/aa480727.aspx#datagridviewautofiltercolumnheadercell_topic3

    Hier der Download dazu:

    https://www.microsoft.com/en-us/download/details.aspx?id=23459

    Freitag, 4. Mai 2018 08:25