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

1 2 [ 3 ] 4 5 6 ... 10



Рис. 32.5. Пример с двумя таблицами


Рис. 32.6. Сортировка с использованием элемента управления DataGridView

Единственная проблема состоит в том, что сортировать можно только по одному столбцу, в то время как лежащий в основе элемент управления DataView может сортировать по множеству столбцов. Когда столбец сортируется - либо щелчком на его заголовке (как показано, на столбце ProductName), либо программно - DataGrid показывает в его заголовке изображение стрелочки для пометки, по какому столбцу выполнена сортировка.

Программная установка порядка сортировки реализуется путем присвоения свойству Sort в DataView соответствующего значения:

dataView.Sort = ProductName ; dataView.Sort = ProductName ASC,

ProductID DESC ;

Первая строка сортирует данные по значению столбца ProductName, что можно видеть на рис. 32.6. Вторая строка сортирует данные в возрастающем порядке по ProductName и в убывающем - по ProductID.

DataView поддерживает сортировку и по возрастанию значений столбца, и по их убыванию. Если данные в DataView отсортированы по более чем одному столбцу, то DataViewGrid перестает показывать стрелочки-символы сортировки в заголовках.

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



Отображение данных из класса DataSet

Существует одно средство DataSet, которое отличает DataViewGrid от DataGrid - это когда DataSet определяет отношение между таблицами. Как в приведенных выше примерах с DataViewGrid, DataGrid может одновременно отображать только одну таблицу. Однако, как показано в следующем примере с DataSourceDataSet, можно выполнять навигацию по отношениям внутри DataSet в пределах одного экрана. Следующий код можно использовать для генерации такого DataSet на основе таблиц Customers и Orders базы данных Northwind. Этот пример загружает данные из этих двух DataTable и затем создает отношение между ними под названием CustomerOrders:

string orders = SELECT * FROM Orders ; string customers = SELECT * FROM Customers ;

SqlConnection conn = new SqlConnection(source); SqlDataAdapter da = new SqlDataAdapter(orders, conn); DataSet ds = new DataSet(); da.Fill(ds, Orders );

da = new SqlDataAdapter(customers , conn); da.Fill(ds, Customers ); ds.Relations.Add( CustomerOrders ,

ds.Tables[ Customers ].Columns[ CustomerID ],

ds.Tables[ Orders ].Columns[ CustomerID ]); Созданный DataSet связывается с DataGrid простым вызовом SetDataBinding() :

dataGrid1.SetDataBinding(ds, Customers ); Это даст вывод, показанный на рис. 32.7.

В отличие от других примеров DataGridView, приведенных с этой главе, здесь мы видим знак + слева от каждой записи. Это отражает тот факт, что DataSet имеет управляемое отношение между заказчиками и заказами. В коде можно определить любое количество таких отношений.

Когда пользователь щелкает на знаке +, отображается список отношений (или скрывается - если ранее он был отображен). Щелчок на имени отношения позволяет перейти к связанным записям (рис. 32.8); в данном примере - к списку заказов, размещенных выбранным заказчиком.


Рис. 32.7. Знаки + слева от каждой записи обозначают отношения между заказчиками и заказами




Рис. 32.8. Связанные записи, отображаемые в результате щелчка на имени отношения

Элемент управления DataGrid также включает пару новых пиктограмм в правом верхнем углу. Пиктограмма со стрелкой влево позволяет перейти к родительской записи и вернет экран к состоянию, показанному на предыдущей странице. Вторая пиктограмма служит для того, чтобы показать/скрыть детальную информацию о родительской записи в строке заголовка.

Отображение данных в DataViewManager

Отображение данных в DataViewManager - такое же, как для DataSet, показанное в предыдущем разделе. И потому для отображения только заказчиков из Великобритании (UK), содержащихся в таблице Customers, необходим следующий код:

DataViewManager dvm = new DataViewManager(ds); dvm.DataViewSettings[ Customers ].RowFilter = Country=UK ; dataGrid.SetDataBinding(dvm, Customers );

На рис. 32.9 показан вывод примера кода DataSourceDataViewManager.


Рис. 32.9. Вывод примера кода DataSourceDataViewManager

Интерфейсы IListSource и IList

DataGridView также поддерживает любые объекты, которые реализуют интерфейсы IListSource или IList. Интерфейс IListSource имеет только один метод - GetList(), который возвращает интерфейс IList. В свою очередь, IList пред-



1 2 [ 3 ] 4 5 6 ... 10

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