Procedura: convalidare dati quando viene aggiunta una nuova riga a un controllo ListObject
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.
Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento e di applicazione per Excel 2007 ed Excel 2010. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.
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 Applicazioni client protette (ADO.NET).
Per convalidare i dati quando una nuova riga viene aggiunta a un controllo ListObject associato a dati
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;
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);
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: eseguire il mapping delle colonne ListObject ai dati
Concetti
Aggiunta di controlli ai documenti di Office in fase di esecuzione
Automazione di Excel utilizzando oggetti estesi