Cómo: Controlar errores cuando se agrega una fila nueva a un control ListObject

Actualización: Julio de 2008

Se aplica a

La información de este tema sólo se aplica a los proyectos y versiones especificados de Visual Studio Tools para Office de Microsoft Office.

Proyectos de nivel de documento

  • Excel 2007

  • Excel 2003

Proyectos de nivel de aplicación

  • Excel 2007

Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto.

Los usuarios pueden agregar filas nuevas a un control ListObject que está enlazado a datos. A veces, la relación del objeto de lista con el origen de datos produce errores de rutina. Por ejemplo, puede asignar las columnas que desea que aparezcan en ListObject. En este caso, si omite columnas con restricciones, como un campo que no puede aceptar valores Null, se provocará un error cada vez que se cree una fila. Puede escribir código para agregar los valores que faltan en un controlador del evento ErrorAddDataBoundRow.

Para administrar los errores producidos al agregar una fila enlazada a datos

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

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Cree un nuevo objeto DataTable y agregue columnas y datos de ejemplo en el controlador de eventos Startup de la clase Sheet1 (si es un proyecto en el nivel del documento) o la clase ThisAddIn (si es un proyecto en el nivel de la aplicación).

    employeeTable = New System.Data.DataTable("Employees")
    
    Dim column As System.Data.DataColumn = employeeTable.Columns.Add("Id", GetType(Int32))
    column.AllowDBNull = False
    
    employeeTable.Columns.Add("FirstName", GetType(String))
    employeeTable.Columns.Add("LastName", GetType(String))
    employeeTable.Columns.Add("Age", GetType(Int32))
    
    employeeTable.Rows.Add(id, "Nancy", "Anderson", 56)
    employeeTable.Rows.Add(id, "Robert", "Brown", 44)
    id += 1
    
    list1.SetDataBinding(employeeTable, "", "FirstName", "LastName", "Age")
    
    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.ErrorAddDataBoundRow += new Microsoft.Office.Tools.Excel.
        ErrorAddDataBoundRowEventHandler(list1_ErrorAddDataBoundRow);
    
  3. En el controlador del evento ErrorAddDataBoundRow, agregue el siguiente número incremental de identificador al campo de identificador y vuelva a agregar la fila.

    Private Sub list1_ErrorAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs) _
        Handles list1.ErrorAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If TypeOf (e.InnerException) Is NoNullAllowedException Then
            row("Id") = id
            id += 1
            e.Retry = True
        End If
    End Sub
    
    private void list1_ErrorAddDataBoundRow(object sender,
        Microsoft.Office.Tools.Excel.ErrorAddDataBoundRowEventArgs e)
    {
        System.Data.DataRow row = ((System.Data.DataRowView)e.Item).Row;
    
        if (e.InnerException is NoNullAllowedException)
        {
            row["Id"]= id;
            id++;
            e.Retry = true;
        }
    }
    

Compilar el código

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

Vea también

Tareas

Cómo: Asignar columnas ListObject a datos

Cómo: Validar datos cuando se agrega una fila nueva a un control ListObject

Conceptos

Ampliar documentos de Word y libros de Excel en complementos en el nivel de la aplicación en tiempo de ejecución

Desarrollo de complementos de nivel de aplicación de Excel

Agregar controles a documentos de Office en tiempo de ejecución

ListObject (Control)

Comprender la persistencia del orden de filas y columnas ListObject

Otros recursos

Controles en documentos de Office

Controles Host de Excel

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se modifica el ejemplo para que se pueda usar en un complemento en el nivel de la aplicación.

Cambio de características de SP1.