Announcement

Collapse
No announcement yet.

VB 2005: DataGridView ErrorHandling

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VB 2005: DataGridView ErrorHandling

    Hallo zusammen,
    ich möchte bei einer Änderung in einem DataGridView eine Validierung durchführen. Falls die Eingabe nicht in Ordnung ist sollte links ein rotes Ausrufezeichen mit einem Fehlertext erscheinen.
    Z.B. Der Name darf nicht leer sein.

    Beispiel:

    Private Sub MyDtGrdView_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEve ntArgs) Handles MyDtGrdView.CellValidating
    Dim MyGrid As DataGridView = CType(sender, DataGridView) Select Case e.ColumnIndex
    Case MyGrid.Columns("NachName").Index
    If e.FormattedValue.ToString = String.Empty Then MyGrid.Rows(e.RowIndex).ErrorText = "Name muß eingegeben werden !"
    e.Cancel = True
    ' Case Else.....
    ' Throw New ArgumentException("Unbekannte Spalte", e.ColumnIndex.ToString)
    End Select

    Das Funktioniert alles, aber es wird kein rotes Ausrufezeichen und kein Fehlertext angezeigt. Woran liegt das? Was mache ich noch falsch ?

  • #2
    Hallo,
    der Grund für das Problem liegt darin, dass das falsche Ereignis ausgewertet wird. Das DataGridView-Ereignis ist nur "Schall und Rauch", da nicht die Benutzeroberfläche zuständig ist, sondern die Datenschicht (<i>DataTable</i>-Instanz im <i>DataSet</i>). Beim folgenden Beispiel erscheint sowohl das rote Ausrufungszeichen als auch der Fehlertext:

    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> <span style="color: blue;">WithEvents</span> aDataTable <span style="color: blue;">As</span> <span style="color: blue;">New</span> DataTable()</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> Form1_Load(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> System.Object, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> <span style="color: blue;">MyBase</span>.Load</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' neue DataTable erzeugen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDataTable.Columns.Add(<span style="color: maroon;">"Nachname"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDataTable.Columns.Add(<span style="color: maroon;">"Vorname"</span>, <span style="color: blue;">GetType</span>(<span style="color: blue;">String</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDataTable.PrimaryKey = <span style="color: blue;">New</span> DataColumn() {aDataTable.Columns(<span style="color: maroon;">"Nachname"</span>), aDataTable.Columns(<span style="color: maroon;">"Vorname"</span>)}</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDataTable.MinimumCapacity = 10</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' neuen Datensatz eintragen (Variante 1)</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">Dim</span> aNewRow <span style="color: blue;">As</span> DataRow</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewRow = aDataTable.NewRow()</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewRow(0) = <span style="color: maroon;">"Kosch"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aNewRow(1) = <span style="color: maroon;">"Andreas"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDataTable.Rows.Add(aNewRow)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' neuen Datensatz eintragen (Variante 2)</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aDataTable.Rows.Add(<span style="color: blue;">New</span> <span style="color: blue;">Object</span>() {<span style="color: maroon;">"Mustermann"</span>, <span style="color: maroon;">"Manfred"</span>})</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">' Ergebnis anzeigen</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataGridView1.DataSource = aDataTable</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">Private</span> <span style="color: blue;">Sub</span> aDataTable_RowChanging(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span> <span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Data.DataRowChangeEventArgs) <span style="color: blue;">Handles</span> aDataTable.RowChanging</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">If</span> e.Row(<span style="color: maroon;">"Nachname"</span>).ToString = <span style="color: maroon;">"X"</span> <span style="color: blue;">And</span> e.Row(<span style="color: maroon;">"Vorname"</span>).ToString = <span style="color: maroon;">"X"</span> <span style="color: blue;">Then</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; e.Row.RowError = <span style="color: maroon;">"Falsche Eingabe"</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">If</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">End</span> <span style="color: blue;">Sub</span></p></div&gt

    Comment


    • #3
      Danke....
      Es gab aber noch ein weiteres Problem.....

      .RowHeadersWidth muss mindestens 40, und .RowTemplate.Height mindestens 21 sein....

      Comment

      Working...
      X