DatagridView update einer numerischen Spalte

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    DatagridView update einer numerischen Spalte

    Hi,

    mein Problem ist vermutlich sehr einfache. Aber irgendwie beiße ich mir daran die Zähne aus !

    Ich habe eine Datagridview mit einer numerischen Spalte - die ist als Zahl mit zwei Nachkommastellen definiert (Format N2).

    Die Datagridview befülle ich wie üblich:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. DataGridView1.Rows.Add(CDec(1000))
    4. DataGridView1.Rows.Add(CDec(2000))
    5. DataGridView1.Rows.Add(CDec(-1000))
    6. DataGridView1.Rows.Add(CDec(0))
    7. DataGridView1.ClearSelection()
    8. End Sub
    9. End Class


    Das Ergebnis sieht man im Anhang.

    Nun würde ich gern diese dgv im Edit Modus verändern und überschreibe etwa 2.000,00 durch 5000. Natürlich will ich weder den Tausender Punkt noch die Dezimalstellen eintippen.

    Ich erhalte folgendes Display (s. zweites .jpg)

    Tja ... offensichtlich erfolgt keine automatische Formatierung (wie beim rows.add) ... und was noch viel schlimmer ist, wenn man die Spalte jetzt durch Klick auf den Header sortieren will, kracht das Programm !

    Ich vermute mal, dass ich da im EndEdit Ereignis aktiv werden muss. Aber WIE mache ich das denn ?

    LG
    Peter
    Bilder
    • s 2019-09-27 10-38-562.jpg

      12,62 kB, 333×342, 47 mal angesehen
    • s 2019-09-27 10-45-387.jpg

      12,58 kB, 333×342, 49 mal angesehen
    Für den Compiler ist der eingegebene Wert erst einmal ein Object. Daher im CellEndEdit:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    2. DataGridView1.CurrentCell.Value = Decimal.Parse(DataGridView1.CurrentCell.Value.ToString)
    3. End Sub
    Dann klappt die automatische Formatierung und auch die Sortierung.

    Kleiner Hinweis noch für das Befüllen. brauchst Du wirklich Decimal? Wenn Integer reicht dann:

    VB.NET-Quellcode

    1. DataGridView1.Rows.Add(4)
    2. DataGridView1.Item(0, 0).Value = 1000
    3. DataGridView1.Item(0, 1).Value = 2000
    4. DataGridView1.Item(0, 2).Value = -1000
    5. DataGridView1.Item(0, 3).Value = 0
    6. DataGridView1.ClearSelection()

    Und in CellEndEdit dann Integer.Parse. Auf jeden Fall immer einheitlich, sonst geht das Sortieren schief.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Peter329 Ich würde in jedem Falle eine DateTable nutzen, um da Zahlen reinzuhämmern.
    Da hatte ich noch nie Probleme.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    jau ... danke für eure Ratschläge !

    Ich hatte mich schlicht und ergreifend verrannt. Das mit dem CDec() bzw. CInt im EndEdit Ereignis hatte bei mir aus ganz anderen Gründen nicht funktioniert. Na ja, wenn man weiß wo man suchen muss, ist es dann doch wieder ganz einfach !

    Danke 1

    LG
    Peter