[英]How to add a CellContentClick Event per Column in a DataGridView
是否可以為每列設置一個 CellContentClick 事件方法,例如作為 DataGridViewColumn 的方法。
如果 CellContentClick 僅針對此列而不是像普通 DataGridView.CellContentClick 那樣針對整個 DataGridView 發生,則此方法將運行。
我需要這個來推導 DataGridViewButtonColumn。 因此,如果有必要,可以將我自己的方法/屬性添加到此 DataGridViewColumn 中。
您可以為自定義列類型定義一個事件,然后覆蓋自定義單元格的OnContentClick
並引發該列的事件。
請記住,要使用它,您需要通過代碼訂閱該事件,因為該事件屬於Column
,您無法在設計器中看到它。
例子
在這里,我創建了一個自定義按鈕列,您可以訂閱它的ContentClick
事件。 這樣您就不需要檢查DataGridView
的CellContentClick
事件是否因單擊此按鈕列而引發。
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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.