Compartir a través de


Procedimiento para validar los datos introducidos con el control DataGrid de formularios Windows Forms

Nota:

El control DataGridView reemplaza y agrega funcionalidad al control DataGrid; sin embargo, el control DataGrid se conserva a efectos de compatibilidad con versiones anteriores y uso futuro, en su caso. Para obtener más información, consulte Diferencias entre los controles DataGridView y DataGrid de formularios Windows Forms.

Hay dos tipos de validación de los datos introducidos disponibles para el control DataGrid de Windows Forms. Si el usuario intenta escribir un valor que es de un tipo de datos inaceptable para la celda, por ejemplo, una cadena en un entero, el nuevo valor no válido se reemplaza por el valor anterior. Este tipo de validación de datos introducidos se realiza automáticamente y no se puede personalizar.

El otro tipo de validación de datos introducidos se puede usar para rechazar cualquier dato inaceptable, por ejemplo, un valor 0 en un campo que debe ser mayor o igual que 1, o una cadena inapropiada. Esto se lleva a cabo en el conjunto de datos, escribiendo un controlador de eventos para los eventos ColumnChanging o RowChanging. En el ejemplo siguiente se usa el evento ColumnChanging porque hay un valor inaceptable que no se permite en la columna "Product" en particular. El evento RowChanging se podría usar para comprobar que el valor de una columna "Fecha de finalización" es posterior a la columna "Fecha de inicio" de la misma fila.

Para validar datos introducidos por el usuario

  1. Escriba código para controlar el evento ColumnChanging de la tabla adecuada. Cuando se detecten unos datos introducidos inapropiados, llame al método SetColumnError del objeto 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. Conecte el controlador de eventos al evento.

    Coloque el código siguiente en el evento Load del formulario o en su constructor.

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

Consulte también