Практическое руководство. Добавление проверки в N-уровневом наборе данных
Процедура добавления проверки к набору данных, разделенному на многоуровневое решение, практически полностью совпадает с процедурой добавления проверки набора в одном файле (набора данных в одном проекте). Предлагаемый момент для выполнения проверки данных — во время событий ColumnChanging и/или RowChanging таблицы данных.
Создание и изменение типизированных наборов данных предоставляет функциональные возможности для создания разделяемых классов, к которым можно добавить пользовательский код событий изменения столбцов и строк таблиц в наборе данных. Дополнительные сведения о добавлении кода в набор данных в многоуровневом решении, содержатся в Практическое руководство. Добавление кода для наборов данных в многоуровневых приложениях и Практическое руководство. Добавление кода для объектов TableAdapter в многоуровневых приложениях. Дополнительные сведения о разделяемых классах содержатся в разделах Практическое руководство. Разделение класса в разделяемые классы (конструктор классов) и Разделяемые классы и методы (Руководство по программированию в C#).
Примечание
После разделения наборов данных из адаптеров таблиц (путем установки свойства Проект набора данных), существующие в проекте частичные классы наборов данных не будут перемещены автоматически.Существующие разделяемые классы наборов данных должны быть вручную перемещены в проект набора данных.
Примечание
Конструктор наборов данных не создает обработчик событий в 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
Примечание
В проектах C# конструктор наборов данных создает только разделяемые классы для набора данных и отдельные таблицы в наборе данных.Конструктор наборов данных в C# не создает обработчики событий для событий ColumnChanging и RowChanging автоматически, как это делается в Visual Basic.В проектах C# необходимо вручную создать метод для обработки события и подключить метод к основному событию.Выполните следующие шаги для создания обработчиков событий в Visual Basic и C#.
Примечание
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Настройка параметров разработки в Visual Studio.
Чтобы добавить проверку во время изменения отдельного столбца
Откройте набор данных в Создание и изменение типизированных наборов данных, дважды щелкнув файл XSD в обозревателе решений. Для получения дополнительной информации см. Практическое руководство. Открытие набора данных в конструкторе наборов данных.
Дважды щелкните столбец, который требуется проверить. В результате этого действия создается обработчик событий ColumnChanging.
Примечание
Конструктор наборов данных не создает обработчик событий для события C# автоматически.Код, необходимый для обработки события в С#, представлен ниже.SampleColumnChangingEvent создается и подключается к событию ColumnChanging в методе EndInit.
Добавьте код для проверки данных, содержащихся в 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, дважды щелкнув имя таблицы в строке заголовка таблицы в Создание и изменение типизированных наборов данных.
Чтобы добавить проверку во время изменения всех строк
Откройте набор данных в Создание и изменение типизированных наборов данных, дважды щелкнув файл XSD в обозревателе решений. Для получения дополнительной информации см. Практическое руководство. Открытие набора данных в конструкторе наборов данных.
Дважды щелкните строку заголовка таблицы данных в конструкторе.
Программа создаст разделяемый класс с обработчиком событий RowChanging и откроет его в редакторе кода.
Примечание
Конструктор наборов данных не создает обработчик событий в C# для событий RowChanging автоматически.Чтобы подключить событие в методе инициализации таблицы, необходимо создать метод обработки события RowChanging и выполнить код.
Добавьте код внутри объявления частичного класса.
Следующий код демонстрирует, где следует добавить пользовательский код для проверки во время события 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
В следующем коде показано, как создать обработчик событий 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 = ""; } } }
См. также
Задачи
Пошаговое руководство. Создание многоуровневого приложения для работы с данными
Основные понятия
Общие сведения о N-уровневых приложениях для работы с данными