Реклама:

Чтобы получить ссылку на этот просмотр, нужно сначала получить ссылку на текущую запись этого просмотра (объект DataRowView):

DataRowView drw = (DataRowView)this.BindingContext[ИмяНД,

ИмяДочернегоDataGrid.DataMember].Current;

и затем от нее перейти к самому просмотру:

DataView dw = drw.DataView;

Свойство Count полученного просмотра возвращает число содержащихся в просмотре записей. Индексатор просмотра позволяет обратиться к различным записям просмотра. Если нужно напрямую обратиться к той записи данных (объект DataRow), с которой ассоциирована конкретная строка просмотра (объект DataRowView), можно использовать свойство Row последней.

Пример. Пусть в наборе данных ndl имеем две таблицы - родительскую (Kaf) и дочернюю (Prep) и между ними задана связь с именем "Преподавате-ли_Кафедры" (рис. 8.23).

Шумаков П. В.  ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio .NET. Руководство разработчика с примерами на C#.

рис 8.23

Представим в форме содержимое таблиц таким образом, чтобы размещенный в нижней части формы элемент управления ааЬаОг1асЫ1а предоставлял доступ только к дочерним записям, подчиненным текущей записи в родительской таблице Ка£ (рис. 8.24).

Шумаков П. В.  ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio .NET. Руководство разработчика с примерами на C#.

рис. 8.24

Во всех записях таблицы Prep, доступных в элементе управления dataGrid Child, изменим содержимое столбца FIO, приведя старое значение этого столбца к верхнему регистру. Используем для этого неявный просмотр, ассоциированный с dataGridChild:

//---текущая запись просмотра, содержащего дочерние записи

DataRowView drw = (DataRowView)this.BindingContext[nd1, dataGridChild.DataMember].Current;

//---просмотр, содержащий дочерние записи

DataView dw = drw.DataView;

//---изменяем записи просмотра

for (int i = 0; i < drw.DataView.Count; {

dw[i]["FIO"] = dw[i]["FIO"].ToString().ToUpper();

}

Результат показан на рис. 8.25.

Шумаков П. В.  ADO.NET и создание приложений баз данных в среде Microsoft Visual Studio .NET. Руководство разработчика с примерами на C#.

рис. 8.25

8.2.3. DataGrid и записи дочерних таблиц

Когда записи дочерней таблицы представляются в элементе управления DataGrid, то доступ к записям возможен не только в "ручном" режиме, но и в программном.

Доступ к данным и их изменение можно выполнять не ссылаясь при этом ни на какие таблицы, записи и просмотры данных. Вполне достаточно использовать ячейки DataGrid, т. е. объекты DataGridCell. Все изменения, вносимые в значения, хранящиеся в ячейках DataGridCell, автоматически отражаются в связанных с ними столбцах данных и немедленно переводят соответствующие строки данных в состояние, отличное от Unchanged.

Для обращения к ячейкам элемента управления DataGrid используют его индексатор:

public object this[ DataGridCell cell ] {get; set;}

public object this[ int rowIndex, int collndex ] {get; set;}

указывая в качестве индексов либо номер строки и столбца, либо ссылку на какую-либо ячейку DataGrid. В качестве последней может, например, выступать текущая ячейку DataGrid, ссылка на которую возвращается свойством CurrentCell названного объекта.

Пример. Стартовые условия такие же, как в предыдущем примере. Пусть в наборе данных nd1 имеем две таблицы - родительскую (Kaf) и дочернюю (Prep) и между ними задана связь с именем "Преподаватели_Кафедры".

В форме содержимое таблиц представлено таким образом, чтобы размещенный в нижней части формы элемент управления dataGridChild содержал только записи таблицы Prep, подчиненные текущей записи в таблице Kaf.


⇐ Предыдущая страница| |Следующая страница ⇒