Практическое руководство. Настройка внешнего вида ячеек элемента управления DataGridView в Windows Forms
Можно настроить внешний вид любой ячейки, обрабатывая событие CellPainting элемента управления DataGridView. Свойство Graphics элемента управления DataGridView можно извлечь из свойства Graphicsобъекта DataGridViewCellPaintingEventArgs. С помощью свойства Graphics можно повлиять на внешний вид всего элемента управления DataGridView, но обычно требуется повлиять только на внешний вид ячейки, которая в настоящий момент рисуется. Свойство ClipBounds объекта DataGridViewCellPaintingEventArgs позволяет ограничить операции рисования ячейкой, которая рисуется в настоящий момент.
В следующем примере кода вы отрисуете все ячейки в столбце ContactName с использованием цветовой схемы элемента управления DataGridView. Текстовое содержимое каждой ячейки рисуется цветом Crimson, а вложенный прямоугольник рисуется в том же цвете, что и свойство GridColor элемента управления DataGridView.
Пример
private void dataGridView1_CellPainting(object sender, System.Windows.Forms.DataGridViewCellPaintingEventArgs e) < if (this.dataGridView1.Columns["ContactName"].Index == e.ColumnIndex && e.RowIndex >= 0) < Rectangle newRect = new Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, e.CellBounds.Width - 4, e.CellBounds.Height - 4); using ( Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor), backColorBrush = new SolidBrush(e.CellStyle.BackColor)) < using (Pen gridLinePen = new Pen(gridBrush)) < // Erase the cell. e.Graphics.FillRectangle(backColorBrush, e.CellBounds); // Draw the grid lines (only the right and bottom lines; // DataGridView takes care of the others). e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1); e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom); // Draw the inset highlight box. e.Graphics.DrawRectangle(Pens.Blue, newRect); // Draw the text content of the cell, ignoring alignment. if (e.Value != null) < e.Graphics.DrawString((String)e.Value, e.CellStyle.Font, Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, StringFormat.GenericDefault); >e.Handled = true; > > > >
Private Sub dataGridView1_CellPainting(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _ Handles dataGridView1.CellPainting If Me.dataGridView1.Columns("ContactName").Index = _ e.ColumnIndex AndAlso e.RowIndex >= 0 Then Dim newRect As New Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, _ e.CellBounds.Width - 4, e.CellBounds.Height - 4) Dim backColorBrush As New SolidBrush(e.CellStyle.BackColor) Dim gridBrush As New SolidBrush(Me.dataGridView1.GridColor) Dim gridLinePen As New Pen(gridBrush) Try ' Erase the cell. e.Graphics.FillRectangle(backColorBrush, e.CellBounds) ' Draw the grid lines (only the right and bottom lines; ' DataGridView takes care of the others). e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, _ e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, _ e.CellBounds.Bottom - 1) e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, _ e.CellBounds.Top, e.CellBounds.Right - 1, _ e.CellBounds.Bottom) ' Draw the inset highlight box. e.Graphics.DrawRectangle(Pens.Blue, newRect) ' Draw the text content of the cell, ignoring alignment. If (e.Value IsNot Nothing) Then e.Graphics.DrawString(CStr(e.Value), e.CellStyle.Font, _ Brushes.Crimson, e.CellBounds.X + 2, e.CellBounds.Y + 2, _ StringFormat.GenericDefault) End If e.Handled = True Finally gridLinePen.Dispose() gridBrush.Dispose() backColorBrush.Dispose() End Try End If End Sub
Компиляция кода
Для этого примера требуются:
- элемент управления DataGridView с именем dataGridView1 со столбцом ContactName , подобно таблице Customers в примере базы данных Northwind.
- ссылки на сборки System, System.Windows.Forms и System.Drawing.
См. также
- DataGridView
- CellPainting
- Настройка элементов управления DataGridView в Windows Forms
элемент управления DataGridView (Windows Forms)
Элемент управления DataGridView предоставляет мощный и гибкий способ отображения данных в табличном формате. Элемент управления DataGridView можно использовать для отображения представлений небольшого объема данных только для чтения, либо можно масштабировать его для отображения редактируемого представления очень больших наборов данных.
Для того чтобы реализовать пользовательское поведение в приложениях, элемент управления DataGridView можно расширить несколькими способами. Например, можно программно задать собственные алгоритмы сортировки, можно создать собственные типы ячеек. Внешний вид элемента управления DataGridView легко настраивается заданием значений нескольких свойств. В качестве источника данных могут использоваться хранилища данных различных типов, также элемент управления DataGridView может работать без привязанного к нему источника данных.
В подразделах данного раздела описываются принципы и методы применения возможностей DataGridView в приложениях.
В этом разделе
Общие сведения об элементе управления 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
Разделы, описывающие автоматическую корректировку размера строк и столбцов в соответствии с содержимым ячейки или доступной шириной элемента управления.
Ввод данных с помощью элемента управления DataGridView в Windows Forms
Разделы, в которых описывается изменение способов добавления и изменения данных в элементе управления.
Настройка элементов управления DataGridView в Windows Forms
Разделы, описывающие пользовательскую отрисовку ячеек и строк DataGridView , а также создание производных ячеек, столбцов и типов строк.
Оптимизация производительности элемента управления DataGridView в Windows Forms
Разделы, описывающие, как эффективно использовать элемент управления, чтобы избежать снижения производительности при работе с большими объемами данных.
Выполняемая по умолчанию обработка событий мыши и клавиатуры элементом управления DataGridView в Windows Forms
Описание способов взаимодействия пользователей с элементом управления DataGridView посредством клавиатуры и мыши.
Различия элементов управления DataGridView и DataGrid в Windows Forms
Описывает расширение возможностей и улучшения элемента управления DataGridView , который заменяет элемент управления DataGrid.
Ссылка
DataGridView
Справочная документация по элементу управления DataGridView.
BindingSource
Содержит справочную документацию по компоненту BindingSource. Элемент управления DataGridView и компонент BindingSource предназначены для совместной работы.
См. также
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
.NET Desktop feedback
The .NET Desktop documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Пример. Создание не связанного с данными элемента управления DataGridView в Windows Forms
Часто требуется отобразить табличные данные, полученные не из базы данных. Например, может потребоваться отобразить содержимое двумерного массива строк. Класс DataGridView предоставляет простой способ отображения данных без привязки к источнику данных с широкими возможностями настройки. В этом пошаговом руководстве показано, как заполнять элемент управления DataGridView и управлять добавлением и удалением строк в режиме «отсутствия привязки к данным». По умолчанию пользователь может добавлять новые строки. Чтобы предотвратить добавление строк, задайте для свойства AllowUserToAddRows значение false .
Создание формы
Использование не связанного с данными элемента управления 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()); >>
_ Public Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub End Class
private void 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 SetupDataGridView()
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 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() = Dim row1 As String() = Dim row2 As String() = Dim row3 As String() = Dim row4 As String() = Dim row5 As String() = Dim row6 As String() = 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
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("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(" 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.
См. также
- DataGridView
- Отображение данных с помощью элемента управления DataGridView в Windows Forms
- Практическое руководство. Создание не связанного с данными элемента управления DataGridView в Windows Forms
- Режимы отображения данных в элементе управления DataGridView в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
.NET Desktop feedback
The .NET Desktop documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Практическое руководство. Вывод изображений в ячейках элемента управления DataGridView в Windows Forms
Рисунок — это одно из значений, которые можно отобразить в строке данных. Часто это фотография сотрудника или логотип компании.
Включить изображения очень просто при отображении данных в элементе управления DataGridView. Элемент управления DataGridView нативно обрабатывает любой формат изображения, поддерживаемый классом Image, а также формат изображения OLE, используемый некоторыми базами данных.
Если источник данных элемента управления DataGridView содержит столбец изображений, они будут отображаться автоматически элементом управления DataGridView.
В следующем примере кода показано, как извлечь значок из внедренного ресурса и преобразовать его в растровое изображение для отображения в каждой ячейке столбца изображения. Еще один пример, в котором текстовые значения ячеек заменяются соответствующими изображениями, см. в разделе Практическое руководство. Настройка форматирования данных в элементе управления dataGridView в Windows Forms.
Пример
private void createGraphicsColumn()
Public Sub CreateGraphicsColumn() Dim treeIcon As New Icon(Me.GetType(), "tree.ico") Dim iconColumn As New DataGridViewImageColumn() With iconColumn .Image = treeIcon.ToBitmap() .Name = "Tree" .HeaderText = "Nice tree" End With dataGridView1.Columns.Insert(2, iconColumn) End Sub
Компиляция кода
Для этого примера требуются:
- элемент управления DataGridView с именем dataGridView1 ;
- Ресурс внедренного значка с именем tree.ico .
- ссылки на сборки System, System.Windows.Forms и System.Drawing.
См. также
- DataGridView
- Базовые характеристики столбцов, строк и ячеек элемента управления DataGridView в Windows Forms
- Практическое руководство. Настройка форматирования данных элемента управления DataGridView в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
.NET Desktop feedback
The .NET Desktop documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по