Практическое руководство. Добавление проверки в N-уровневом наборе данных

Обновлен: Ноябрь 2007

Процедура добавления проверки к набору данных, разделенному на многоуровневое решение, практически полностью совпадает с процедурой добавления проверки набора в одном файле (набора данных в одном проекте). Предлагаемый момент для выполнения проверки данных — во время событий ColumnChanging и/или RowChanging таблицы данных.

Конструктор наборов данных предоставляет функциональные возможности для создания разделяемых классов, к которым можно добавить пользовательский код событий изменения столбцов и строк таблиц в наборе данных. Дополнительные сведения о добавлении кода в набор данных в многоуровневом решении, содержатся в Практическое руководство. Добавление кода для наборов данных в многоуровневых приложениях и Практическое руководство. Добавление кода для объектов TableAdapter в многоуровневых приложениях. Дополнительные сведения о разделяемых классах содержатся в разделах Практическое руководство. Разделение класса в разделяемые классы и Разделяемые классы и методы (Руководство по программированию в C#).

Bb531223.alert_note(ru-ru,VS.90).gifПримечание.

После разделения наборов данных из адаптеров таблиц (путем установки свойства Проект набора данных), существующие в проекте частичные классы наборов данных не будут перемещены автоматически. Существующие разделяемые классы наборов данных должны быть вручную перемещены в проект набора данных.

Bb531223.alert_note(ru-ru,VS.90).gifПримечание.

Конструктор наборов данных не создает обработчик событий в C# для событий ColumnChanging и RowChanging автоматически. Обработчик событий необходимо создать вручную и подключить к базовому событию. Выполните следующие шаги для создания обработчика событий в Visual Basic и C#.

Проверка изменений в отдельных столбцах

Проверка значений в отдельных столбцах происходит при обработке события ColumnChanging. Событие ColumnChanging возникает при изменении значения в столбце. Создайте обработчик событий для события ColumnChanging, дважды щелкнув требуемый столбец в Конструктор наборов данных.

При первом двойном щелчке на столбце, конструктор создает обработчик событий для события ColumnChanging. В дополнение к событию ColumnChanging, создается инструкция If…Then, которая также проверяет указанный столбец. Например, при двойном нажатии на колонке RequiredDate в таблице NorthwindOrders создается следующий код:

Private Sub OrdersDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) Handles Me.ColumnChanging
    If (e.Column.ColumnName = Me.RequiredDateColumn.ColumnName) Then
        ' Add validation code here.
    End If
End Sub
Bb531223.alert_note(ru-ru,VS.90).gifПримечание.

В проектах C# конструктор наборов данных создает только разделяемые классы для набора данных и отдельные таблицы в наборе данных. Конструктор наборов данных в C# не создает обработчики событий для событий ColumnChanging и RowChanging автоматически, как это делается в Visual Basic. В проектах C# необходимо вручную создать метод для обработки события и подключить метод к основному событию. Выполните следующие шаги для создания обработчиков событий в Visual Basic и C#.

Bb531223.alert_note(ru-ru,VS.90).gifПримечание.

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Чтобы добавить проверку во время изменения отдельного столбца

  1. Откройте набор данных в Конструктор наборов данных, дважды щелкнув файл .xsd в Обозреватель решений. Дополнительные сведения см. в разделе Практическое руководство. Открытие набора данных в конструкторе наборов данных.

  2. Дважды щелкните столбец, который требуется проверить. В результате этого действия создается обработчик событий ColumnChanging.

    Bb531223.alert_note(ru-ru,VS.90).gifПримечание.

    Конструктор наборов данных не создает обработчик событий для события C# автоматически. Необходимый для обработки события в C# код приведен ниже. Событие SampleColumnChangingEvent создается, а затем привязывается к событию ColumnChanging в методе EndInit.

  3. Добавьте код для проверки данных, содержащихся в e.ProposedValue, на соответствие требованиям приложения. Если предложенное значение является недопустимым, укажите столбец для индикации наличия ошибки.

    В следующем примере кода выполняется проверка того, что столбец Quantity содержит больше 0. Если значение Quantity меньше или равно 0, столбцу присваивается ошибка. Условие Else убирает ошибку если значение больше 0. Код в обработчике событий изменения столбца должен выглядеть следующим образом:

    If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then
        If CType(e.ProposedValue, Short) <= 0 Then
            e.Row.SetColumnError(e.Column, "Quantity must be greater than 0")
        Else
            e.Row.SetColumnError(e.Column, "")
        End If
    End If
    
    // C#
    // Add this code to the DataTable 
    // partial class.
    
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the ColumnChanging event
            // to call the SampleColumnChangingEvent method.
            ColumnChanging += SampleColumnChangingEvent;
        }
    
        public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e)
        {
            if (e.Column.ColumnName == QuantityColumn.ColumnName)
            {
                if ((short)e.ProposedValue <= 0)
                {
                    e.Row.SetColumnError("Quantity", "Quantity must be greater than 0");
                }
                else
                {
                    e.Row.SetColumnError("Quantity", "");
                }
            }
        }
    

