Справедливо и обратное утверждение, а именно: набор данных (DataSet) может быть сгенерирован по известной схеме. Сейчас мы намерены показать, как это делается в рамках студии.
· Исключите схему из проекта, выбрав команду Exclude from project.
· Вновь добавьте файл схемы Student.xsd в проект, выбрав команду контекстного меню Add®Existing Item).
Обратите внимание на то, что в папке Data появился новый файл Students.Designer.cs. Откройте его и убедитесь, что он содержит код класса, производного от DataSet.
public partial class StudsExams : global::System.Data.DataSet
Этот класс был автоматически сгенерирован студией на основе информации файла со схемой DataSet. Это и есть типизированный DataSet. Просматривать структуру класса удобно с помощью окна Class View, или с помощью компонента Object Browser. Откройте один из этих инструментов с помощью команды, выбранной из меню View, и убедитесь, что новый класс StudsExams обитает в пространстве имен StudentsDBEx.Data и представляет собой довольно сложную структуру данных.
Другой инструмент студии — Class Diagram отображает структуру класса в графическом виде. Вы можете создать диаграмму класса с помощью команды View Class Diagram, выбранной в контекстном меню из окна Class View. На рисунке ниже приведена часть диаграммы, которая показывает классы, вложенные в StudsExams.
Класс StudsExams содержит вложенные описания классов (Nested Types). Они помогают работать с таблицами (классы StudsDataTable и ExamsDataTable) и со строками этих таблиц (классы StudsRow и ExamsRow).
В классе StudsExams также присутствует определение делегатных типов:
public delegate void StudsRowChangeEventHandler(object sender, StudsRowChangeEvent e);
public delegate void ExamsRowChangeEventHandler(object sender, ExamsRowChangeEvent e);
В нем определены события с сигнатурой этих делегатных типов:
public event StudsRowChangeEventHandler StudsRowChanging;
public event StudsRowChangeEventHandler StudsRowChanged;
public event StudsRowChangeEventHandler StudsRowDeleting;
public event StudsRowChangeEventHandler StudsRowDeleted;
public event ExamsRowChangeEventHandler ExamsRowChanging;
public event ExamsRowChangeEventHandler ExamsRowChanged;
public event ExamsRowChangeEventHandler ExamsRowDeleting;
public event ExamsRowChangeEventHandler ExamsRowDeleted;
Есть классы, помогающие работать с параметрами событий (StudsRowChangeEvent и ExamsRowChangeEvent). Расссмотрим, например, структуру класса StudsRowChangeEvent, производного от EventArgs.
Вы видите, что вложенные класы имеют свои поля данных, свойства, перечисления, и события. Благодаря строгой типизации работать с объектами перечисленных классов значительно проще, чем с обобщенными классами DataSet, DataTable и DataRow.
Связи между таблицами описаны коллекцией Relations, в которой присутствует только один элемент.
DataRelation relationStudsExams;
Вновь созданные классы учитывают требования схемы Students.xsd, и содержат методы для обработки событий, генерируемых во время изменения данных таблиц.
· В окне Class View поставьте фокус на класс StudsExams, нажмите правую кнопку мыши и выберите в контекстном меню команду Browse Definition. При этом откроется окно инструмента студии, называемого Object Browser. Вид его окна показан ниже.
При работе с Object Browser удобно пользоваться командой контекстного меню Go To Definition. С помощью этой команды убедитесь, что класс StudsExams содержит два свойства Studs и Exams, которые дают доступ к двум private-переменным tableStuds и tableExams.
Эти переменные являются ссылками на объекты классов StudsDataTable и ExamsDataTable, декларация которых вложена внутрь класса StudSet. Вы можете видеть это в левой панели Objects расщепленного окна Object Browser. Новый класс содержит ряд методов, которые позволяют выполнять важные операции с набором данных. Перечислим некоторые из них.
· Метод InitClass — выполняет ряд инициализирующих действий, главными из которых являются: создание двух таблиц и связывание их по ключевому полю StudIDColumn.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.