HOW TO:將新資料列加入 ListObject 控制項時驗證資料
使用者可將新資料列加入至繫結至資料的 ListObject 控制項。 您可以在對資料來源執行變更之前,驗證使用者的資料。
**適用於:**本主題中的資訊適用於 Excel 2007 和 Excel 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
資料驗證
每當資料列加入繫結至資料的 ListObject 時,便會引發 BeforeAddDataBoundRow 事件。 您可以處理這個事件,執行資料驗證。 例如,您的應用程式要求只能將 18 到 65 歲的員工加入至資料來源,則可以在資料列加入之前,驗證輸入的年齡是否落在該範圍內。
注意事項 |
---|
您一定要在伺服器和用戶端檢查使用者輸入。 如需詳細資訊,請參閱安全用戶端應用程式 (ADO.NET)。 |
若要在新資料列加入至資料繫結 ListObject 時驗證資料
在類別層級建立 ID 和 DataTable 的變數。
Dim id As Integer = 0 Dim employeeTable As System.Data.DataTable
private int id = 0; private System.Data.DataTable employeeTable;
在 Sheet1 類別 (文件層級專案) 或 ThisAddIn 類別 (應用程式層級專案) 的 Startup 事件處理常式中,建立新的 DataTable 及加入範例資料行和資料。
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);
將程式碼加入至 list1_BeforeAddDataBoundRow 事件處理常式,以檢查輸入的年齡是否落在可接受的範圍內。
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; } }
編譯程式碼
這個程式碼範例假設您在顯示這個程式碼的工作表上,有名為 list1 的現有 ListObject。
請參閱
工作
概念
在應用程式層級增益集的執行階段中擴充 Word 文件和 Excel 活頁簿