Пример. Создание не связанного с данными элемента управления DataGridView в Windows Forms
Обновлен: Ноябрь 2007
Иногда требуется отображать табличные данные, полученные не из базы данных. Например, может потребоваться отобразить содержимое двухмерного массива строк. Класс DataGridView предоставляет удобный и настраиваемый способ отображения данных без привязки к источнику данных. Данное руководство включает сведения о том, как заполнить элемент управления DataGridView и управлять добавлением и удалением строк в "непривязанном" режиме. По умолчанию пользователь может добавлять новые строки. Чтобы запретить добавление строк, свойству AllowUserToAddRows следует присвоить значение false.
Чтобы скопировать весь текст кода из этой темы, см. раздел Практическое руководство. Создание не связанного с данными элемента управления DataGridView в Windows Forms.
Создание формы
Использование элемента управления DataGridView без привязки к данным
Создайте класс, производный от Form и содержащий следующие объявления переменных и метод Main.
Imports System Imports System.Drawing Imports System.Windows.Forms Public Class Form1 Inherits System.Windows.Forms.Form Private buttonPanel As New Panel Private WithEvents songsDataGridView As New DataGridView Private WithEvents addNewRowButton As New Button Private WithEvents deleteRowButton As New Button ... <STAThreadAttribute()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class
using System; using System.Drawing; using System.Windows.Forms; public class Form1 : System.Windows.Forms.Form { private Panel buttonPanel = new Panel(); private DataGridView songsDataGridView = new DataGridView(); private Button addNewRowButton = new Button(); private Button deleteRowButton = new Button(); ... [STAThreadAttribute()] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
Реализуйте метод SetupLayout в определении класса формы для настройки макета формы.
Private Sub SetupLayout() Me.Size = New Size(600, 500) With addNewRowButton .Text = "Add Row" .Location = New Point(10, 10) End With With deleteRowButton .Text = "Delete Row" .Location = New Point(100, 10) End With With buttonPanel .Controls.Add(addNewRowButton) .Controls.Add(deleteRowButton) .Height = 50 .Dock = DockStyle.Bottom End With Me.Controls.Add(Me.buttonPanel) End Sub
private void SetupLayout() { this.Size = new Size(600, 500); addNewRowButton.Text = "Add Row"; addNewRowButton.Location = new Point(10, 10); addNewRowButton.Click += new EventHandler(addNewRowButton_Click); deleteRowButton.Text = "Delete Row"; deleteRowButton.Location = new Point(100, 10); deleteRowButton.Click += new EventHandler(deleteRowButton_Click); buttonPanel.Controls.Add(addNewRowButton); buttonPanel.Controls.Add(deleteRowButton); buttonPanel.Height = 50; buttonPanel.Dock = DockStyle.Bottom; this.Controls.Add(this.buttonPanel); }
Создайте метод SetupDataGridView для настройки столбцов и свойств DataGridView.
Этот метод сначала добавляет элемент управления DataGridView в коллекцию формы Controls. Затем определяется число отображаемых столбцов при помощи свойства ColumnCount. Стиль заголовков столбцов по умолчанию определяется путем задания значений свойств BackColor, ForeColor и Font элемента DataGridViewCellStyle, возвращенного свойством ColumnHeadersDefaultCellStyle.
Сначала устанавливаются свойства макета и внешнего вида, затем назначаются названия столбцов. При выходе этого метода элемент управления DataGridView готов к заполнению.
Private Sub SetupDataGridView() Me.Controls.Add(songsDataGridView) songsDataGridView.ColumnCount = 5 With songsDataGridView.ColumnHeadersDefaultCellStyle .BackColor = Color.Navy .ForeColor = Color.White .Font = New Font(songsDataGridView.Font, FontStyle.Bold) End With With songsDataGridView .Name = "songsDataGridView" .Location = New Point(8, 8) .Size = New Size(500, 250) .AutoSizeRowsMode = _ DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single .CellBorderStyle = DataGridViewCellBorderStyle.Single .GridColor = Color.Black .RowHeadersVisible = False .Columns(0).Name = "Release Date" .Columns(1).Name = "Track" .Columns(2).Name = "Title" .Columns(3).Name = "Artist" .Columns(4).Name = "Album" .Columns(4).DefaultCellStyle.Font = _ New Font(Me.songsDataGridView.DefaultCellStyle.Font, FontStyle.Italic) .SelectionMode = DataGridViewSelectionMode.FullRowSelect .MultiSelect = False .Dock = DockStyle.Fill End With End Sub
private void SetupDataGridView() { this.Controls.Add(songsDataGridView); songsDataGridView.ColumnCount = 5; songsDataGridView.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy; songsDataGridView.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; songsDataGridView.ColumnHeadersDefaultCellStyle.Font = new Font(songsDataGridView.Font, FontStyle.Bold); songsDataGridView.Name = "songsDataGridView"; songsDataGridView.Location = new Point(8, 8); songsDataGridView.Size = new Size(500, 250); songsDataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; songsDataGridView.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; songsDataGridView.CellBorderStyle = DataGridViewCellBorderStyle.Single; songsDataGridView.GridColor = Color.Black; songsDataGridView.RowHeadersVisible = false; songsDataGridView.Columns[0].Name = "Release Date"; songsDataGridView.Columns[1].Name = "Track"; songsDataGridView.Columns[2].Name = "Title"; songsDataGridView.Columns[3].Name = "Artist"; songsDataGridView.Columns[4].Name = "Album"; songsDataGridView.Columns[4].DefaultCellStyle.Font = new Font(songsDataGridView.DefaultCellStyle.Font, FontStyle.Italic); songsDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; songsDataGridView.MultiSelect = false; songsDataGridView.Dock = DockStyle.Fill; songsDataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler( songsDataGridView_CellFormatting); }
Создайте метод PopulateDataGridView для добавления строк в элемент управления DataGridView.
Каждая строка представляет песню и связанные с ней данные.
Private Sub PopulateDataGridView() Dim row0 As String() = {"11/22/1968", "29", "Revolution 9", _ "Beatles", "The Beatles [White Album]"} Dim row1 As String() = {"1960", "6", "Fools Rush In", _ "Frank Sinatra", "Nice 'N' Easy"} Dim row2 As String() = {"11/11/1971", "1", "One of These Days", _ "Pink Floyd", "Meddle"} Dim row3 As String() = {"1988", "7", "Where Is My Mind?", _ "Pixies", "Surfer Rosa"} Dim row4 As String() = {"5/1981", "9", "Can't Find My Mind", _ "Cramps", "Psychedelic Jungle"} Dim row5 As String() = {"6/10/2003", "13", _ "Scatterbrain. (As Dead As Leaves.)", _ "Radiohead", "Hail to the Thief"} Dim row6 As String() = {"6/30/1992", "3", "Dress", "P J Harvey", "Dry"} With Me.songsDataGridView.Rows .Add(row0) .Add(row1) .Add(row2) .Add(row3) .Add(row4) .Add(row5) .Add(row6) End With With Me.songsDataGridView .Columns(0).DisplayIndex = 3 .Columns(1).DisplayIndex = 4 .Columns(2).DisplayIndex = 0 .Columns(3).DisplayIndex = 1 .Columns(4).DisplayIndex = 2 End With End Sub
private void PopulateDataGridView() { string[] row0 = { "11/22/1968", "29", "Revolution 9", "Beatles", "The Beatles [White Album]" }; string[] row1 = { "1960", "6", "Fools Rush In", "Frank Sinatra", "Nice 'N' Easy" }; string[] row2 = { "11/11/1971", "1", "One of These Days", "Pink Floyd", "Meddle" }; string[] row3 = { "1988", "7", "Where Is My Mind?", "Pixies", "Surfer Rosa" }; string[] row4 = { "5/1981", "9", "Can't Find My Mind", "Cramps", "Psychedelic Jungle" }; string[] row5 = { "6/10/2003", "13", "Scatterbrain. (As Dead As Leaves.)", "Radiohead", "Hail to the Thief" }; string[] row6 = { "6/30/1992", "3", "Dress", "P J Harvey", "Dry" }; songsDataGridView.Rows.Add(row0); songsDataGridView.Rows.Add(row1); songsDataGridView.Rows.Add(row2); songsDataGridView.Rows.Add(row3); songsDataGridView.Rows.Add(row4); songsDataGridView.Rows.Add(row5); songsDataGridView.Rows.Add(row6); songsDataGridView.Columns[0].DisplayIndex = 3; songsDataGridView.Columns[1].DisplayIndex = 4; songsDataGridView.Columns[2].DisplayIndex = 0; songsDataGridView.Columns[3].DisplayIndex = 1; songsDataGridView.Columns[4].DisplayIndex = 2; }
При наличии вспомогательных методов можно присоединить обработчики событий.
Мы будем обрабатывать события Click кнопок Добавить и Удалить, события формы Load и события CellFormatting элемента управления DataGridView.
При возникновении события Click кнопки Добавить новая пустая строка добавляется в DataGridView.
При возникновении события Click кнопки Удалить удаляется выбранная строка, если это не строка для ввода новых записей, которая служит для добавления новых строк. Эта строка всегда является последней в элементе управления DataGridView.
При возникновении события формы Load вызываются вспомогательные методы SetupLayout, SetupDataGridView и PopulateDataGridView.
При возникновении события CellFormatting каждая ячейка в столбце Date использует длинный формат даты, за исключением случаев, когда не удается разобрать значение в ячейке.
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load SetupLayout() SetupDataGridView() PopulateDataGridView() End Sub Private Sub songsDataGridView_CellFormatting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _ Handles songsDataGridView.CellFormatting If Me.songsDataGridView.Columns(e.ColumnIndex).Name = _ "Release Date" Then If e IsNot Nothing Then If e.Value IsNot Nothing Then Try e.Value = DateTime.Parse(e.Value.ToString()) _ .ToLongDateString() e.FormattingApplied = True Catch ex As FormatException Console.WriteLine("{0} is not a valid date.", e.Value.ToString()) End Try End If End If End If End Sub Private Sub addNewRowButton_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles addNewRowButton.Click Me.songsDataGridView.Rows.Add() End Sub Private Sub deleteRowButton_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles deleteRowButton.Click If Me.songsDataGridView.SelectedRows.Count > 0 AndAlso _ Not Me.songsDataGridView.SelectedRows(0).Index = _ Me.songsDataGridView.Rows.Count - 1 Then Me.songsDataGridView.Rows.RemoveAt( _ Me.songsDataGridView.SelectedRows(0).Index) End If End Sub
public Form1() { this.Load += new EventHandler(Form1_Load); } private void Form1_Load(System.Object sender, System.EventArgs e) { SetupLayout(); SetupDataGridView(); PopulateDataGridView(); } private void songsDataGridView_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e) { if (this.songsDataGridView.Columns[e.ColumnIndex].Name == "Release Date") { if (e != null) { if (e.Value != null) { try { e.Value = DateTime.Parse(e.Value.ToString()) .ToLongDateString(); e.FormattingApplied = true; } catch (FormatException) { Console.WriteLine("{0} is not a valid date.", e.Value.ToString()); } } } } } private void addNewRowButton_Click(object sender, EventArgs e) { this.songsDataGridView.Rows.Add(); } private void deleteRowButton_Click(object sender, EventArgs e) { if (this.songsDataGridView.SelectedRows.Count > 0 && this.songsDataGridView.SelectedRows[0].Index != this.songsDataGridView.Rows.Count - 1) { this.songsDataGridView.Rows.RemoveAt( this.songsDataGridView.SelectedRows[0].Index); } }
Тестирование приложения
Теперь можно проверить форму, чтобы убедиться, что она работает так, как ожидалось.
Чтобы проверить форму, выполните следующие действия:
Нажмите клавишу F5 для запуска приложения.
Появится элемент управления DataGridView с песнями, перечисленными в PopulateDataGridView. Можно добавлять новые строки с помощью кнопки Добавить строку и удалять выбранные строки с помощью кнопки Удалить строку. Элемент управления DataGridView служит хранилищем данных, его данные не зависят от внешних источников, таких как DataSet или массивы.
Следующие действия
Это приложение позволяет в общем понять возможности элемента управления DataGridView. Внешний вид и поведение элемента управления DataGridView можно контролировать несколькими способами.
Изменение стилей границ и заголовка. Дополнительные сведения см. в разделе Практическое руководство. Изменение внешнего вида границ и линий сетки элемента управления DataGridView в Windows Forms.
Разрешение или ограничение пользовательского ввода в элемент управления DataGridView. Дополнительные сведения см. в разделах Практическое руководство. Запрет добавления и удаления строк элемента управления DataGridView в Windows Forms и Практическое руководство. Определение столбцов элемента управления DataGridView как доступных только для чтения в Windows Forms.
Проверка ввода пользователя на наличие ошибок, связанных с базой данных. Дополнительные сведения см. в разделе Пример. Обработка ошибок, связанных с вводом данных с помощью элемента управления DataGridView, в Windows Forms.
Обработка очень больших наборов данных в виртуальном режиме. Дополнительные сведения см. в разделе Пример. Реализация виртуального режима для элемента управления DataGridView в Windows Forms.
Настройка внешнего вида ячеек. Дополнительные сведения см. в разделах Практическое руководство. Настройка внешнего вида ячеек элемента управления DataGridView в Windows Forms и Практическое руководство. Установка стилей ячейки по умолчанию для элемента управления DataGridView в Windows Forms.
См. также
Задачи
Основные понятия
Режимы отображения данных в элементе управления DataGridView в Windows Forms
Ссылки
Другие ресурсы
Отображение данных с помощью элемента управления DataGridView в Windows Forms