Программирование >>  Привязка данных 

1 [ 2 ] 3 4 5 ... 10


это длина, потому она и отображается. Список свойств каждого класса может быть получен с помощью метода GetProperties класса TypeDescriptor. Он возвращает коллекцию объектов PropertyDescriptor, которая затем может использоваться для отображения данных. Элемент управления .NET PropertyGrid применяет этот метод для отображения произвольных объектов.

Один из способов решения этой проблемы с отображением строк в DataGridView заключается в создании класса-оболочки:

protected class Item

public Item(string text)

text = text;

public string Text

get{return text;}

private string text;


Рис. 32.3. Вывод массива объектов класса Item

На рис. 32.3 показан вывод массива объектов класса Item (который может быть и структурой), служащего источником данных.

DataTable

DataTable можно отображать в элементе управления DataGridView двумя способами:

□ если используется DataTable сама по себе, следует просто установить свойство DataSource элемента управления на эту таблицу;

□ если DataTable входит в DataSet, необходимо установить DataSource на DataSet, а свойство DataMember - равным имени DataTable внутри этого DataSet.

На рис. 32.4 показан результат запуска кода примера DataSourceDataTable.

Обратите внимание на отображение последнего столбца - он показывает флажки вместо более привычных полей редактирования. Дело в том, что элемент управления DataGridView в отсутствие любой другой информации будет читать схему из источника данных (в данном случае - таблицы Products) и на основе типа столбца автоматически выбирать тип элемента управления, отображающего его. В отличие от DataGrid, DataGridView имеет встроенную поддержку столбцов с изображениями, кнопками и комбинированными списками.


Рис. 32.4. Результат запуска кода примера DataSourceDataTable



Данные в базе не изменяются, когда изменяются поля в визуальной таблице, поскольку ее данные хранятся локально на клиентском компьютере - нет никакого активного подключения к базе данных. Обновление данных в базе мы обсудим в этой главе позднее.

Отображение данных из DtaView

DataView предоставляет средства фильтрации и сортировки данных внутри DataTable. Когда данные выбираются из базы, обычно пользователю разрешено сортировать их, например, щелчком на заголовке того или иного столбца. В дополнение пользователь может пожелать отфильтровать данные, чтобы показать только определенные строки, например, те, что подверглись изменениям. DataView можно фильтровать так, что только выбранные строки будут показаны пользователю; однако это не ограничивает столбцы из DataTable.

DataView не позволяет фильтровать столбцы, а только строки.

Чтобы создать DataView на базе существующей DataTable, нужно использовать следующий код:

DataView dv = new DataView(dataTable);

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

□ установка AllowEdit = false отключает всю функциональность редактирования столбцов в строках;

□ установка AllowNew = false отключает функциональность новых строк;

□ установка AllowDelete = false отключает возможность удаления строк;

□ установка RowStateFilter отображает только строки с заданным состоянием;

□ установка RowFilter позволяет фильтровать строки на основе выражений.

В следующем разделе будет показано, как использовать настройки RowFilter и RowStateFilter; остальные настройки объяснений не требуют.

Фильтрация строк на основе данных

После того, как создан DataView, данные, отображенные в этом представлении, могут быть изменены установкой свойства RowFilter. Это свойство, задаваемое строкой, применяется в качестве средства фильтрации на базе критериев, определенных значением строки. Ее синтаксис подобен конструкции WHERE стандартного SQL, но относится к данным, уже полученным из базы.

В табл. 32.1 показаны некоторые примеры конструкций фильтрации.

Исполняющая система старается наилучшим образом подогнать типы данных в выражениях фильтра к соответствующим типам исходных столбцов. Например, вполне допустимо было в предыдущем примере написать UnitsInStock > 50 несмотря на то, что столбец имеет целочисленный тип. Если указывается неправильное выражение фильтра, это приводит к возбуждению исключения EvaluateException.



Таблица 32.1. Примеры конструкций фильтрации

Конструкция

Описание

UnitsInStock > 50

Client = Smith County LIKE C*

Показывает только те строки, в которых значение столбца UnitsInStock больше 50.

Возвращает записи для заданного клиента.

Возвращает все записи, в которых поле Country начинается с C - в данном примере будут возвращены строки со следующими значениями Country: Cornwall, Cumbria, Cheshire и Cambridgeshire. Символ % может использоваться как односимвольный шаблон, в то время как * - обобщенный шаблон, которому соответствует ноль или более символов.

Фильтрация на основе состояния строк

Каждая строка внутри DataView имеет определенное состояние, которое может принимать одно из значений, перечисленных в табл. 32.2. Это состояние также может использоваться для фильтрации строк, видимых пользователю.

Таблица 32.2. Допустимые состояния строк

DataViewRowState Added

CurrentRows Deleted

ModifiedCurrent

ModifiedOriginal

OriginalRows

Unchanged

Описание

Список всех вставленных строк.

Список всех строк за исключением удаленных.

Список всех исходных строк, которые были выделены и удалены; вновь созданные и тут же удаленные строки не отображаются.

Список всех измененных строк с их текущими значениями.

Список всех измененных строк в их исходном состоянии (до изменения).

Список всех строк, которые были изначально получены от источника данных. Не включает новые строки. Показывает исходные значения столбцов (то есть те, что были до внесения изменений).

Список всех строк, которые не были изменены.

На рис. 32.5 показана одна таблица, которая может содержать добавленные, удаленные или измененные строки, и вторая таблица, включающая строки с одним из перечисленных состояний.

Фильтр не только применяется к видимым строкам, но также и к столбцам внутри этих строк. Это наглядно демонстрирует выбор ModifiedOriginal или ModifiedCurrent. Доступные состояния описаны в главе 20 и основаны на перечислении DataRowVersion.

Например, когда пользователь обновляет столбец в строке, то эта строка будет отображена как при выборе ModifiedOriginal, так и при ModifiedCurrent; однако действительным значением будет либо исходное значение Original, полученное из базы данных (если выбрано ModifiedOriginal), либо текущее измененное значение DataColumn (в случае выбора ModifiedCurrent).

Сортировка строк

Помимо фильтрации, данные в DataView можно также сортировать. Сортировка выполняется по возрастанию или по убыванию - простым щелчком на заголовке столбца в элементе управления DataGridView (рис. 32.6).



1 [ 2 ] 3 4 5 ... 10

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.01
При копировании материалов приветствуются ссылки.
Яндекс.Метрика