Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Введение в специальность.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
4.29 Mб
Скачать

Модификация и обновление данных

Содержимым объекта DataSet можно манипулировать, в частности редактировать

его на клиентской машине. Разрешается модифицировать значения существующих

объектов DataRow, а также удалять и добавлять к DataSet новые объекты DataRow.

Однако модификации не будут реплицированы в БД, пока вы не обновите се с по-

мощью объекта DataAdapter.

Каждый экземпляр DataSet поддерживает две версии этого объекта: текущую,

расположенную на клиентском компьютере и содержащую все модификации, и

исходную, не менявшуюся со времени заполнения DataSet. При вызове метода

Update объекта DataAdapter на основе исходных значений генерируются команды

UPDATE, INSERT и DELETE, необходимые для обновления БД.

Модификация данных

Есть два способа модификации объекта DataSet: через пользовательский интерфейс

• при помощи элементов управления, связанных с данными, и программными

средствами. Изменения, внесенные через связанные с данными элементы управления, автоматически вносятся в соответствующую строку.

• Также поддерживается программное добавление данных к объекту Data Row пу-

тем установки свойства Item объекта DataRow, представляющего значения полей

строки. Вот как это делается:

// Создаем объект таблицы

DataTable emptable=new DataTable(“Employees");

// Добавляем в таблицу столбцы EmpID, FirstName и LastName.

DataColumn colFName = new DataColumn();

colFName.DataType = Type.GetType("System.String");

colFName.Caption = "First Name“;

colFName.ColumnName = "FirstName“;

….

// Создаем строку для сотрудника

DataRow row = empTable.NewRow();

row["EmpIO"] = 102;

row["FirstName"] = "Joe";

row["LastName"] = "Blow“

// Добавляем ее во внутреннюю коллекцию строк в таблице - DataRowCollection

empTable.Rows.Add(row):

Связывание, просмотр и фильтрация данных

Возможность просмотра данных жизненно важна для многих приложений. Связывание данных позволяет ассоциировать записи источника данных с элементами управления формы для просмотра и модификации этих данных.

Связыванием данных называется создание связи между двумя объектами — провайдером и потребителем данных. Провайдер — это источник данных, связанный с объектом-потребителем данных, который получает данные, после чего обрабатывает либо отображает их. Типичный пример связывания данных — элемент управления TextBox, связанный с источником данных. Он отображает значение некоторого поля в текущей строке источника данных, к которому привязан. При модификации этого поля отображаемое элементом управления значение также изменится.

Провайдер данных участвует в связывании, предоставляя значения для связанных с

ним свойств и элементов управления. В .N ЕТ Framework провайдерами данных могут быть не только объекты ADO.NET, такие, как DataSet, DataTable и DataColumn, но и другие, например массивы и наборы.

Другая функция провайдеров — управление потоком данных. В прежних технологиях доступа к данным для управления потоком данных применялись курсоры. При перемещении курсора на другую запись выполнялось обновление связанных элементов управления. Поскольку ADO.NET основана на доступе к отсоединенным данным, концепция курсора в ней отсутствует как таковая. Теперь с каждым источником данных связан объект Currency Manager, который следит за положением текущей записи. Управление объектами Currency Manager осуществляется с помощью объекта BindingContexl формы.

Потребитель данных — это элемент управления, свойства которого привязаны к источнику данных. В .NET Framework с источником данных можно связать любое доступное в период выполнения свойство любого элемента управления. Например, свойство Size — с записью БД, каталогом или другим свойством элемента управления, доступным в период выполнения.

Связывание данных применяется очень широко. Типичный пример использования связывания данных — формы для ввода данных, содержащие элементы управления (TextBox, Checkbox, LisiBoxtt т.д.), связанные с соответствующими полями объекта DataSet. Новые записи можно ввести вручную через соответствующие элементы управления формы. Готовая запись добавляется к объекту DataSet, который используется для обновления БД.

Выделяют два вида связывания данных — простое и сложное. В простом задействовано только одно поле источника данных, последовательно предоставляющее значения связанному с ним компоненту. Например, элемент управления Label можно связать с полем объекта DataTable, чтобы он отображал текущее значение поля, с которым связан. Сложное связывание позволяет связать несколько записей с одним элементом управления. Так, элементы управления ListBox и ComboBox можно связать с полем объекта DataTable или Data View они будут отображать во время выполнения все значения этого поля, а не только текущее. Обычно сложное связывание применяют для создания элементов управления, отображающих набор значений и позволяющих выбрать определенные строки данных. Такие элементы управления, как DataGrid, поддерживают еще более сложный вид связывания: их можно связать со всеми значениями объекта DataTable или даже DataSet.

Свойство DataBindings позволяет создать элементы управления, применяющие простое связывание данных. Это свойство является экземпляром класса Control BindingsCollection, который следит за связыванием элементов управления с источником данных и управляет им. В период разработки свойство DataBindings отображается и окне Properties в виде отдельного узла. Раскрыв его, вы получите доступ к списку свойств, которые чаще всего связывают с данными.

Чтобы связать такое свойство с источником данных, щелкните поле рядом с именем свойства — откроется список доступных провайдеров данных, где объекты DataSet отображаются в виде узлов. Раскрыв такой узел, вы получите список доступных объектов DataTable, там же перечислены объекты DataView. А раскрыв узел объекта DataView список полей источника данных. Найдите в нем нужный столбец и выберите его — вы создадите связь между выбранным полем и данным свойством элемента управления.

Часто в период выполнения требуется модифицировать источник данных, с которым связан некоторый элемент управления. Также возможна ситуация, когда источник данных, с которым будет связан элемент управления, не известен в период разработки. Наконец, иногда необходимо связать элемент управления с массивом или набором, экземпляр которого разрешается создавать только в период выполнения. В этих случаях следует выполнять связывание данных программными средствами. Для этого воспользуйтесь свойством DataBindings элемента управления, которое является экземпляром класса Control Bindings Collection, Установив соответствуюший член набора DataBindings, вы сможете добавить, удалить или сбросить сведения о связанном источнике данных в период выполнения. Для связывания свойств с источником данных служит метод DataBindings.Add. При вызове этого метода создается связь с источником данных и добавляется к набору DataBindings, Метод Add принимает три параметра: имя свойства (типа String), которое нужно связать с данными, источник данных (объект) и имя члена объекта источника данных, с которым связывают это свойство. Следующий пример демонстрирует связывание свойства Text элемента управления TextBox с полем CustomerID таблицы Customers, хранимой в объекте DataSet с именем DataSetl:

TextBoxl.DataBindings.Add("Text", DataSetl.Customers, "CustomerID");

Чтобы удалить связь с источником данных из элемента управления, вызовите метод DataBindings, Remove. Этот метод принимает в качестве параметра объект Binding, который получают из свойства DataBindings. Следующий пример показывает, как удалить сведения об источнике данных, связанном со свойством Text объекта Label:

Label.DataBindings.Remove( Label.DataBindings[ "Text" ]);

Управление просмотром записей и обновлением элементов управления, связанных

с данными, осуществляется на уровне источника данных при помощи объекта

Currency Manager.

Объект Currency Manager «следит» за положением текущей записи в источнике данных. Приложение может использовать несколько источников данных одновременно, при этом каждый из них поддерживает собственный объект Currency Manager.Поскольку форма способна отображать содержимое нескольких источников данных одновременно, любая форма управляет связанными с ними объектами CurrencyManager посредством главного объекта — BindingContext. Этот объект упорядочивает объекты Currency Manager, связанные со всеми источниками данных, и предоставляет к ним доступ. Так, свойство BindingContext формы позволяет управлять положением текущей записи в любом источнике данных. Чтобы получить доступ к объекту Currency Manager для некоторого источника данных, вызовите свойство BindingContext, передав ссылку на объект этого источника данных, например:

this.BindingContext[DataSet1.Customers]

Для перемещения между записями устанавливают свойство Position соответствующего объекта BindingContext, как показано ниже:

// Сделать пятую запись источника данных текущей,

this. BindingContext[DataSet1.Customers].Position = 4;

Ряд элементов управления, таких, как ListBox, СотbоВох или DataGrid, разрешается

связать с несколькими записями одновременно, Такое связывание называется сложным, а элементы управления, использующие сложное связывание, обычно применяют для отображения нескольких доступных для выбора записей. Чтобы создать элемент управления, использующий сложное связывание, установите свойство DataSource элемента управления, поддерживающего такой тип связывания:

DataGrid1.DataSource = DataSet1.Customers;

В период разработки это можно сделать, установив значение свойства DataSource

в окне Properties.

Такие элементы управления, как ListBox, Checked List Box и ComboBox, способны отображать несколько записей одновременно, их можно привязать не более чем к одному полю. Для этих элементов управления необходимо записать в свойство Display Member значение типа String, представляющее имя поля, с которым нужно связать это свойство, например:

ComboBox1.DataSource = DataSet1.Customers;

ComboBoxl.DisplayMember = "CustomerID";

После заполнения объекта DataSet обычно работают с подмножеством его данных, загруженных в память; такое подмножество выделяют при помощи объекта DataView. Можно сказать, что этот объект выступает в роли фильтра для объекта DataTable, выбирающего из объекта DataTable некоторые данные и предоставляющего их элементам управления, связанным с этим объектом DataTable. Объект DaiaView поддерживает методы для сортировки и фильтрации данных, а также позволяет обновлять представляемый им объект DataTable.

Чтобы создать объект DataView, необходимо передать ссылку на объект DataTable,

для которого он будет выполнять фильтрацию содержимого, например:

DataView myDataView = new DataView(myDataTable);

Показанный код создает объект DataView, представляющий данные объекта myDataTable. Чтобы задать критерии фильтрации и/или упорядочения данных, следует установить соответствующие свойства объекта DataView.

Создать объект DataView и связать его с элементами управления допустимо и в период разработки. Для этого перетащите объект DataView с вкладки Data панели Toolbox в окно дизайнера и установите значение его свойства Table через окно Properties. Далее, чтобы связать созданный объект DataView, достаточно установить свойство DataBindings (также через окно Properties).

Объекты DataView позволяют выполнять фильтрацию и сортировку данных, которые они представляют, при этом критерии фильтрации и сортировки разрешается изменять в период выполнения. При изменении критериев фильтрации или упорядочения объекта DataView обновляются все связанные с ним элементы управления.

Чтобы упорядочить данные, установите свойство Sort, записав в него строку, интерпретируемую как определение правил сортировки данных. Зачастую такая строка содержит имя поля, по которому выполняется сортировка. Вот пример:

myDataView.Sort = "CustomerlD";

Чтобы задать критерий фильтрации данных, запишите в свойство RowFiller строку, интерпретируемую как выражение, которое определяет подмножество записей.

Например, можно выбрать только строки с заданным значением в некотором поле:

rnyDataView.RowFilter = "City = 'Seattle'";