System.Type.GetType("System.String")); DataColumn Fakultet = new DataColumn("Fakultet",
System.Type.GetType("System.String"));
//---добавление столбцов в таблицу
Kaf.Columns.Add(KK);
Kaf.Columns.Add(Nazv);
Kaf.Columns.Add(Fakultet);
//---задание первичного ключа таблицы
Kaf.PrimaryKey = new DataColumn[] {KK};
//---создание таблицы Prep
DataTable Prep = new DataTable("Prep");
//---создание столбцов для Prep
DataColumn KKp = new DataColumn("KK", System.Type.GetType("System.Intl6")); DataColumn KP = new DataColumn("KP", System.Type.GetType("System.Intl6")); DataColumn FIO = new DataColumn("FIO", System.Type.GetType("System.String"));
//---добавление столбцов в таблицу Prep
Prep.Columns.Add(KKp);
Prep.Columns.Add(KP);
Prep.Columns.Add(FIO);
//---задание первичного ключа таблицы Prep
Prep.PrimaryKey = new DataColumn[]{KKp, KP};
//---создание нетипизированного набора данных
DataSet dataSetl = new DataSet();
//---добавление таблиц в набор данных
dataSetl.Tables.Add(Kaf); dataSetl.Tables.Add(Prep);
//---создание отношения между таблицами Kaf и Prep
DataRelation drl = new DataRelation("KafToPrep", dataSet1.Tables["Kaf"].Columns["KK"],
dataSet1.Tables["Prep"].Columns["KK"], true);
//---и добавление этого отношения в набор данных
dataSetl.Relations.Add(drl);
//---заливка данных в таблицу
aKaf.Fill(dataSet1, "Kaf"); aPrep.Fill(dataSet1, "Prep");
//---связывание dataGrid и таблиц
//---нетипизированного набора
dataGrid1.DataSource = dataSet1; dataGrid2.DataSource = dataSet1; dataGrid1.DataMember = "Kaf"; dataGrid2.DataMember = "Kaf.KafToPrep";
В форме приложения (рис. 3.56) видим, как элемент управления dataGrid2 показывает не все записи дочерней таблицы Prep, а только подчиненные текущей записи в родительской таблице Kaf.

рис. 3.56
3.4. Таблицы данных
Каждая таблица данных - это объект класса System.Data.DataTable. В таблице хранятся сведения о ее структуре и собственно данные.
3.4.1. Таблица данных: обзор
Имя таблицы возвращается ее свойством
public string TableName {get; set;}
Структура таблицы данных определяется:
• качественными и количественными характеристиками столбцов таблицы;
• ограничениями, накладываемыми на хранящиеся в таблице данные.
Ссылка на коллекцию столбцов таблицы данных возвращается ее свойством Columns. Каждый элемент этой коллекции - объект столбца - имеет тип
System.Data.DataColumn.
Ограничения, накладываемые на таблицу, могут быть двух типов:
• UniqueConstraint - содержит все столбцы, входящие в состав первичного ключа; также ограничение этого типа задается для каждого столбца таблицы, который должен содержать уникальные (неповторяющиеся) значения и который при этом не входит в состав первичного ключа;
• ForeignKeyConstraint - содержит все столбцы, входящие в состав внешнего ключа, который задается, только если таблица выступает в качестве дочерней в одном из отношений (объект DataRelation), явно созданных в наборе данных.