Compartir a través de


Validar datos cuando se agrega una nueva fila a un control ListObject

Los usuarios pueden agregar filas nuevas a un control ListObject enlazado a datos. Puede validar los datos del usuario antes de confirmar los cambios al origen de datos.

Se aplica a: La información de este tema se aplica a proyectos de nivel de documento y proyectos de complementos de VSTO para Excel. Para obtener más información, consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Validación de datos

Cada vez que se agrega una fila a un ListObject que está enlazado a datos, se produce el evento BeforeAddDataBoundRow . Puede controlar este evento para realizar la validación de datos. Por ejemplo, si la aplicación requiere que solo los empleados entre los 18 y los 65 años de edad se puedan agregar al origen de datos, compruebe que la edad especificada se encuentra dentro de ese intervalo antes de agregar la fila.

Nota:

Debe comprobar siempre las entradas de los usuarios en el servidor, además del cliente. Para obtener más información, consulte Protección de aplicaciones cliente.

Para validar datos cuando se agrega una fila nueva a un control ListObject enlazado a datos

  1. Cree variables para el identificador y DataTable en el nivel de clase.

    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Cree una nueva DataTable y agregue columnas y datos de ejemplo en el Startup controlador de eventos de la Sheet1 clase (en un proyecto de nivel de documento) o ThisAddIn clase (en un proyecto de complemento de VSTO).

    employeeTable = new System.Data.DataTable("Employees");
    
    System.Data.DataColumn column = employeeTable.Columns.Add
        ("Id", typeof(int));
    column.AllowDBNull = false;
    
    employeeTable.Columns.Add("FirstName", typeof(string));
    employeeTable.Columns.Add("LastName", typeof(string));
    employeeTable.Columns.Add("Age", typeof(int));
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", "56");
    employeeTable.Rows.Add(id, "Robert", "Brown", "44");
    id++;
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age");
    
    list1.BeforeAddDataBoundRow +=new Microsoft.Office.Tools.Excel.
        BeforeAddDataBoundRowEventHandler(list1_BeforeAddDataBoundRow);
    
  3. Agregue código al controlador de eventos list1_BeforeAddDataBoundRow para comprobar si la edad escrita está dentro del intervalo aceptable.

    private void list1_BeforeAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (row["Age"] != null && row["Age"] != Convert.DBNull)
        {
            int ageEntered = (int)row["Age"];
    
            if (ageEntered < 21 || ageEntered > 65)
            {
                System.Windows.Forms.MessageBox.Show
                    ("Age must be between 21 and 65. The row cannot be added.");
                e.Cancel = true;
                return;
            }
            row["ID"] = id;
            id++;
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("You must enter an age.");
            e.Cancel = true;
        }
    }
    

Compilar el código

Este ejemplo de código supone que dispone de un ListObject existente denominado list1 en la hoja de cálculo en la que aparece este código.