Иногда возникает необходимость размещения колонки с кнопками в таблице для выполнения каких либо действий с данными, сегодня рассмотрим основные требования для реализации данной задачи.
Для начала работы вам потребуется создать новый проект и добавить на форму компонент DataGridView. После выполнения этих действий у вас получится вот такой вариант формы:
Давайте для начала создадим тестовый источник данных для компонента, который мы разместим в метод срабатывающий при запуске нашего проекта:
private void Form1_Load(object sender, EventArgs e)
{
//Указываем, что колонок(столбцов) с данными будет три
dataGridView1.ColumnCount = 3;
//Задаем имена столбцов
dataGridView1.Columns[0].Name = "Product ID";
dataGridView1.Columns[1].Name = "Product Name";
dataGridView1.Columns[2].Name = "Product Price";
//Добавляем строки данных
string[] row = new string[] { "1", "Product 1", "1000" };
dataGridView1.Rows.Add(row);
row = new string[] { "2", "Product 2", "2000" };
dataGridView1.Rows.Add(row);
row = new string[] { "3", "Product 3", "3000" };
dataGridView1.Rows.Add(row);
row = new string[] { "4", "Product 4", "4000" };
dataGridView1.Rows.Add(row);
}
После добавления данных, добавим в этот же метод новый экземпляр класса System.Windows.Forms.DataGridViewButtonColumn.
DataGridViewButtonColumn ButtonColumn = new DataGridViewButtonColumn();
Зададим режим изменения размеров столбца, у нас есть несколько вариантов:
- NotSet — ежим изменения размеров столбца наследуется из свойства System.Windows.Forms.DataGridView.AutoSizeColumnsMode.
- None — Значения ширины столбцов не изменяются автоматически.
- ColumnHeader — Ширина столбца изменяется так, чтобы вместить содержимое ячейки заголовка для столбца.
- AllCellsExceptHeader — Ширина столбца изменяется так, чтобы вместить содержимое всех ячеек столбца, за исключением ячейки заголовка.
- AllCells — Ширина столбца изменяется так, чтобы вместить содержимое всех ячеек столбца, включая ячейку заголовка.
- DisplayedCellsExceptHeader — Ширина столбца изменяется так, чтобы вместить содержимое всех ячеек столбца, которые находятся в строках, отображающихся на экране в настоящий момент, за исключением строки заголовка.
- DisplayedCells — Ширина столбца изменяется так, чтобы вместить содержимое всех ячеек столбца, которые находятся в строках, отображающихся на экране в настоящий момент, включая строку заголовка.
- Fill — Ширина столбца подбирается таким образом, чтобы суммарная ширина всех столбцов в точности заполняла отображаемую область элемента управления, а прокрутка по горизонтали требовалась только для столбцов, ширина которых превышает значение свойства System.Windows.Forms.DataGridViewColumn.MinimumWidth . Относительная ширина столбцов определяется относительными значениями свойства System.Windows.Forms.DataGridViewColumn.FillWeight.
Выберем AllCells.
ButtonColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
Задаем значение, указывающее, что столбец является видимым.
ButtonColumn.Visible = true;
Задаем текст, используемый для подсказок.
ButtonColumn.ToolTipText = "Удалить строку";
Задаем значение, указывающее, что будет отображаться текст на кнопках, которые содержат ячейки в данном столбце.
ButtonColumn.Text = "Удалить";
Задаем имя столбца.
ButtonColumn.Name = "DeleteButtonColumn";
Задаем текст ячейки заголовка столбца.
ButtonColumn.HeaderText = "Редактирование";
Указываем, что необходимо отображать текст на каждом элементе управления.
ButtonColumn.UseColumnTextForButtonValue = true;
Зададим внешний вид кнопки в каждой ячейки. У нас есть несколько вариантов:
- Flat — Элемент управления выглядит плоским.
- Popup — Элемент управления выглядит плоским, а при наведении на него указателя мыши становится объемным.
- Standard — Элемент управления выглядит объемным.
- System — Внешний вид элемента управления определяется пользовательской операционной системой.
Возьмем к примеру Popup.
ButtonColumn.FlatStyle = FlatStyle.Popup;
Теперь возникает необходимость создать событие на нажатие по кнопке. Для этого делаем клик правой клавишей мыши по компоненту и переходим в его свойства. Далее необходимо перейти в события компонента нажав на кнопку в виде молнии, расположенной под заголовком «Свойства». Находим событие CellContentClick и напротив него делаем два клика левой клавишей мыши.
После выполнения всех действий у вас откроется вкладка(или станет активной) с кодом формы на которой размещен компонент, с созданным методом dataGridView1_CellContentClick в котором мы пропишем, если индекс столбца ячейки, для которой произошло событие равен индексу столбца в котором расположены кнопки то выполни код. В нашем случае столбец добавлен последним, поэтому индекс у него 3.
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 3)
{
MessageBox.Show("Нажата кнопка на строке "+ e.RowIndex.ToString());
}
}
Пример выполнения программы:

Ссылка для скачивания примера: Яндекс.Диск
0.00 (0%) 0 votes









