Чтобы показать кнопку на DataGridView
строк, вы должны добавить DataGridViewButtonColumn
к столбцам сетки. Вот некоторые общие задачи, которые вы должны знать при использовании кнопки колонки:
- кнопку Добавить столбец в DataGridView
- Показать изображение на кнопку
- Set Text Баттона
- Ручка Нажмите событие Баттона
Кнопка Колонка
Добавить в DataGridView
Для того, чтобы показать кнопку на каждой строке сетке, вы можете добавить DataGridViewButtonColumn
к столбцам сетке программно или с помощью дизайнера:
var deleteButton=new DataGridViewButtonColumn();
deleteButton.Name="dataGridViewDeleteButton";
deleteButton.HeaderText="Delete";
deleteButton.Text="Delete";
deleteButton.UseColumnTextForButtonValue=true;
this.dataGridView1.Columns.Add(deleteButton);
Показать изображение на кнопку
Если вы предпочитаете рисовать изображения на кнопку, вы должны иметь изображение в качестве ресурса, а затем обработать CellPainting
событие вашей сетки:
void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == dataGridView1.NewRowIndex || e.RowIndex < 0)
return;
if (e.ColumnIndex == dataGridView1.Columns["dataGridViewDeleteButton"].Index)
{
var image = Properties.Resources.DeleteImage; //An image
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
var x = e.CellBounds.Left + (e.CellBounds.Width - image.Width)/2;
var y = e.CellBounds.Top + (e.CellBounds.Height - image.Height)/2;
e.Graphics.DrawImage(image, new Point(x, y));
e.Handled = true;
}
}
Set текст кнопки
Вы можете использовать любого из этих вариантов:
Вы можете установить Text
свойства вашего DataGridViewButtonColumn
, а также установить его UseColumnTextForButtonValue
к true
, таким образом текст будет отображаться на каждую ячейку этого столбца.
deleteButton.Text="Delete";
deleteButton.UseColumnTextForButtonValue=true;
Также вы можете использовать Value
свойство клетки:
this.dataGridView1.Rows[1].Cells[0].Value = "Some Text";
Кроме того, как другой вариант, вы можете обрабатывать CellFormatting
событие вашей сети.Этот способ может быть полезен, если вы хотите установить разные тексты для кнопок.
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
//If this is header row or new row, do nothing
if (e.RowIndex < 0 || e.RowIndex == this.dataGridView1.NewRowIndex)
return;
//If formatting your desired column, set the value
if (e.ColumnIndex=this.dataGridView1.Columns["dataGridViewDeleteButton"].Index)
{
e.Value = "Delete";
}
}
Ручка Нажмите Событие Баттона
Для hanlde кликов на кнопку, вы можете обрабатывать CellClick
или CellContentClick
событие Вашей сети. Оба события срабатывают щелчком и путем нажатия Пробел ключ.
void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
//if click is on new row or header row
if(e.RowIndex == dataGridView1.NewRowIndex || e.RowIndex < 0)
return;
//Check if click is on specific column
if(e.ColumnIndex == dataGridView1.Columns["dataGridViewDeleteButton"].Index)
{
//Put some logic here, for example to remove row from your binding list.
yourBindingList.RemoveAt(e.RowIndex);
}
}
Примечание
- Как отметил Ivan в комментариях, когда вы используете
BindingList
вам не нужно, чтобы установить источник данных сетки обнулить и обратно в список связывания с каждым изменением. Сам BindingList
отражает изменения вашего DataGridView
.
Я думаю, что на это был дан ответ раньше. stackoverflow.com/questions/21191950/how-to-add-a-button-to-a-column-in-the-datagridview – Wayne
Я не могу сделать это в списке. Я могу добавить кнопку в datatable. как это сделать в списке? – namsu
Если по списку вы имеете в виду свой список привязки, то ответ заключается в том, что вы не хотите этого делать :) Ваша сетка привязана к вашему Bindinglist of T, а столбцы отражают свойства в вашем объекте типа T, t хочу свойство «удалить» в вашем объекте, что не имеет особого смысла. Привяжите datagridviwe к вашему списку (как и раньше), а затем вручную добавьте столбец с кнопкой удаления, как это предлагает этот ответ. – TDull