Dela via


Så här validerar du indata med Windows Forms DataGrid-kontrollen

Anmärkning

Den DataGridView kontrollen ersätter och lägger till funktioner i DataGrid-kontrollen. Den DataGrid kontrollen behålls dock för både bakåtkompatibilitet och framtida användning, om du väljer det. För mer information, se Skillnader mellan Windows Forms DataGridView- och DataGrid-kontrollerna.

Det finns två typer av indataverifiering för Windows Forms-DataGrid kontroll. Om användaren försöker ange ett värde som är av en oacceptabel datatyp för cellen, till exempel en sträng i ett heltal, ersätts det nya ogiltiga värdet med det gamla värdet. Den här typen av indataverifiering görs automatiskt och kan inte anpassas.

Den andra typen av indataverifiering kan användas för att avvisa otillåtna data, till exempel ett 0-värde i ett fält som måste vara större än eller lika med 1 eller en olämplig sträng. Detta görs i datauppsättningen genom att skriva en händelsehanterare för händelsen ColumnChanging eller RowChanging. I exemplet nedan används händelsen ColumnChanging eftersom det oacceptabla värdet inte tillåts för kolumnen "Product" i synnerhet. Du kan använda händelsen RowChanging för att kontrollera att värdet för en "Slutdatum"-kolumn är senare än kolumnen "Startdatum" på samma rad.

Verifiera användarindata

  1. Skriv kod för att hantera händelsen ColumnChanging för lämplig tabell. När olämpliga indata identifieras anropar du SetColumnError-metoden för DataRow-objektet.

    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 contains 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);
          }
       }
    }
    
  2. Anslut händelsehanteraren till händelsen.

    Placera följande kod i antingen formulärets Load händelse eller dess konstruktor.

    ' 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);
    

Se även