Вы можете определить событие для пользовательского типа столбца, затем переопределить OnContentClick
пользовательской ячейки и вызвать событие столбца.
Просто имейте в виду, чтобы использовать его, вам нужно подписать событие через код, потому что событие принадлежит Column
, и вы не можете увидеть его в конструкторе.
Пример
Здесь я создал столбец пользовательских кнопок, на который вы можете подписаться на событие ContentClick
. Таким образом, вам не нужно проверять, вызвано ли событие CellContentClick
для DataGridView
из-за нажатия на этот столбец кнопки.
using System.Windows.Forms;
public class MyDataGridViewButtonColumn : DataGridViewButtonColumn
{
public event EventHandler<DataGridViewCellEventArgs> ContentClick;
public void RaiseContentClick(DataGridViewCellEventArgs e)
{
ContentClick?.Invoke(DataGridView, e);
}
public MyDataGridViewButtonColumn()
{
CellTemplate = new MyDataGridViewButtonCell();
}
}
public class MyDataGridViewButtonCell : DataGridViewButtonCell
{
protected override void OnContentClick(DataGridViewCellEventArgs e)
{
var column = this.OwningColumn as MyDataGridViewButtonColumn;
column?.RaiseContentClick(e);
base.OnContentClick(e);
}
}
Чтобы использовать его, вам нужно подписать событие через код, потому что событие принадлежит Column
, и вы не можете увидеть его в конструкторе:
var c1 = new MyDataGridViewButtonColumn() { HeaderText = "X" };
c1.ContentClick += (obj, args) => MessageBox.Show("X Cell Clicked");