Практическое руководство. Обработка данных при добавлении новой строки в элемент управления ListObject
Обновлен: Июль 2008
Применение |
---|
Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office. Проекты уровня документа
Проекты уровня приложения
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
Пользователи могут добавлять новые строки в элемент управления ListObject, связанный с данными. Можно проверять данные пользователя перед принятием изменений в источнике данных.
При возникновении ошибки можно написать код, чтобы предоставить дополнительные данные для исправления ошибки. Дополнительные сведения см. в разделе Практическое руководство. Обработка ошибок, происходящих при добавлении новой строки в элемент управления ListObject.
Проверка данных
Событие BeforeAddDataBoundRow возникает при добавлении новой строки в источник данных ListObject. Можно обработать данное событие для выполнения проверки данных. Например, если приложению требуется, чтобы в источник данных можно было добавлять только сотрудников в возрасте от 18 до 65 лет, можно провести проверку, определяющую, попадает ли возраст сотрудника в указанный диапазон до того, как будет добавлена строка.
Примечание. |
---|
Всегда необходимо проводить проверку данных, введенных пользователем на сервере и на клиенте. Дополнительные сведения см. в разделе Защищенные клиентские приложения (ADO.NET). |
Проверка данных при добавлении новой строки в элемент управления с привязкой к данным ListObject
Создайте переменную для идентификатора и DataTable на уровне класса.
Dim id As Integer = 0 Dim employeeTable As System.Data.DataTable
private int id = 0; private System.Data.DataTable employeeTable;
Создайте DataTable и добавьте пример столбца и данные в класс Startup event handler of the Sheet1 (в проекте на уровне документа) или ThisAddIn (в проекте на уровне приложения).
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; } }
Компиляция кода
В данном примере кода предполагается, что на листе, к которому применяется этот код, имеется элемент управления ListObject с именем list1.
См. также
Задачи
Практическое руководство. Сопоставление столбцов элемента управления ListObject данным
Основные понятия
Расширение документов Word и книг Excel в надстройках уровня приложения во время выполнения
Разработка надстроек уровня приложения для Excel
Добавление элементов управления в документы Office во время выполнения
Основные сведения о сохранении порядка столбцов и строк ListObject.
Другие ресурсы
Элементы управления в документах Office
Элементы управления ведущего приложения Excel
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Июль 2008 |
Пример изменен, чтобы его можно было использовать в надстройке уровня приложения. |
Изменение функции SP1. |