![]() |
|
Программирование >> Привязка данных
Рис. 32.16. Объект BindingContext включает коллекцию экземпляров BindingManagerBase Для конкретного источника данных CurrencyManager или PropertyManager создается лишь однажды. Если два текстовых поля привязаны к строке DataTable, в контексте привязки будет создан только один CurrencyManager. Каждый элемент управления, добавленный к форме, связывается с диспетчером привязки формы, так что все элементы управления разделяют один и тот же его экземпляр. Когда элемент управления создается, его свойство BindingContext равно null. Когда же он добавляется к коллекции Controls формы, его свойство BindingContext устанавливается равным BindingContext формы. Чтобы привязать элемент управления к форме, к его свойству BindingContext должен добавиться элемент, представляющий собой экземпляр ControlBindings Collection. Следующий код создает новую привязку: textBox.DataBindings.Add( Text , ds, Products.ProductName ); Внутри метод Add() объекта ControlBindingsCollection создает новый экземпляр объекта Binding на основании параметра, переданного методу, и добавляет его к коллекции привязок, представленной на рис. 32.17. Control DataBindingCollection
![]() Рис. 32.17. Добавление к Control объекта Binding На рис. 32.17 показано, что происходит, когда объект Binding добавляется к Control. Привязка устанавливает связь между элементом управления и источником данных, которая поддерживается внутри BindingContext формы (или самого элемента управления). Изменения внутри источника данных отображаются в элементе управления, как если бы они были выполнены в нем самом. Binding Этот класс связывает свойство элемента управления с членом источника данных. Когда член изменяется, свойство элемента управления обновляется, чтобы отобразить это изменение. Также верно противоположное - если обновляется текст в текстовом поле, это изменение отображается в источнике данных. Привязка может быть выполнена из любого столбца на любое свойство элемента управления. Например, вы можете привязать не только текст в текстовом поле, но также и его цвет. Можно привязать свойства элемента управления к совершенно различным источникам данных; например, цвет ячейки может быть задан в таблице цветов, тогда как данные - в другой таблице. CurrencyManager и PropertyManager Когда создается объект Binding, также создаются соответствующие объекты CurrencyManager и PropertyManager, предоставляя возможность первоначальной привязки данных источника. Назначение этого класса - определять позицию текущей записи внутри источника данных, а также координировать все первоначальные привязки при изменении текущей записи. На рис. 32.18 показаны два поля из таблицы Products, а также способ перемещения между записями с помощью элемента управления TrackBar. ![]() Рис. 32.18. Поля из таблицы Products и способ перемещения между записями Ниже представлен основной код ScrollingDataBinding. namespace ScrollingDataBinding { partial class Form1: Form public Form1() InitializeComponent(); private DataSet CreateDataSet() string customers = SELECT * FROM Products ; DataSet ds = new DataSet(); using (SqlConnection con = new SqlConnection ( ConfigurationSettings. ConnectionStrings[ northwind ].ConnectionString)) SqlDataAdapter da = new SqlDataAdapter(customers, con); da.Fill(ds, Products ); return ds; private void trackBar Scroll(object sender, EventArgs e) this.BindingContext[ds, Products ].Position = trackBar.Value; private void retrieveButton Click(object sender, EventArgs e) retrieveButton.Enabled = false; ds = CreateDataSet(); textName.DataBindings.Add( Text , ds, Products.ProductName ); textQuan.DataBindings.Add( Text , ds, Products.QuantityPerUnit ); trackBar.Minimum = 0; trackBar.Maximum = this.BindingContext[ds, Products ].Count - 1; textName.Enabled = true; textQuan.Enabled = true; trackBar.Enabled = true; private DataSet ds; Механизм прокрутки обеспечивается обработчиком событий trackBar Scroll, который устанавливает позицию BindingContext на текущую позицию бегунка - изменение контекста привязки здесь обновляет данные, отображаемые на экране. Данные привязаны к двум текстовым полям в обработчике событий retrieveButton Click добавлением выражения привязки данных - здесь свойства Text элементов управления устанавливаются в значения полей источника данных. Можно привязать любое простое свойство элемента управления к элементу источника данных; например, вы можете привязать цвет текста, свойство доступности или любые другие. Когда данные первоначально извлекаются, значение максимума бегунка прокрутки устанавливается равной количеству записей. Затем в методе прокрутки позиция BindingContext для DataTable устанавливается в текущую позицию бегунка. Это изменяет текущую запись DataTable, так что обновляются все элементы управления, привязанные к текущей записи (в данном примере - два текстовых поля). Теперь, когда мы узнали, как привязать различные источники данных, такие как массивы, таблицы данных, представления данных, а также прочие разнообразные контейнеры данных, в следующем разделе рассмотрим, как расширения Visual Studio обеспечивают интеграцию доступа к данным в приложениях. Visual Studio .NET и доступ к данным В этом разделе мы опишем некоторые способы интеграции данных с графическим интерфейсом пользователя, которые обеспечивает Visual Studio, включая способы создания соединений, выбора некоторых данных, генерации DataSet, а также применение всех сгенерированных объектов для построения простого приложения. Доступные инструментальные средства позволяют создать подключение к базе данных с помощью классов OleDbConnection или SqlConnection. Выбор класса зависит от типа используемой базы данных. После того, как соединение определено, можно создать DataSet и наполнить его прямо внутри Visual Studio .NET. При этом генерируется файл XSD для DataSet, а также код .cs. В результате получается DataSet, безопасный к типам. Создание соединения Для начала создадим новое Windows-приложение, затем - новое соединение с базой данных. Используя проводник серверов Server Explorer (рис. 32.19), можно управлять различными аспектами доступа к данным.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |