Condividi tramite


Procedura: convalidare l'input con il controllo DataGrid Windows Form

Nota

Benché il controllo DataGridView sostituisca il controllo DataGrid aggiungendovi funzionalità, il controllo DataGrid viene mantenuto per compatibilità con le versioni precedenti e per un eventuale uso futuro. Per altre informazioni, vedere Differenze tra i controlli DataGridView e DataGrid Windows Form.

Sono disponibili due tipi di convalida di input per il controllo Windows FormDataGrid. Se l'utente tenta di immettere un valore di tipo non accettabile per la cella, ad esempio una stringa in un numero intero, il nuovo valore non valido viene sostituito con il valore precedente. Questo tipo di convalida dell'input viene eseguito automaticamente e non può essere personalizzato.

L'altro tipo di convalida dell'input può essere usato per rifiutare eventuali dati inaccettabili, ad esempio un valore 0 in un campo che deve essere maggiore o uguale a 1 o una stringa inappropriata. Questa operazione viene eseguita nel set di dati scrivendo un gestore eventi per l'evento ColumnChanging o RowChanging . L'esempio seguente usa l'evento ColumnChanging perché il valore inaccettabile non è consentito per la colonna "Product" in particolare. È possibile utilizzare l'evento RowChanging per verificare che il valore di una colonna "Data di fine" sia successivo alla colonna "Data di inizio" nella stessa riga.

Per convalidare l'input dell'utente

  1. Scrivere codice per gestire l'evento ColumnChanging per la tabella appropriata. Quando viene rilevato un input non appropriato, chiamare il SetColumnError metodo dell'oggetto DataRow .

    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. Connessione il gestore eventi all'evento.

    Inserire il codice seguente all'interno dell'evento del Load form o del relativo costruttore.

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

Vedi anche