Condividi tramite


Procedura: convalidare dati quando viene aggiunta una nuova riga a un controllo ListObject

Aggiornamento: Luglio 2008

Si applica a

Le informazioni contenute in questo argomento riguardano solo i progetti Visual Studio Tools per Office e le versioni di Microsoft Office specificati.

Progetti a livello di documento

  • Excel 2007

  • Excel 2003

Progetti a livello di applicazione

  • Excel 2007

Per ulteriori informazioni, vedere la classe Funzionalità disponibili in base ai tipi di progetto e applicazione.

Gli utenti possono aggiungere nuove righe a un controllo ListObject associato a dati. È possibile convalidare i dati dell'utente prima di eseguire il commit delle modifiche nell'origine dati.

Se si verifica un errore, è possibile scrivere codice per fornire dati aggiuntivi allo scopo di correggere l'errore. Per ulteriori informazioni, vedere Procedura: gestire errori quando viene aggiunta una nuova riga a un controllo ListObject.

Convalida dei dati

Ogni volta che si aggiunge una riga a un oggetto ListObject associato a dati viene generato l'evento BeforeAddDataBoundRow. È possibile gestire questo evento per eseguire la convalida dei dati. Se ad esempio nell'applicazione si richiede che solo i dipendenti di età compresa tra 18 e 65 anni possano essere aggiunti all'origine dati, è possibile verificare che l'età inserita sia compresa in tale intervallo prima che la riga venga aggiunta.

Nota:

È sempre opportuno verificare l'input dell'utente non solo nel client ma anche nel server. Per ulteriori informazioni, vedere la classe Applicazioni client protette (ADO.NET).

Per convalidare i dati quando una nuova riga viene aggiunta a un controllo ListObject associato a dati

  1. Creare variabili per l'ID e la classe DataTable a livello di classe.

    Dim id As Integer = 0
    Dim employeeTable As System.Data.DataTable
    
    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Creare un nuovo oggetto DataTable e aggiungere colonne e dati di esempio nel gestore eventi Startup della classe Sheet1 (in un progetto a livello di documento) o della classe ThisAddIn (in un progetto a livello di applicazione).

    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. Aggiungere codice al gestore eventi list1_BeforeAddDataBoundRow per verificare se l'età inserita è compresa nell'intervallo appropriato.

    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;
        }
    }
    

Compilazione del codice

In questo esempio di codice si presume che nel foglio di lavoro in cui appare il codice sia già presente un controllo ListObject denominato list1.

Vedere anche

Attività

Procedura: mappare le colonne ListObject ai dati

Procedura: gestire errori quando viene aggiunta una nuova riga a un controllo ListObject

Concetti

Estensione in fase di esecuzione di documenti di Word e di cartelle di lavoro di Excel in componenti aggiuntivi a livello di applicazione

Sviluppo di componenti aggiuntivi a livello di applicazione per Excel

Aggiunta di controlli ai documenti di Office in fase di esecuzione

Controllo ListObject

Informazioni sulla persistenza di ordini di colonne e righe ListObject

Altre risorse

Controlli nei documenti di Office

Controlli host di Excel

Cronologia delle modifiche

Date

History

Motivo

Luglio 2008

Modificato l'esempio affinché possa essere utilizzato in un componente aggiuntivo a livello di applicazione.

Modifica di funzionalità in SP1.