Проверка изменения всей строки

Проверка значений во всей строке выполняется при обработке события RowChanging. Событие RowChanging возникает при фиксации значений во всех столбцах. Если значение в данном столбце основывается на значении в другом столбце, необходимо выполнять проверку в событии RowChanging. Например, рассмотрим OrderDate и RequiredDate в таблице Orders в базе данных Northwind. При вводе заказов проверяется, чтобы значение RequiredDate не было равно или меньше значения OrderDate. В этом примере значения столбцов RequiredDate и OrderDate сравниваются, поэтому проверка изменения отдельных столбцов не имеет смысла.

Создайте обработчик событий для события RowChanging, дважды щелкнув имя таблицы в строке заголовка таблицы в Конструктор наборов данных.

Чтобы добавить проверку во время изменения всех строк

  1. Откройте набор данных в Конструктор наборов данных, дважды щелкнув файл .xsd в Обозреватель решений. Дополнительные сведения см. в разделе Практическое руководство. Открытие набора данных в конструкторе наборов данных.

  2. Дважды щелкните строку заголовка таблицы данных в конструкторе.

    Программа создаст разделяемый класс с обработчиком событий RowChanging и откроет его в редакторе кода.

    Bb531223.alert_note(ru-ru,VS.90).gifПримечание.

    Конструктор наборов данных не создает обработчик событий в C# для событий RowChanging автоматически. Чтобы подключить событие в методе инициализации таблицы, необходимо создать метод обработки события RowChanging и выполнить код.

  3. Добавьте код внутри объявления частичного класса.

  4. Следующий код демонстрирует, где следует добавить пользовательский код для проверки во время события RowChanging для Visual Basic:

    Partial Class OrdersDataTable
        Private Sub OrdersDataTable_OrdersRowChanging(ByVal sender As System.Object, ByVal e As OrdersRowChangeEvent) Handles Me.OrdersRowChanging
            ' Add logic to validate columns here.
            If e.Row.RequiredDate <= e.Row.OrderDate Then
                ' Set the RowError if validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate"
            Else
                ' Clear the RowError when validation passes.
                e.Row.RowError = ""
            End If
        End Sub
    End Class
    
  5. В следующем коде показано, как создать обработчик событий RowChanging, и где можно добавить пользовательский код для проверки во время события RowChanging для C#:

    partial class OrdersDataTable
    {
        public override void EndInit()
        {
            base.EndInit();
            // Hook up the event to the
            // RowChangingEvent method.
            OrdersRowChanging += RowChangingEvent;
        }
    
        public void RowChangingEvent(object sender, OrdersRowChangeEvent e)
        {
            // Perfom the validation logic.
            if (e.Row.RequiredDate <= e.Row.OrderDate)
            {
                // Set the row to an error when validation fails.
                e.Row.RowError = "Required Date cannot be on or before the OrderDate";
            }
            else
            {
                // Clear the RowError if validation passes.
                e.Row.RowError = "";
            }
        }
    }
    

См. также

Задачи

Пошаговое руководство. Создание многоуровневого приложения для работы с данными

Основные понятия

Новые возможности данных

Создание приложений для обработки данных с помощью Visual Studio

Общие сведения о N-уровневом приложении для обработки данных

Общие сведения о проверке данных