Gewusst wie: Überprüfen von Eingaben mit dem DataGrid-Steuerelement von Windows Forms
Tipp
Obwohl das DataGridView-Steuerelement das DataGrid-Steuerelement ersetzt und funktionell erweitert, wird das DataGrid-Steuerelement sowohl aus Gründen der Abwärtskompatibilität als auch, falls gewünscht, für die zukünftige Verwendung beibehalten. Weitere Informationen finden Sie unter Unterschiede zwischen dem DataGridView-Steuerelement und dem DataGrid-Steuerelement in Windows Forms.
Für das DataGrid-Steuerelement in Windows Forms stehen zwei Arten der Eingabevalidierung zur Verfügung. Wenn der Benutzer versucht, einen Wert mit einem für die Zelle unzulässigen Datentyp einzugeben (z. B. eine Zeichenfolge anstatt einer ganzen Zahl), wird der neue unzulässige Wert durch den alten Wert ersetzt. Diese Art der Eingabevalidierung erfolgt automatisch und kann nicht angepasst werden.
Die andere Art der Eingabevalidierung kann verwendet werden, um unzulässige Daten zurückzuweisen (z. B. den Wert 0 in einem Feld, dessen Wert größer oder gleich 1 sein muss, oder eine unzulässige Zeichenfolge). Dieser Vorgang wird im DataSet durchgeführt, indem ein Ereignishandler für das ColumnChanging-Ereignis oder das RowChanging-Ereignis geschrieben wird. Im nachfolgenden Beispiel wird das ColumnChanging-Ereignis verwendet, da der unzulässige Wert insbesondere für die Spalte "Product" ungeeignet ist. Das RowChanging-Ereignis kann z. B. verwendet werden, um zu überprüfen, ob der Wert einer Spalte "End Date" zeitlich gesehen nach dem Wert der Spalte "Start Date" in derselben Zeile liegt.
So überprüfen Sie Benutzereingaben
Schreiben Sie für die entsprechende Tabelle Code zur Behandlung des ColumnChanging-Ereignisses. Wenn eine unzulässige Eingabe gefunden wird, rufen Sie die SetColumnError-Methode des DataRow-Objekts auf.
Private Sub Customers_ColumnChanging(ByVal sender As Object, _ ByVal e As System.Data.DataColumnChangeEventArgs) ' Only check for errors in the Product column If (e.Column.ColumnName.Equals("Product")) Then ' Do not allow "Automobile" as a product. If CType(e.ProposedValue, String) = "Automobile" Then Dim badValue As Object = e.ProposedValue e.ProposedValue = "Bad Data" e.Row.RowError = "The Product column contians an error" e.Row.SetColumnError(e.Column, "Product cannot be " & _ CType(badValue, String)) End If End If End Sub
//Handle column changing events on the Customers table private void Customers_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e) { //Only check for errors in the Product column if (e.Column.ColumnName.Equals("Product")) { //Do not allow "Automobile" as a product if (e.ProposedValue.Equals("Automobile")) { object badValue = e.ProposedValue; e.ProposedValue = "Bad Data"; e.Row.RowError = "The Product column contains an error"; e.Row.SetColumnError(e.Column, "Product cannot be " + badValue); } } }
//Handle column changing events on the Customers table private void Customers_ColumnChanging(System.Object sender, System.Data.DataColumnChangeEventArgs e) { //Only check for errors in the Product column if ( e.get_Column().get_ColumnName().Equals("Product") ) { //Do not allow "Automobile" as a product if ( e.get_ProposedValue().Equals("Automobile") ) { System.Object badValue = e.get_ProposedValue(); e.set_ProposedValue("Bad Data"); e.get_Row().set_RowError("The Product column contains an error"); e.get_Row().SetColumnError(e.get_Column(), "Product cannot be " + badValue); } } }
Verbinden Sie den Ereignishandler mit dem Ereignis.
Fügen Sie den folgenden Code entweder in das Load-Ereignis des Formulars oder in den zugehörigen Konstruktor ein.
' Assumes the grid is bound to a dataset called customersDataSet1 ' with a table called Customers. ' Put this code in the form's Load event or its constructor. AddHandler customersDataSet1.Tables("Customers").ColumnChanging, AddressOf Customers_ColumnChanging
// Assumes the grid is bound to a dataset called customersDataSet1 // with a table called Customers. // Put this code in the form's Load event or its constructor. customersDataSet1.Tables["Customers"].ColumnChanging += new DataColumnChangeEventHandler(this.Customers_ColumnChanging);
// Assumes the grid is bound to a dataset called customersDataSet1 // with a table called Customers // Put this code in the form's Load event or its constructor. customersDataSet1.get_Tables().get_Item("Customers").add_ColumnChanging( new DataColumnChangeEventHandler(this.Customers_ColumnChanging));