Один из способов добиться этого - просто переопределить метод Paint из DataGridViewButtonCell и вызвать DrawImage из графического параметра.Вызов должен произойти после базового вызова.
public class DeleteCell : DataGridViewButtonCell {
Image del = Image.FromFile("..\\..\\img\\delete.ico");
protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
graphics.DrawImage(del, cellBounds);
}
}
После этого просто создайте свой собственный DataGridViewButtonColumn и установите созданный DeleteCell в качестве шаблона ячейки:
public class DeleteColumn : DataGridViewButtonColumn {
public DeleteColumn() {
this.CellTemplate = new DeleteCell();
this.Width = 20;
//set other options here
}
}
ЭтоЭто.Теперь используйте DeleteColumn для вашего DataGridView:
dgvBookings.Columns.Add(new DeleteColumn());
Если результирующее действие нажатия кнопки зависит от строки ячейки, убедитесь, что обрабатываете щелчки вправо, то есть перехватывает индекс строки ячейки.