Реклама:

Аналогичным образом свяжем элемент управления textBox2 со столбцом Fakultet таблицы Kaf набора данных ndl.

Теперь во время выполнения приложения, в поле элемента управления textBoxl будет показываться содержимое столбца Nazv той записи таблицы Kaf, на которой установлен указатель в элементе управления dataGridl. А в textBox2 - содержимое столбца Fakultet той же записи. Что и требовалось (3.60).

рис. 3.59

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

рис. 3.60

Рассмотрим механизм связывания элементов управления формы Windows и источников данных.

В форме Windows для каждого объекта-источника данных (набор данных, таблица, просмотр и пр.) автоматически создается объект System.Windows.Forms.Cur-rencyManager. Он связывает посредством коллекции Bindings источник данных с одним или несколькими элементами управления в форме. Каждой связи источника данных и элемента управления формы соответствует один элемент в коллекции Bindings.

Все объекты CurrencyManager объединяются в форме Windows объектом System.Windows.Forms.BindingContext.

Обращение к объекту CurrencyManager происходит через индексаторы объекта

BindingContext:

public BindingManagerBase this[ object dataSource] {get;}

public BindingManagerBase this[ object dataSource, string dataMembre]

{get;}

Здесь dataSource - источник данных и dataMembre - раздел источника данных. Если в качестве источника указывается ссылка на набор данных, то разделом служит имя таблицы набора.

Возвращаемый объект System.Windows.Forms.BindingManagerBase, базовый для System.Windows.Forms.CurrencyManager, содержит свойство

public override int Position {get; set;}

чье значение - это индекс записи, текущей в настоящий момент в источнике данных. Эта строка крайне важна для синхронизации источника данных и связанных с ним элементов управления типа TextBox, Label и пр., служащих для представления единичного значения: в последних выводятся значения столбцов именно текущей записи источника данных.

Некоторые элементы управления, например DataGrid, ListBox и пр., изменяют значения свойства Position, когда пользователь в этих элементах управления переходит с одной записи на другую. Убедимся в этом на простом примере.

Создадим форму, где в элементе управления dataGrid1 будем показывать содержимое таблицы Kaf набора данных nd1 (рис. 3.61). Создадим под DataGrid элемент управления labPosition типа Label.

рис. 3.61

В обработчике события смены текущей ячейки в dataGridl будем брать значение свойства Position того объекта CurrencyManager, который связан с таблицей Kaf набора данных ndl. Затем значение свойства Position будем помещать в элемент управления labPosition типа Label.

int p = this.BindingContext[nd1, "Kaf"].Position; labPosition.Text = p.ToString();

Как видно из рис. 3.62, а и 3.62, б, значение позиции в соответствующем объекте CurrencyManager действительно изменяется, когда указатель текущей записи в объекте dataGridl переходит с одной записи на другую.

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

рис. 3.62

Что дает нам значение свойства Position?

Первое. Мы всегда программно можем определить ту запись, на которой пользователь установил указатель в элементе управления DataGrid. Не секрет, что DataGrid - самый востребуемый в клиентских приложениях элемент управления для взаимодействия с данными. Часто логика клиентского приложения строится таким образом, что пользователь выбирает в DataGrid некоторую запись и инициирует выполнение каких-либо действий по отношению к ней.


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