Иногда возникает необходимость размещения колонки с кнопками в таблице для выполнения каких либо действий с данными, сегодня рассмотрим основные требования для реализации данной задачи.
Для начала работы вам потребуется создать новый проект и добавить на форму компонент DataGridView. После выполнения этих действий у вас получится вот такой вариант формы:
Давайте для начала создадим тестовый источник данных для компонента, который мы разместим в метод срабатывающий при запуске нашего проекта:
Выберем AllCells.
После выполнения всех действий у вас откроется вкладка(или станет активной) с кодом формы на которой размещен компонент, с созданным методом dataGridView1_CellContentClick в котором мы пропишем, если индекс столбца ячейки, для которой произошло событие равен индексу столбца в котором расположены кнопки то выполни код. В нашем случае столбец добавлен последним, поэтому индекс у него 3.
Для начала работы вам потребуется создать новый проект и добавить на форму компонент 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 - Внешний вид элемента управления определяется пользовательской операционной системой.
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());
}
}
Пример выполнения программы:Ссылка для скачивания примера: Яндекс.Диск











Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!