Compartir por


Cómo validar la entrada con el control DataGrid de Windows Forms

Nota:

El DataGridView control reemplaza y agrega funcionalidad al DataGrid control; sin embargo, el DataGrid control se conserva tanto para la compatibilidad con versiones anteriores como para el uso futuro, si lo desea. Para obtener más información, consulte Diferencias entre los controles DataGridView y DataGrid de Windows Forms.

Hay dos tipos de validación de entrada disponibles para el control de Windows Forms DataGrid . 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 entrada se realiza automáticamente y no se puede personalizar.

El otro tipo de validación de entrada 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 hace en el conjunto de datos escribiendo un controlador de eventos para el ColumnChanging evento o RowChanging . En el ejemplo siguiente se usa el ColumnChanging evento porque no se permite el valor inaceptable para la columna "Product" en particular. Puede usar el RowChanging evento 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 la entrada del usuario

  1. Escriba código para controlar el ColumnChanging evento de la tabla adecuada. Cuando se detecta una entrada inapropiada, llame al SetColumnError método del DataRow objeto .

    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 del Load 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