Convalidare i dati quando viene aggiunta una nuova riga a un controllo ListObject

Gli utenti possono aggiungere nuove righe a un controllo ListObject associato ai dati. È possibile convalidare i dati dell'utente prima del commit delle modifiche all'origine dati.

Si applica a: le informazioni contenute in questo argomento si applicano ai progetti a livello di documento e ai progetti di componente aggiuntivo VSTO per Excel. Per altre informazioni, vedere Funzionalità disponibili per app Office lication e tipo di progetto.

Convalida dei dati

Ogni volta che viene aggiunta una riga a ListObject associata ai dati, viene generato l'evento BeforeAddDataBoundRow . È possibile gestire questo evento per eseguire la convalida dei dati. Ad esempio, se l'applicazione richiede che solo i dipendenti di età compresa tra i 18 e i 65 anni possano essere aggiunti all'origine dati, verificare che l'età immessa rientra in tale intervallo prima dell'aggiunta della riga.

Nota

È sempre opportuno verificare l'input dell'utente non solo nel client ma anche nel server. Per altre informazioni, vedere Proteggere le applicazioni client.

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

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

    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Creare una nuova DataTable e aggiungere colonne e dati di esempio nel Startup gestore eventi della Sheet1 classe (in un progetto a livello di documento) o ThisAddIn una classe (in un progetto di componente aggiuntivo 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. Aggiungere codice al gestore eventi list1_BeforeAddDataBoundRow per controllare se l'età immessa è compresa nell'intervallo appropriato.

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

Compilare il codice

Questo esempio di codice presuppone che nel foglio di lavoro in cui appare il codice sia già presente un controllo ListObject denominato list1 .