Datagridview Cell Eingabe nur Währung zulassen

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Datagridview Cell Eingabe nur Währung zulassen

    Hallo,
    versuche eine eventuelle Falscheingabe in einem DGV abzufangen.
    Habe schon eine Weile im Netz gesucht, aber leider nicht wirklich eine Lösung gefunden.

    Hier ein Versuch:

    VB.NET-Quellcode

    1. Private Sub DGVVG_Lohn_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DGVVG_Lohn.CellValidating
    2. Dim Zelle As DataGridViewCell = Me.DGVVG_Lohn.Rows(e.RowIndex).Cells(e.ColumnIndex)
    3. Dim Dezi As Decimal = 0
    4. If Decimal.TryParse(Zelle.Value.ToString, Dezi) Then
    5. Else
    6. Zelle.Value = 9
    7. End If
    8. End Sub

    Weiterhin sollte die Eingabe nicht <= 1 sein.
    Gruß Markus
    Dann wäre es sinnvoller eine NumericUpDown-Spalte zu erschaffen. Denn Decimal ist nicht unbedingt = Währung. Es ist nur als Datentyp dafür geeignet. Aber mit Decimal kannst Du auch > 2 Nachkommastellen speichern. Das mit Zeile#9 verstehe ich zwar nicht, aber wursch. Das mit >1 komt dann wohl in Zeile#7. Oder in Zeile#6: If Decimal.TryParse(Zelle.Value.ToString, Dezi) AndAlso Dezi > 1 Then
    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.
    Im DGV sind 13 sichtbare Spalten enthalten.

    Spalte 0 Kalenderjahr
    Spalte 1 - 12 Kalendermonate (Jan., Febr. usw.)
    Dort werden Stundensätze in Euro angezeigt (15,20 €)
    Nun möchte ich diese Werte direkt im DGV ändern können, und eine Fehleingabe (15t,00) verhindern.
    Gruß Markus
    Und weiter? Richte also 12 NUD-Spalten ein oder führe bei jedem CellValidating Deinen Code aus. Wo kommst Du jetzt nicht weiter?
    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.
    Denke hier an die Handhabung.
    Angenommen man muss die Sätze eines kompletten Jahres unterschiedlich ändern.
    Dann hat man u.U. 2 mal eine NUD-Bearbeitung (Euro und Cent) pro Monat, und das mal 12.
    Denke das geht mit einer Tastaureingabe doch fixer, oder?

    Edit:
    Bei einem NUD kann man doch komplett auf eine Prüfung verzichten,
    hat einen MinValue.
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Ich blick's nicht, sorry.
    Du bastelst Dir ein DGV mit 12 NUD-Spalten:

    Dann hackst Du all Deine Daten ein. Per Tastatur. Dann hast Du den Vorteil, dass Du die Überprüfung nicht mehr machen musst, weder beim Minimumwert noch beim Format, ich stimme Dir zu. Aber warum muss man dann pro Monat 2 Werte bearbeiten? Wenn man festlegt, dass beim NUD-Betreten der komplette Text markiert wird, kann man doch eintippen, was man will. Eine eigene Kommazahl, einen Text (der dann nicht akzeptiert wird), alles leer machen (was dann bei richtiger Einstellung zu einer "0" führt).
    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.
    Danke für Deine Antwort.
    Bin gewohnt NUD's immer mit der Maus zu bedienen. Sicher geht es auch mit Tastatureingabe.
    Habe mir das mal angeschaut. Denke das bekomme ich nicht realisiert, da ich die Datasource per Code zuweise.

    VB.NET-Quellcode

    1. With Me.DGVVG_Lohn
    2. .DataSource = Me.TABVG_Lohn
    3. For ColLohn As Integer = 1 To 12
    4. With .Columns(ColLohn.ToString)
    5. .HeaderText = Func.Monatsname(ColLohn)
    6. .Name = .HeaderText
    7. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
    8. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    9. .DefaultCellStyle.Format = "c"
    10. .SortMode = DataGridViewColumnSortMode.NotSortable
    11. .Width = 110
    12. End With
    13. Next collohn

    Kann da im Designer wohl nicht einstellen, oder irre ich erneut?

    Edit:
    Momentan erhalte ich folgende Fehlermeldung bei einer Falscheingabe:
    Der Vorgang kann nicht abgeschlossen werden, da für die aktuelle Zelle kein Commit durchgeführt werden kann.

    Kann man dies denn nicht im DataError abfangen?
    Dieser Versuch behandelt den Fehler nicht:

    VB.NET-Quellcode

    1. Private Sub DGVVG_Lohn_DataError(sender As Object, e As DataGridViewDataErrorEventArgs) Handles DGVVG_Lohn.DataError
    2. If e.Context = DataGridViewDataErrorContexts.Commit Then
    3. Dim Zelle As DataGridViewCell = Me.DGVVG_Lohn.Rows(e.RowIndex).Cells(e.ColumnIndex)
    4. Zelle.Value = 0
    5. End If
    6. e.Cancel = True
    7. End Sub

    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()