Поделиться через


Проверка данных при добавлении новой строки в элемент управления ListObject

Пользователи могут добавлять новые строки в элемент управления ListObject с привязкой к данным. Вы можете проверять данные пользователя перед фиксацией изменений в источнике данных.

Область применения. Сведения в этом разделе относятся к проектам уровня документа и проектам надстроек VSTO для Excel. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

Проверка данных

Каждый раз, когда строка добавляется в ListObject с привязкой к данным, возникает событие BeforeAddDataBoundRow . Это событие можно обработать для выполнения проверки данных. Например, если приложению требуется, чтобы только сотрудники в возрасте от 18 до 65 лет могли быть добавлены в источник данных, убедитесь, что возраст, введенный в этот диапазон, до добавления строки.

Примечание.

Всегда следует проверять входные данные пользователя на сервере, как и на клиенте. Дополнительные сведения см. в разделе "Безопасные клиентские приложения".

Проверка данных при добавлении новой строки в элемент управления ListObject с привязкой к данным

  1. Создайте переменные для идентификатора и объекта DataTable на уровне класса.

    private int id = 0;
    private System.Data.DataTable employeeTable;
    
  2. Создайте новые DataTable и добавьте примеры столбцов и данных в Startup обработчик Sheet1 событий класса (в проекте уровня документа) или ThisAddIn классе (в проекте надстройки 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. Добавьте код в обработчик событий list1_BeforeAddDataBoundRow , чтобы проверить, попадает ли возраст в допустимый диапазон.

    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 .