Como: validar dados quando uma nova linha é adicionada a um controle de ListObject

Os usuários podem adicionar novas linhas a um controle de ListObject associado a dados.Você pode validar os dados do usuário antes de confirmar as alterações na fonte de dados.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento e projetos de nível de aplicativo para Excel 2013 e Excel 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Validação de Dados

Sempre que uma linha é adicionada a ListObject que é associada a dados, o evento de BeforeAddDataBoundRow é gerado.Você pode manipular esse evento para executar a validação de dados.Por exemplo, se seu aplicativo requer que apenas os funcionários entre idades de 18 e 65 podem ser adicionados à fonte de dados, você pode verificar que a idade inserida em este esse intervalo antes da linha será adicionada.

ObservaçãoObservação

Você sempre deve verificar a entrada do usuário no servidor além do cliente.Para obter mais informações, consulte Creating Secure User Interfaces.

Para validar dados quando uma nova linha é adicionada a ListObject associado a dados

  1. Criar variáveis para a identificação e DataTable a nível de classe.

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Crie uma nova DataTable e adicionar colunas e dados de exemplo no manipulador de eventos de Startup da classe de Sheet1 (em um projeto de um documento) ou nível de classe de ThisAddIn (em um projeto de nível.)

    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.BeforeAddDataBoundRow +=new Microsoft.Office.Tools.Excel.
        BeforeAddDataBoundRowEventHandler(list1_BeforeAddDataBoundRow);
    
  3. Adicione código ao manipulador de eventos de list1_BeforeAddDataBoundRow para verificar se a idade este inserida no intervalo aceitável.

    Private Sub list1_BeforeAddDataBoundRow(ByVal sender As Object, ByVal e As  _
        Microsoft.Office.Tools.Excel.BeforeAddDataBoundRowEventArgs) _
        Handles list1.BeforeAddDataBoundRow
    
        Dim row As System.Data.DataRow = (CType(e.Item, System.Data.DataRowView)).Row
    
        If Not row("Age") Is Nothing And Not row("Age") Is Convert.DBNull Then
    
            Dim ageEntered As Integer = CType(row("Age"), Int32)
    
            If ageEntered < 21 Or ageEntered > 65 Then
                System.Windows.Forms.MessageBox.Show _
                    ("Age must be between 21 and 65. The row cannot be added.")
                e.Cancel = True
                Return
            End If
    
            row("ID") = id
            id += 1
    
        Else
            System.Windows.Forms.MessageBox.Show("You must enter an age.")
            e.Cancel = True
        End If
    End Sub
    
    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;
        }
    }
    

Compilando o código

Este exemplo de código a seguir pressupõe que você tem ListObject existente chamado list1 na planilha em que esse código aparece.

Consulte também

Tarefas

Como: mapear ListObject colunas para dados

Conceitos

Estendendo os documentos do Word e pastas de trabalho do Excel em suplementos de nível de aplicativo em tempo de execução

Adicionar controles a documentos do Office em tempo de execução

Controle de ListObject

Automatizar o Excel usando o Extended objetos

Outros recursos

Controles em documentos do Office