Главная » Файлы » Учебники » C# [ Добавить материал ]

Привязка данных (таблицы в Windows forms C#), виджет DataGridView

[Скачать с сервера (1.62Mb) - бесплатно] 24.04.2010, 16:53
Данный материал является приложением к книге "С# 2008 и платформа .NET 3.5 для профессионалов" (Кристиан Нейгел) , и найден в свободных источниках.


Эта глава основана на материалах главы 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. К тому же он предлагает более широкие возможности, о которых мы и поговорим в этой главе.


Отображение табличных данных:

Следующий пример демонстрирует, как извлечь данные и отобразить их в элементе управления DataGridView. Для этой цели мы создадим новое приложение DisplayTabularData, внешний вид которого показан на следующем рисунке:


dataGridView C# виджет


Это простое приложение выбирает каждую запись из таблицы Customer базы данных Northwind и отображает эти записи пользователю в элементе управления DataGridView. Ниже показан код этого примера (исключая код определения формы и элемента управления).



Code
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 из предыдущего примера. Проблема с этим кодом проявляется в отображении данных:

Таблицы в c#

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

Первое (и единственное) общедоступное свойство строки — это длина, потому она и отображается.

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

Элемент управления .NET PropertyGrid применяет этот метод для отображения произвольных объектов. Один из способов решения этой проблемы с отображением строк в DataGridView заключается в создании класса-оболочки:

(И т.д. - продолжение в самой методичке, качайте)

Добавил: COBA (24.04.2010) | Категория: C#
Просмотров: 20651 | Загрузок: 1597 | Рейтинг: 4.8/6 |
Комментарии (1)
0   Спам
1. Сергій   18.05.2011   14:59
Щось ніякого роз'яснення роботи із таблицями я не побачив... Автор можливо і розібрався для себе, але викласти матеріал не зміг =)

Дерзай =)


Имя *:
Email *:
Код *: