Datagridview die Zahl 0 als "leeres" Feld anzeigen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von VB neuling.

    Datagridview die Zahl 0 als "leeres" Feld anzeigen

    Hallo,
    leider habe ich im Netz und auch hier unter der Suchfunktion nichts gefunden, daher stelle ich einfach meine Frage. Nutze VB.net 2012

    Ich habe einen Datagridview das aus einer Access Datenbank gefüllt wird. Die Felder sind als Zahl in der Datenbank definiert. Mittels update-Befehl werden die Inhalte der 6 Textboxen in die Datenbank und Datagridview übertragen. Allerdings sind die Textboxen am Anfang leer und werden erst nach und nach mit Zahlen gefüllt d.h. das Datagridview zeigt vorwiegend die Zahl 0 an.

    Kann ich die Zahl 0 im Datagridview als "leeres" Feld anzeigen? Wenn es ein String wäre könnte ich Textbox.Text="" verwenden, aber dies geht bei einem Feld das als Zahl definiert ist nicht. So weit ich weiß wird nur eine Zahl akzeptiert.

    Das Datagridview ist gebunden - war für mich die einfachste Erstellungsmöglichkeit.

    Danke für die Hilfe
    Willkommen im Forum!
    Wenn du ein typ. Dataset verwendest, könntest du mit der RowChanged-Tabellenereignisbehandlung
    deine Einträge auf 0 prüfen und auf Null setzen...

    VB.NET-Quellcode

    1. Private Sub DeineTabelle_DeineTabelleRowChanged(sender As Object, e As DeineTabelleRowChangeEvent) Handles Me.DeineTabelleRowChanged
    2. If Not (e.Action = DataRowAction.Change OrElse e.Action = DataRowAction.Add) Then Return
    3. RemoveHandler Me.DeineTabelleRowChanged, AddressOf DeineTabelle_DeineTabelleRowChanged
    4. If Not e.Row.IsDeineSpalte1Null AndAlso e.Row.DeineSpalte1 = 0 Then e.Row.SetDeineSpalte1Null()
    5. 'usw.
    6. AddHandler Me.DeineTabelleRowChanged, AddressOf DeineTabelle_DeineTabelleRowChanged
    7. End If
    8. End Sub
    Hier ist das DGV an DeineTabelle gebunden...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    ich hab ihn nicht so verstanden, dasser 0 durch DBNull austauschen will, sondern er möchte glaub 0 einfach nur als scheinbar leere Zelle anzeigen.
    Sowas spielt sich dann nicht auf der Daten-Ebene ab, sondern ist "Ansichtssache".

    Hierfür vorgesehen ist das DGV.CellFormatting-Event, wo der wahre Wert einer Zelle durch einen anzeigbaren ersetzt wird. Für eine TextboxDGV-Cell muß hier in einen String konvertiert werden - was im Hintergrund ja auch geschieht.
    Hier jedenfalls kann man diese Formatierung explizit machen, und bei 0 eine Ausnahme:

    VB.NET-Quellcode

    1. Private Sub DGV_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DGV.CellFormatting
    2. If Object.Equals(e.Value, 0) Then e.Value = "" : e.FormattingApplied = True
    3. End Sub
    Ich habe den Eröffnungspost nochmals durchgelesen - da hast du glaub ich recht (war schon spät...)
    Ergänzung:
    Der IF-Zweig mit If Object.Equals(e.Value, 0) Then funktioniert nicht richtig ... habe es ausprobiert.
    Es muss ein Wertetyp beim Vergleich mitangegeben werden, wie z.B. hier mit Decimal If Object.Equals(e.Value, 0D) Then, dann klappt es.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Hallo,
    super toll, dass ich so schnell eine Antwort erhalten haben, ich suche schon seid Tagen nach einer Lösung.

    Wenn ich die Datenbank anstatt mit "0" eben mit DBNull füllen könnte wäre praktisch und ich würde weniger Platz benötigen. Allerdings genügt es mir, wenn im Datagridview die "0" durch ein "leeres" Feld angezeigt wird. Meine Zahlen sind als Double definiert in der Datenbank und werden auch so im VB-Code behandelt.
    Habe daher die Variante von "ErfinderDesRades" probiert indem ich allerdings
    If Object.Equals(e.Value, 0D) verwendet habe- danke für den Hinweis VB1963. Leider werden im Datagridview weiterhin die "0" angezeigt. Decimal ist ja nicht gleich Double oder - nur kenne ich den Buchstaben dafür nicht, was ich hinter die "0" setzen müsste.
    Die Formatierungsänderung müsste doch sofort eintreten nach laden der Datagridview?