none
Datagrid numerische Spalten... RRS feed

  • Frage

  • Hallo,

    ich lasse Eingaben in einem Datagridview auf eine nummerische (Double) Spalte zu...
    Wenn der Benutzer ausversehen einen Buchstaben in dieser Spalte eintippt und dann versucht das
    "Feld" zu verlassen gibts eine Standardfehlerbehandlung vom Datagridview mit iener entsprechenden
    Meldung. Ich möchte gerne diese spezielle Variante abfangen und einfach dann auf den Wert 0 parsen
    lassen wenn in der numerischen Spalte irgendwelche Werte eingegeben werden, die keine Nummern sind.
    Mein Versuch siehst so aus :

        Private Sub conceptBrowserPositionen_DataError(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles Me.DataError

            Dim flWert As Double
            Dim oCol As DataGridViewColumn

            If (e.Context = DataGridViewDataErrorContexts.Parsing) Then

                oCol = Me.Columns.Item(e.ColumnIndex)

                If oCol.ValueType = System.Type.GetType("System.Double") Then
                    If Double.TryParse(Me.CurrentCell.Value, flWert) Then
                    Else
                        Me.CurrentCell.Value = 0
                    End If
                End If

            End If

    Das funktioniert insoweit das keine Meldung mehr erscheint, aber das Feld immernoch nicht
    verlassen werden kann und immernoch der Buchstabe dort steht. Welchen Status muss
    ich zurückgeben, damit das Feld einfach auf "0" steht und der Benutzer weiterkommt ?

    Danke,

    Mario

    Donnerstag, 11. August 2011 11:31

Antworten

  • Hallo Mario,

    da wäre es sinnvoller bereits das CellParsing Ereignis zu verwenden:

      Private Sub DataGridView1_CellParsing(sender As Object, e As DataGridViewCellParsingEventArgs) _
        Handles DataGridView1.CellParsing
        If e.DesiredType = GetType(Double) Then
          If String.IsNullOrEmpty(CStr(e.Value)) Then
            e.Value = 0.0
            e.ParsingApplied = True
          Else
            Dim value As Double
            If Double.TryParse(CStr(e.Value), value) Then
              e.Value = value
            Else
              e.Value = 0.0
            End If
            e.ParsingApplied = True
          End If
        End If
      End Sub
    
    
    Gruß Elmar

     

    Donnerstag, 11. August 2011 12:58

Alle Antworten

  • Hallo Mario,

    da wäre es sinnvoller bereits das CellParsing Ereignis zu verwenden:

      Private Sub DataGridView1_CellParsing(sender As Object, e As DataGridViewCellParsingEventArgs) _
        Handles DataGridView1.CellParsing
        If e.DesiredType = GetType(Double) Then
          If String.IsNullOrEmpty(CStr(e.Value)) Then
            e.Value = 0.0
            e.ParsingApplied = True
          Else
            Dim value As Double
            If Double.TryParse(CStr(e.Value), value) Then
              e.Value = value
            Else
              e.Value = 0.0
            End If
            e.ParsingApplied = True
          End If
        End If
      End Sub
    
    
    Gruß Elmar

     

    Donnerstag, 11. August 2011 12:58
  • Hallo Elmar,

    super vielen Dank ! Das ist natürlich eher ein Ansatz stimmt...

    Das funktioniert auch allerbestens !!!

     

    Dank Dir,

    Mario

    Freitag, 12. August 2011 07:20