Колонка кнопок(DataGridViewButtonColumn) в DataGridView

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

Ссылка для скачивания примера: Яндекс.Диск


Комментариев нет:

Отправить комментарий

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