Чтобы показать кнопку на DataGridView
строк, вы должны добавить _ 2_ столбцам вашей сетки. Вот некоторые общие задачи, которые вы должны знать при использовании кнопки колонки:
- Добавить кнопку Колонна в DataGridView
- Показать изображение на кнопке
- Набор текста Баттона
- Ручка Нажмите Событие Баттона
<Сильный> Add Button Колонка для DataGridView STRONG>
Чтобы показать кнопку на каждой строке сетке, вы можете добавить _ 3_ столбцам вашей сетки программно или с помощью дизайнера:
var deleteButton=new DataGridViewButtonColumn();
deleteButton.Name="dataGridViewDeleteButton";
deleteButton.HeaderText="Delete";
deleteButton.Text="Delete";
deleteButton.UseColumnTextForButtonValue=true;
this.dataGridView1.Columns.Add(deleteButton);
<Сильный> Показать изображение на кнопки STRONG>
Если вы предпочитаете рисовать изображения на кнопке, вы должны иметь изображение в качестве ресурса, а затем обрабатывать _ 5_ событие вашей сетки:
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 Текст кнопки STRONG>
Вы можете использовать любой из этих вариантов:
Вы можете установить свойство Text
вашего DataGridViewButtonColumn
, а также установить его UseColumnTextForButtonValue
в true
, таким образом текст будет отображаться на каждую ячейку этого столбца.
deleteButton.Text="Delete";
deleteButton.UseColumnTextForButtonValue=true;
Также вы можете использовать Value
свойство клетки:
this.dataGridView1.Rows[1].Cells[0].Value = "Some Text";
Кроме того, как другой вариант, вы можете обрабатывать _ 14_ событие вашей сети. Таким образом, может быть полезно, если вы хотите установить различные тексты для кнопок.
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";
}
}
<Сильный> Ручка Нажмите событие Баттона STRONG>
Для hanlde нажатий на кнопку, вы можете обрабатывать _ 16_ или _ 17_ событие вашей сети. Оба события пожаров на мыши и нажав пробел KBD> ключ.
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);
// Or
// var data = (Product)dataGridView1.Rows[e.RowIndex].DataBoundItem;
// do something
}
}
<Сильный> Получить данные записи по щелчку события STRONG>
У вас есть e.RowIndex
, то вы можете получить данные, лежащие в основе ряда:
var data = (Product)dataGridView1.Rows[e.RowIndex].DataBoundItem;
// then you can get data.Id, data.Name, data.Price, ...
Вы должны привести его к типу данных recore, например, скажем Product
.
Если привязки данных был настроен на использование DataTable, то тип для броска DataRowView
.
Вы можете также использовать dataGridView1.Rows[e.RowIndex].Cells[some cell index].Value
, чтобы получить значение конкретной ячейки, однако DataBoundItem
имеет больше смысла.
<Сильный> Примечание STRONG>
- Как отмечает Иван в комментариях, когда вы используете
BindingList
вам не нужно, чтобы установить источник данных сетки в нуль и вернуться в список связывания с каждым изменением. BindingList
сами отражают изменения в DataGridView
.
person
Reza Aghaei
schedule
05.11.2015