DataGridView - Validierung, DataError

05/03/2009 - 20:28 von Josef Morlo | Report spam
Hallo,
VS 2005 Express

Habe ein simples (?) Progràmmchen, das mir einige Eingaben wischenspeichern
soll.
Und zwar mittels DataGridView (DataTable, DataView) mit drei Spalten, einer
schreibgeschützten, zwei weiteren mit Eingabeprüfung. Um die Eingaben für
den Nutzer zu erleichtern, kann er mit einer Tastenkombination einen neuen
Datensatz anlegen. Folgender Code:

[Code zur Erstellung einer DataGridView zur LaufZeit]
.
.
.
Private Sub mDgv_CellValidating(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) _
Handles mDgv.CellValidating
Dim r As Integer
If e.ColumnIndex = 1 Or e.ColumnIndex = 2 Then
If Not Integer.TryParse(e.FormattedValue.ToString, r) Then
MessageBox.Show("Bitte Ganzzahl eingeben!", "Eingabe", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
e.Cancel = True
End If
End If
End Sub

Private Sub mDgv_EditingControlShowing(ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles mDgv.EditingControlShowing

If mDgv.CurrentRow.Cells(2) Is mDgv.CurrentCell Then
If TypeOf (e.Control) Is DataGridViewTextBoxEditingControl Then
mTb = DirectCast(e.Control, TextBox)
End If
End If
End Sub

Private Sub mTb_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles mTb.KeyDown

If e.Control And e.KeyCode = Keys.N Then 'Tastencode für neuen
Datensatz
mDgv.EndEdit()
AddNewPoint()
End If
End Sub

Sub AddNewPoint() 'Neue Zeile im Grid erstellen und einen Wert vorgeben
Dim dr As DataRow

With mDt
dr = .NewRow
dr.Item("Punkt") = "B"
.Rows.Add(dr)
.AcceptChanges()
End With
mDgv.CurrentCell = mDgv.Rows(mDgv.RowCount - 1).Cells(1)
End Sub

Wenn nun eine Falscheingabe erfolgt ist, und gleichzeitig die
Tastenkombination für eine neue Reihe gedrückt wird, bleibt das zu prüfende
Feld leer, und der cursor springt in die neue Reihe (mit "DataError"). Wie
könnte ich erreichen, dass die Aktion abgebrochen wird, und der Fokus im zu
validierenden Feld verbleibt?

Grüße und Danke im voraus

Josef Morlo
 

Lesen sie die antworten

#1 Peter Fleischer
06/03/2009 - 08:05 | Warnen spam
"Josef Morlo" schrieb im Newsbeitrag
news:106yhr18vu922$


Wenn nun eine Falscheingabe erfolgt ist, und gleichzeitig die
Tastenkombination für eine neue Reihe gedrückt wird, bleibt das zu
prüfende
Feld leer, und der cursor springt in die neue Reihe (mit "DataError"). Wie
könnte ich erreichen, dass die Aktion abgebrochen wird, und der Fokus im
zu
validierenden Feld verbleibt?



Hi Josef,
ich finde diesen Ehrgeiz, den Anwender maximal zu bevormunden, nicht gut.

Lass ihn doch eingaben, was er gern möchte. Manchmal erfordern
Arbeitsablàufe (z.B. Daten werden nebenbei erst einmal beschaftt)
abweichende Erfassungsreihenfolgen. Irgendwann kommt der Bediener an den
Punkt, den Abschluss der Erfassung zu bestàtigen. Dort kannst du ihm dann
mittteilen, wo es falsche oder fehlende Werte gibt. Dazu kannst du den
Errorprovider oder RowError oder ColumnError nutzen. Solange die Prüfung
nicht erfolgreich war, wird auch die Datenerfassung nicht beendet. Der
Bediener kann sie in diesem Fall nur abbrechen, wenn er die Daten nicht
korrigieren kann/will.

Viele Grüsse
Peter

Ähnliche fragen