|
Программирование >> Привязка данных
Привязка данных Эта глава основана на материалах главы 26, в которой описаны различные способы извлечения и изменения данных, и посвящена представлению данных для пользователей с привязкой данных к различным элементам управления Windows. Точнее говоря, здесь будут обсуждаться следующие вопросы: □ отображение данных с помощью элемента управления DataGridView; □ возможности привязки данных .NET и как они работают; □ как использовать проводник по серверу Server Explorer для создания соединения и генерации класса DataSet (не написав ни единой строки кода); □ как использовать проверку попаданий и рефлексию строк DataGrid. Коды примеров этой главы доступны на прилагаемом компакт-диске. Элемент управления DataGridView Элемент управления DataGrid, доступный начиная с ранних выпусков .NET, был вполне функциональным, но имел множество недоработок, которые делали его неподходящим для применения в коммерческих приложениях, например, отсутствовала возможность вывода графических изображений и раскрывающихся элементов, блокировка столбцов и тому подобное. Этот элемент управления был не вполне полноценным, поэтому многие независимые поставщики предлагали собственные сеточные компоненты, которые компенсировали эти недостатки и представляли гораздо более широкую функциональность. В .NET 2.0 появился дополнительный сеточный элемент управления - DataGridView. Он восполнил многие недостатки своего предшественника и добавил важную функциональность, которая до этого была реализована лишь в продуктах независимых поставщиков. Этот элемент оснащен такими же средствами привязки данных, как и старый DataGrid, а потому может работать совместно с классами Array, DataTable, DataView или DataSet либо компонентами, реализующими интерфейс IListSource или IList. Элемент управления DataGridView обеспечивает возможности разнообразного представления одних и тех же данных. В простейшем случае отображаемые данные (такие как из DataSet) указываются установкой значений свойств DataSource и DataMember. Отметим, что этот элемент управления не может подставляться вместо DataGrid, потому что его программный интерфейс полностью отличается от интерфейса DataGrid. К тому же он предлагает более широкие возможности, о которых мы и поговорим в этой главе. Отображение табличных данных В главе 19 было представлено множество способов выбора данных и чтения их в таблицы, хотя отображались они очень примитивным способом - с использованием Console.WriteLine(). Следующий пример демонстрирует, как извлечь данные и отобразить их в элементе управления DataGridView. Для этой цели мы создадим новое приложение DisplayTabularData, внешний вид которого показан на рис. 32.1. Рис. 32.1. Внешний вид приложения DisplayTabularData Это простое приложение выбирает каждую запись из таблицы Customer базы данных Northwind и отображает эти записи пользователю в элементе управления DataGridView. Ниже показан код этого примера (исключая код определения формы и элемента управления). using System; using System.Configuration; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Windows.Forms; namespace DisplayTabularData partial class Form1: Form public Form1() InitializeComponent(); private void getData Click(object sender, EventArgs e) string customers = SELECT * FROM Customers ; using (SqlConnection con = new SqlConnection (ConfigurationManager. ConnectionStrings[ northwind ].ConnectionString)) DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(customers, con); da.Fill(ds, Customers ); dataGridView.AutoGenerateColumns = true; dataGridView.DataSource = ds; dataGridView.DataMember = Customers ; Форма состоит из кнопки getData, в результате щелчка на которой вызывается метод getData Click(), показанный в коде примера. При этом конструируется объект SqlConnection, использующий свойство ConnectionStrings класса ConfigurationManager. Далее создается набор данных и заполняется на основе таблицы базы данных с помощью объекта DataAdapter. Затем эти данные отображаются элементом управления DataGridView за счет установки свойств DataSource и DataMember. Отметим, что свойству AutoGenerateColumns также присваивается значение true, поскольку это гарантирует, что пользователь что-то увидит. Если этот флаг не установлен, все столбцы придется создавать самостоятельно. Источники данных Элемент управления DataGridView предлагает гибкий способ отображения данных; в дополнение к установке DataSource равным DataSet, а DataMember - равным имени отображаемой таблицы, свойство DataSource может указывать на любой из следующих источников: □ массив (визуальная таблица может быть связана с любым одномерным массивом); □ DataTable; □ DataView; □ DataSet или DataViewManager; □ компоненты, реализующие интерфейс IListSource; □ компоненты, реализующие интерфейс IList; □ любой обобщенный класс коллекции или объект, унаследованный от обобщенного класса коллекции. В последующих разделах будут представлены примеры применения каждого из упомянутых источников данных. Отображение данных из массива На первый взгляд это кажется простым. Нужно создать массив, наполнить его некоторыми данными и установить свойство DataSource элемента управления DataGridView. Вот пример кода: string[] stuff=new string[] { One , Two , Three }; dataGridView.DataSource = stuff; Если источник данных включает множество возможных таблиц-кандидатов (как в случае с DataSet или DataViewManager), также понадобится установить свойство DataMember. Можно заменить этим кодом код события getData Click из предыдущего примера. Проблема с этим кодом проявляется в отображении данных (рис. 32.2). Вместо отображения строк, определенных в массиве, таблица показывает длины этих строк. Причина состоит в том, что когда массив используется в качестве источника данных для DataGridView, то он ищет первое общедоступное свойство объекта, содержащегося в массиве, вместо строкового значения. Первое (и единственное) общедоступное свойство строки - Рис. 32.2. Проблема, связанная с примером кода
Научись программировать - курсы питон от профессионалов. |
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |