Пример. Создание не связанного с данными элемента управления DataGridView в Windows Forms
Часто требуется отобразить табличные данные, полученные не из базы данных. Например, может потребоваться отобразить содержимое двумерного массива строк. Класс DataGridView предоставляет простой способ отображения данных без привязки к источнику данных с широкими возможностями настройки. В этом пошаговом руководстве показано, как заполнять элемент управления DataGridView и управлять добавлением и удалением строк в режиме "отсутствия привязки к данным". По умолчанию пользователь может добавлять новые строки. Чтобы предотвратить добавление строк, задайте для свойства AllowUserToAddRows значение false
.
Чтобы скопировать код в этом разделе в виде единого списка, см. статью Практическое руководство. Создание не связанного с данными элемента управления DataGridView в Windows Forms.
Создание формы
Использование не связанного с данными элемента управления DataGridView
Создайте класс, производный от Form и содержащий следующие объявления переменных и метод
Main
.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();
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()] static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } }
<STAThreadAttribute()> _ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class
Реализуйте метод
SetupLayout
в определении класса формы, чтобы настроить макет формы.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); }
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
Создайте метод
SetupDataGridView
для настройки столбцов и свойств DataGridView.Этот метод сначала добавляет элемент управления DataGridView в коллекцию Controls формы. Затем задается число отображаемых столбцов с помощью свойства ColumnCount. Стиль по умолчанию для заголовков столбцов задается путем задания свойств BackColor, ForeColor и Font объекта DataGridViewCellStyle, возвращаемого свойством ColumnHeadersDefaultCellStyle.
Задаются свойства макета и внешнего вида, после чего присваиваются имена столбцов. После того как этот метод завершает работу, элемент управления DataGridView готов к заполнению.
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); }
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
Создайте метод
PopulateDataGridView
для добавления строк в элемент управления DataGridView.Каждая строка представляет песню и связанную с ней информацию.
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; }
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
С помощью служебных методов можно подключать обработчики событий.
Вы будете обрабатывать события Click кнопок Добавить и Удалить, событие Load формы и событие CellFormatting элемента управления DataGridView.
При активации события Click кнопки Добавить в DataGridView добавляется новая пустая строка.
При активации события Click кнопки Удалить выбранная строка удаляется, если только она не является строкой для новых записей, что позволяет пользователю добавлять новые строки. Эта строка всегда является последней строкой в элементе управления DataGridView.
При возникновении события формы Load вызываются служебные методы
SetupLayout
,SetupDataGridView
иPopulateDataGridView
.При возникновении события CellFormatting каждая ячейка в столбце
Date
форматируется как длинная дата за исключением случаев, когда значение ячейки не может быть проанализировано.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 (e != null) { if (this.songsDataGridView.Columns[e.ColumnIndex].Name == "Release Date") { 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); } }
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 e IsNot Nothing Then If Me.songsDataGridView.Columns(e.ColumnIndex).Name = _ "Release Date" 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
Тестирование приложения
Теперь можно протестировать форму, чтобы убедиться, что она работает должным образом.
Проверка формы
Нажмите клавишу 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.
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по