如何处理DataGridViewLinkColumn的click事件

时间:2012-10-22 12:23:23

标签: c# winforms datagridview

我在C#中有一个WinForm。 DataGridView的其中一列属于DataGridViewLinkColumn类型。如何处理每列上的点击事件?

此代码似乎不起作用:

private void UserDataTable_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //Code here
        }

例如,如果我有10行,每当我点击与“DataGridViewLinkColumn”列对应的每一行的内容时,我应该能够处理它。

由于

2 个答案:

答案 0 :(得分:10)

为什么不使用CellClick事件处理程序,您可以使用e.RowIndex引用每行e.ColumnIndex的相应列,如下所示:

private void dataGridView1_CellClick(object sender,
    DataGridViewCellEventArgs e)
{
    // here you can have column reference by using e.ColumnIndex
    DataGridViewImageCell cell = (DataGridViewImageCell)
        dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];

    // ... do something ...
}

答案 1 :(得分:4)

实际上,我认为Kiran使用CellContentClick使其正确无误。使用此功能时,单击单元格的空白区域时,仅在单击其实际内容时才会触发。因此,如果您有DataGridViewLinkColumn,则会在点击链接时触发。如果您有DataGridViewTextBoxColumn,则会在单击单元格中的文本时触发。如果单击空白区域,它将不会触发,或者如果单元格为空,则它根本不会为该单元格触发。

单击单元格的任何部分(包括空单元格)时,将触发CellClick事件。 @chessofnerd,我不确定为什么那对你不起作用,但我已经对此进行了测试以确保,至少对我而言,它的工作完全符合预期。

Kiran,这让我想知道为什么你的CellContentClick首先没有工作。首先想到的是确保您将新的DataGridViewCellEventHandler添加到gridview的CellContentClick属性中。例如,如果我的gridview标题为gridVendorInfo,我将需要首先使用以下代码:

this.gridVendorInfo.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridVendorInfo_CellContentClick);

现在我需要在我的代码中使用那个确切的方法来实际捕获它:

private void gridVendorInfo_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            string vendorName = "";
            if (e.ColumnIndex == 0)
            {
                vendorName = gridVendorInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
            }
        }

如果你没有为gridview的CellContentClick事件分配一个新的事件处理程序并添加拼写完全相同的方法,它就不会被激活。希望这有帮助!只需转到表单,单击gridview,转到Properties窗口的Events选项卡,找到CellContentClick,然后双击它右侧的空格即可。 VS将为您创建方法并为gridvew分配新的事件处理程序。然后你只需要进入方法并添加一些代码和断点来查看它是否会触发,它应该是。