簡體   English   中英

如何在 DataGridView 中為每列添加一個 CellContentClick 事件

[英]How to add a CellContentClick Event per Column in a DataGridView

是否可以為每列設置一個 CellContentClick 事件方法,例如作為 DataGridViewColumn 的方法。

如果 CellContentClick 僅針對此列而不是像普通 DataGridView.CellContentClick 那樣針對整個 DataGridView 發生,則此方法將運行。

我需要這個來推導 DataGridViewButtonColumn。 因此,如果有必要,可以將我自己的方法/屬性添加到此 DataGridViewColumn 中。

您可以為自定義列類型定義一個事件,然后覆蓋自定義單元格的OnContentClick並引發該列的事件。

請記住,要使用它,您需要通過代碼訂閱該事件,因為該事件屬於Column ,您無法在設計器中看到它。

例子

在這里,我創建了一個自定義按鈕列,您可以訂閱它的ContentClick事件。 這樣您就不需要檢查DataGridViewCellContentClick事件是否因單擊此按鈕列而引發。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM