Практическое руководство. Добавление таблиц и столбцов в элемент управления DataGrid в Windows Forms
Элемент управления DataGridView заменяет элемент управления DataGrid и расширяет его функциональные возможности; однако при необходимости элемент управления DataGrid можно сохранить для обратной совместимости и использования в будущем. Дополнительные сведения см. в разделе Различия элементов управления DataGridView и DataGrid в Windows Forms.
Данные в элементе управления DataGrid в Windows Forms можно отобразить в таблицах и столбцах, создав объекты DataGridTableStyle и добавив их в объект GridTableStylesCollection, к которому осуществляется доступ через свойство TableStyles элемента управления DataGrid. Каждый стиль таблицы управляет отображением содержимого любой таблицы данных, указанной в свойстве MappingName объекта DataGridTableStyle. По умолчанию стиль таблицы без указания стилей столбцов будет отображать все столбцы в этой таблице данных. Столбцы из таблицы можно ограничить, добавив объекты DataGridColumnStyle в объект GridColumnStylesCollection, к которому осуществляется доступ через свойство GridColumnStyles каждого объекта DataGridTableStyle.
Добавление таблицы и столбца в DataGrid программным способом
- Чтобы отобразить данные в таблице, необходимо сначала привязать элемент управления DataGrid к набору данных. Дополнительные сведения см. в статье Практическое руководство. Привязка элемента управления DataGrid в Windows Forms к источнику данных.
Внимание При программном указании стилей столбцов всегда создавайте объекты DataGridColumnStyle и добавляйте их в объект GridColumnStylesCollection перед добавлением объектов DataGridTableStyle в объект GridTableStylesCollection. При добавлении пустого объекта DataGridTableStyle в коллекцию объекты DataGridColumnStyle создаются автоматически. Следовательно, при попытке добавить в объект GridColumnStylesCollection новые объекты DataGridColumnStyle с повторяющимися значениями MappingName будет создано исключение.
Dim ts1 As New DataGridTableStyle() ts1.MappingName = "Customers"
DataGridTableStyle ts1 = new DataGridTableStyle(); ts1.MappingName = "Customers";
DataGridTableStyle* ts1 = new DataGridTableStyle(); ts1->MappingName = S"Customers";
Dim myDataCol As New DataGridBoolColumn() myDataCol.HeaderText = "My New Column" myDataCol.MappingName = "Current"
DataGridBoolColumn myDataCol = new DataGridBoolColumn(); myDataCol.HeaderText = "My New Column"; myDataCol.MappingName = "Current";
DataGridBoolColumn^ myDataCol = gcnew DataGridBoolColumn(); myDataCol->HeaderText = "My New Column"; myDataCol->MappingName = "Current";
ts1.GridColumnStyles.Add(myDataCol)
ts1.GridColumnStyles.Add(myDataCol);
ts1->GridColumnStyles->Add(myDataCol);
DataGrid1.TableStyles.Add(ts1)
dataGrid1.TableStyles.Add(ts1);
dataGrid1->TableStyles->Add(ts1);
См. также
- Элемент управления DataGrid
- Практическое руководство. Удаление или скрытие столбцов элемента управления DataGridView в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Практическое руководство. Изменение данных, отображаемых во время выполнения, в элементе управления DataGrid в Windows Forms
Элемент управления DataGridView заменяет элемент управления DataGrid и расширяет его функциональные возможности; однако при необходимости элемент управления DataGrid можно сохранить для обратной совместимости и использования в будущем. Дополнительные сведения см. в разделе Различия элементов управления DataGridView и DataGrid в Windows Forms.
После создания элемента управления Windows Forms DataGrid с помощью функций времени разработки может также потребоваться динамическое изменение элементов объекта DataSet сетки во время выполнения. Это может быть изменение либо отдельных значений таблицы, либо изменение источника данных, привязанного к элементу управления DataGrid. Изменение отдельных значений выполняется через объект DataSet, а не в элементе управления DataGrid.
Программное изменение данных
- Укажите нужную таблицу из объекта DataSet и нужные строку и поле из таблицы, а затем присвойте ячейке новое значение.
Примечание. Чтобы указать первую таблицу DataSet или первую строку таблицы, используйте значение 0.
В следующем примере показано, как изменить вторую запись первой строки первой таблицы набора данных, нажав кнопку Button1 . DataSet ( ds ) и таблицы ( 0 и 1 ) были созданы ранее.
Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ds.tables(0).rows(0)(1) = "NewEntry" End Sub
private void button1_Click(object sender, System.EventArgs e)
private: void button1_Click(System::Object^ sender, System::EventArgs^ e) < dataSet1->Tables[0]->Rows[0][1] = "NewEntry"; >
(Visual C#, Visual C++) Поместите следующий код в конструктор формы для регистрации обработчика событий.
this.button1.Click += new System.EventHandler(this.button1_Click);
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
Изменение источника данных программным способом
- Передайте методу SetDataBinding имя источника данных и таблицу, к которой необходимо выполнить привязку. В следующем примере показано, как с помощью метода SetDataBinding изменить источник данных на элемент управления данными ADO.NET (adoPubsAuthors), подключенный к таблице Authors в базе данных Pubs.
Private Sub ResetSource() DataGrid1.SetDataBinding(adoPubsAuthors, "Authors") End Sub
private void ResetSource()
private: void ResetSource() < dataGrid1->SetDataBinding(adoPubsAuthors, "Authors"); >
См. также
- DataSets в ADO.NET
- Практическое руководство. Удаление или скрытие столбцов элемента управления DataGridView в Windows Forms
- Практическое руководство. Добавление таблиц и столбцов в элемент управления DataGrid в Windows Forms
- Практическое руководство. Привязка элемента управления DataGrid в Windows Forms к источнику данных
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Общие сведения об элементе управления DataGrid (Windows Forms)
Элемент управления DataGridView заменяет элемент управления DataGrid и расширяет его функциональные возможности; однако при необходимости элемент управления DataGrid можно сохранить для обратной совместимости и использования в будущем. Дополнительные сведения см. в разделе Различия элементов управления DataGridView и DataGrid в Windows Forms.
Элемент управления DataGrid в Windows Forms отображает данные в виде ряда строк и столбцов. В самом простом случае сетка привязана к источнику данных с помощью единственной таблицы, не содержащей связей. В этом случае данные отображаются в виде простых строк и столбцов, как в электронной таблице. Дополнительные сведения о привязке данных к другим элементам управления см. в разделе Привязка данных и Windows Forms.
Если элемент DataGrid привязан к данным с помощью нескольких связанных таблиц и в сетке включена навигация, в каждой строке сетки будут отображаться расширители. С помощью расширителя пользователь может переходить из родительской таблицы в дочернюю. При щелчке узла отображается дочерняя таблица, а при нажатии кнопки «Назад» — исходная родительская таблица. Таким образом в сетке отображаются иерархические связи между таблицами.
На приведенном ниже снимке экрана показан элемент управления DataGrid, привязанный к данным с помощью нескольких таблиц.
Элемент управления DataGrid может предоставлять пользовательский интерфейс для набора данных, навигацию между связанными таблицами и широкие возможности форматирования и редактирования.
Отображение и обработка данных — это разные функции: элемент управления обрабатывает пользовательский интерфейс, тогда как обновление данных обрабатывается архитектурой привязки данных Windows Forms и поставщиками данных .NET Framework. Таким образом обеспечивается синхронизация элементов управления, привязанных к одному источнику данных.
Если вы знакомы с элементом управления DataGrid в Visual Basic 6.0, вы можете обратить внимание на значительные отличия элемента управления DataGrid в Windows Forms.
Если сетка привязана к DataSet, столбцы и строки автоматически создаются, форматируются и заполняются. Дополнительные сведения см. в разделе Data Binding and Windows Forms. После создания элемента управления DataGrid можно добавлять, удалять, изменять порядок и форматировать столбцы и строки в зависимости от потребностей.
Привязка данных к элементу управления
Для работы элемента управления DataGrid он должен быть привязан к источнику данных с помощью свойств DataSource и DataMember во время разработки или метода SetDataBinding во время выполнения. Эта привязка указывает DataGrid на созданный экземпляр объекта источника данных, например DataSet или DataTable. Элемент управления DataGrid отображает результаты действий, выполняемых с данными. Большинство операций с данными выполняются не через DataGrid, а через источник данных.
Если данные в привязанном наборе данных обновляются посредством какого-либо механизма, элемент управления DataGrid отражает изменения. Если свойству ReadOnly сетки данных и стилей таблиц и столбцов присвоено значение false , данные в наборе данных можно обновлять с помощью элемента управления DataGrid.
В элементе управления DataGrid на определенный момент времени может отображаться только одна таблица. Если между таблицами определено отношение «родительская-дочерняя», пользователь может перемещаться между связанными таблицами для выбора таблицы, которая будет отображаться в элементе управления DataGrid. Сведения о привязке элемента управления DataGrid к источнику данных ADO.NET во время разработки или во время выполнения см. в статье Практическое руководство. Привязка элемента управления DataGrid в Windows Forms к источнику данных.
Источники данных, допустимые для DataGrid, включают следующие:
- Класс DataTable
- Класс DataView
- Класс DataSet
- Класс DataViewManager
Если источником является набор данных, он может быть объектом в форме или объектом, переданным в форму веб-службой XML. Привязку можно выполнять к типизированным или нетипизированным наборам данных.
Кроме того, элемент управления DataGrid можно привязать к дополнительным структурам, если объекты в структуре (например, элементы в массиве) предоставляют открытые свойства. В сетке будут отображаться все открытые свойства элементов в структуре. Например, если выполняется привязка элемента управления DataGrid к массиву объектов клиента, все открытые свойства этих объектов отобразятся в сетке. Иногда это означает, что хотя вы можете выполнить привязку к структуре, полученная связанная структура не всегда будет иметь практическое применение. Например, можно выполнить привязку к массиву целых чисел, но поскольку тип данных Integer не поддерживает открытое свойство, данные в сетке отображаться не будут.
Можно выполнить привязку к следующим структурам, если их элементы предоставляют открытые свойства:
- к любым компонентам, реализующим интерфейс IList; (сюда входят одномерные массивы);
- к любым компонентам, реализующим интерфейс IListSource;
- к любым компонентам, реализующим интерфейс IBindingList;
Дополнительные сведения о возможных источниках данных см. в разделе Источники данных, поддерживаемые Windows Forms.
Отображение сетки
Обычно элемент управления DataGrid используется для отображения одной таблицы данных из набора данных. Однако этот элемент управления можно также использовать для отображения нескольких таблиц, включая связанные таблицы. Отображение сетки настраивается автоматически в зависимости от источника данных. В таблице ниже указано, что именно отображается в сетке в разных конфигурациях.
| Содержимое набора данных | Что отображается |
|---|---|
| Одна таблица | Таблица отображается в сетке. |
| Несколько таблиц | В сетке может отображаться иерархическое представление, с помощью которого пользователь может переходить к нужной таблице. |
| Несколько связанных таблиц | В сетке может отображаться иерархическое представление, с помощью которого можно выбирать таблицы. Кроме того, можно задать отображение в сетке родительской таблицы. Записи в родительской таблице позволяют пользователям переходить к связанным строкам дочерних таблиц. |
Таблицы в наборе данных связываются с помощью DataRelation. См. также раздел Создание связей между наборами данных.
Когда элемент управления DataGrid отображает таблицу и свойству AllowSorting присвоено значение true , данные можно сортировать, щелкая заголовки столбцов. Пользователь также может добавлять строки и редактировать ячейки.
Связи между наборами таблиц отображаются для пользователей с помощью структуры навигации «родительская-дочерняя». Родительские таблицы представляют высший уровень данных, а дочерние таблицы — это таблицы данных, производные от отдельных листингов в родительских таблицах. В каждой родительской строке, содержащей дочернюю таблицу, отображаются расширители. При щелчке расширителя создается список гиперссылок на дочерние таблицы. Когда пользователь переходит по ссылке, отображается дочерняя таблица. Щелкнув значок отображения и скрытия родительских строк (), он скрывает сведения о родительской таблице или приводит к повторному появлении, если пользователь ранее скрывал его. Пользователь может нажать кнопку «Назад», чтобы вернуться к предыдущей таблице.
Столбцы и строки
DataGrid состоит из коллекции объектов DataGridTableStyle, содержащихся в свойстве TableStyles элемента управления DataGrid. Стиль таблицы может содержать коллекцию объектов DataGridColumnStyle, содержащихся в свойстве GridColumnStyles класса DataGridTableStyle. Свойства TableStyles и GridColumnStyles можно изменить с помощью редакторов коллекций, доступных в окне Свойства.
К любому классу DataGridTableStyle, связанному с элементом управления DataGrid, можно получить доступ через коллекцию GridTableStylesCollection. Коллекцию GridTableStylesCollection можно изменить в конструкторе с помощью редактора коллекции DataGridTableStyle или программным путем с помощью свойства TableStyles элемента управления DataGrid.
На рисунке показаны объекты, включенные в элемент управления DataGrid.
Стили таблиц и столбцов синхронизируются с объектами DataTable и DataColumn путем задания для их свойства MappingName соответствующих свойств TableName и ColumnName. Когда класс DataGridTableStyle, не имеющий стилей столбцов, добавляется в элемент управления DataGrid, привязанный к допустимому источнику данных, и для свойства MappingName этого стиля таблицы задается допустимое свойство TableName, для этого стиля таблицы создается коллекция объектов DataGridColumnStyle. Для каждого объекта DataColumn в коллекции Columns объекта DataTable в коллекцию GridColumnStylesCollection добавляется соответствующий класс DataGridColumnStyle. Доступ к коллекции GridColumnStylesCollection осуществляется через свойство GridColumnStyles класса DataGridTableStyle. Столбцы можно добавлять или удалять из сетки, используя метод Add или Remove для коллекции GridColumnStylesCollection. Дополнительные сведения см. в разделе Практическое руководство. Добавление таблиц и столбцов в элемент управления DataGrid в Windows Forms и Практическое руководство. Удаление или скрытие столбцов элемента управления DataGrid в Windows Forms.
Коллекция типов столбцов расширяет класс DataGridColumnStyle, добавляя целый ряд возможностей форматирования и редактирования. Все типы столбцов наследуют от базового класса DataGridColumnStyle. Создаваемый класс зависит от свойства DataType класса DataColumn, который является базовым для DataGridColumn. Например, объект DataColumn, для свойства DataType которого задано значение Boolean, будет связан с DataGridBoolColumn. В следующей таблице описан каждый из этих типов столбцов.
| Тип столбца | Description |
|---|---|
| DataGridTextBoxColumn | Принимает и отображает данные в виде форматированных или неформатированных строк. Возможности редактирования аналогичны возможностям редактирования данных в простом элементе TextBox. Наследует от DataGridColumnStyle. |
| DataGridBoolColumn | Принимает и отображает значения true , false и NULL. Наследует от DataGridColumnStyle. |
Двойной щелчок правого края столбца изменяет размер столбца для отображения полной подписи и самой широкой записи.
Стили таблиц и столбцов
После установки формата по умолчанию для элемента управления DataGrid можно настроить цвета, которые будут использоваться при отображении определенных таблиц в сетке данных.
Для этого необходимо создать экземпляры класса DataGridTableStyle. Стили таблиц определяют форматирование отдельных таблиц, которое не следует путать с форматированием самого элемента управления DataGrid по умолчанию. В определенный момент времени каждая таблица может иметь только один заданный для нее стиль.
В некоторых случаях требуется, чтобы определенный столбец отличался от остальных столбцов таблицы данных. Можно создать настраиваемый набор стилей столбцов с помощью свойства GridColumnStyles.
Стили столбцов связаны со столбцами в наборе данных так же, как стили таблиц связаны с таблицами данных. Так же как и таблица может иметь только один стиль на конкретный момент времени, каждому столбцу можно назначить только один стиль в рамках определенного стиля таблицы. Эта связь определяется в свойстве MappingName столбца.
Если вы создали стиль таблицы, не добавив в него стили столбцов, Visual Studio добавляет стили столбцов по умолчанию при создании формы и сетки во время выполнения. Однако если добавить стили столбцов в созданный стиль таблицы, Visual Studio не будет создавать стили столбцов. Кроме того, необходимо определить стили столбцов и назначить их с помощью имени сопоставления, чтобы нужные столбцы отображались в сетке.
Поскольку выбор столбцов для отображения в сетке данных выполняется путем назначения им стиля столбца, можно включить в набор данных столбцы данных, которые не отображаются в сетке, не назначая им стиль. При этом, поскольку столбец данных включен в набор данных, можно программным образом редактировать данные, которые не отображаются.
Как правило, создание стилей столбцов и добавление их в коллекцию стилей столбцов выполняется перед добавлением стилей таблиц в коллекцию стилей таблиц. При добавлении в коллекцию пустого стиля таблицы стили столбцов создаются автоматически. Следовательно, при попытке добавить в коллекцию новые стили столбцов с повторяющимися значениями MappingName будет создано исключение.
Иногда может потребоваться изменить один столбец из нескольких (например, набор данных содержит 50 столбцов, а вам нужны только 49 из них). В этом случае проще импортировать все 50 столбцов и программно удалить один, а не добавлять все 49 столбцов по отдельности.
Форматирование
Форматирование, которое может применяться к элементу управления DataGrid, включает стили границ, стили линий сетки, шрифты, свойства подписи, выравнивание данных и чередующиеся фоновые цвета для строк. Дополнительные сведения см. в разделе Практическое руководство. Форматирование элемента управления DataGrid в Windows Forms.
События
Помимо общих событий управления, таких как MouseDown, Enter и Scroll, элемент управления DataGrid поддерживает события, связанные с редактированием и навигацией в сетке. Свойство CurrentCell определяет, какая ячейка выбрана. Событие CurrentCellChanged вызывается, когда пользователь переходит к новой ячейке. При переходе к новой таблице через отношение «родительская-дочерняя» вызывается событие Navigate. Событие BackButtonClick возникает, когда пользователь нажимает кнопку «Назад» при просмотре дочерней таблицы, а событие ShowParentDetailsButtonClick возникает при нажатии значка «показать/скрыть» для родительских строк.
См. также
- Элемент управления DataGrid
- Практическое руководство. Привязка элемента управления DataGrid в Windows Forms к источнику данных
- Практическое руководство. Добавление таблиц и столбцов в элемент управления DataGrid в Windows Forms
- Практическое руководство. Удаление или скрытие столбцов элемента управления DataGridView в Windows Forms
- Практическое руководство. Форматирование элемента управления DataGrid в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Практическое руководство. Создание таблицы подстановки для элемента управления ComboBox, ListBox или CheckedListBox в Windows Forms
Иногда полезно отображать данные в удобном для пользователя формате в форме Windows Forms и при этом сохранять их в формате, требуемом в используемой программе. Например, в бланке заказа продуктов питания могут отображаться элементы меню с названиями продуктов в списке. Однако таблица данных регистрации заказа будет содержать уникальные идентификаторы, представляющие продукты питания. В таблице ниже представлен пример хранения и отображения данных бланка заказа продуктов питания.
OrderDetailsTable
| OrderID | ItemID | Количество |
|---|---|---|
| 4085 | 12 | 1 |
| 4086 | 13 | 3 |
ItemTable
| ИД | Имя |
|---|---|
| 12 | Картофель |
| 13 | Цыпленок |
В этом сценарии одна таблица OrderDetailsTable содержит фактические сведения, важные с точки зрения отображения и сохранения. Однако с целью экономии места они представлены в неудобном для восприятия виде. Другая таблица ItemTable содержит только данные, связанные с представлением, а именно сведения о том, какой код соответствует тому или иному продукту. Информации о фактических заказах продуктов в ней нет.
Таблица ItemTable связана с элементом управления ComboBox, ListBox или CheckedListBox с помощью трех свойств. Свойство DataSource содержит имя таблицы. Свойство DisplayMember содержит столбец данных таблицы, который должен отображаться в элементе управления (название продукта). Свойство ValueMember содержит столбец данных таблицы с сохраняемыми данными (идентификатор).
Таблица OrderDetailsTable связана с элементом управления с помощью коллекции привязок, доступных через свойство DataBindings. При добавлении объекта привязки в коллекцию свойство элемента управления связывается с определенным элементом данных (столбцом кодов) в источнике данных (таблице OrderDetailsTable). Когда в элементе управления делается выбор, в этой таблице сохраняются вводимые данные.
Создание таблицы подстановок
- Добавьте на форму элемент управления ComboBox, ListBox или CheckedListBox.
- Произведите подключение к источнику данных.
- Установите связь между данными в двух таблицах. См. раздел Знакомство с объектами DataRelation.
- Задайте следующие свойства. Их можно задать в коде или в конструкторе.
Свойство Параметр DataSource Таблица, в которой содержатся сведения о том, какому коду соответствует тот или иной элемент. В приведенном выше сценарии это ItemTable . DisplayMember Столбец таблицы источника данных, который необходимо отобразить в элементе управления. В приведенном выше сценарии это «Name» (для задания в коде используйте кавычки). ValueMember Столбец таблицы источника данных, который содержит сохраняемую информацию. В приведенном выше сценарии это «ID» (для задания в коде используйте кавычки). - В процедуре вызовите метод Add класса ControlBindingsCollection для привязки свойства SelectedValue элемента управления к таблице, в которой регистрируются данные, вводимые в форме. Кроме того, вместо кода это можно сделать в конструкторе с помощью свойства DataBindings элемента управления в окне Свойства. В приведенном выше сценарии это OrderDetailsTable , а столбец — «ItemID» .
ListBox1.DataBindings.Add("SelectedValue", OrderDetailsTable, "ItemID")
listBox1.DataBindings.Add("SelectedValue", OrderDetailsTable, "ItemID");
См. также
- Привязка данных и Windows Forms
- Общие сведения об элементе управления ListBox
- Общие сведения об элементе управления ComboBox
- Общие сведения об элементе управления CheckedListBox
- Создание списка для выбора элементов в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.