15

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

此代码似乎不起作用:

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

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

谢谢

4

2 回答 2

12

为什么不使用事件处理程序,您可以使用CellClick引用每一行的对应列,如下所示:e.RowIndexe.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 ...
}
于 2012-10-22T12:26:31.453 回答
6

实际上,我相信 Kiran 使用CellContentClick. 当您使用它时,它不会在单击单元格的空白区域时触发,只有在单击其实际内容时才会触发。因此,如果您有DataGridViewLinkColumn,单击链接时它将触发。如果你有一个DataGridViewTextBoxColumn它会在单击单元格中的文本时触发。如果单击空白区域,它将不会触发,或者如果单元格为空,则该单元格根本不会触发。

CellClick每当单击单元格的任何部分(包括空白部分)时都会触发该事件。@chessofnerd,我不确定为什么这对你不起作用,但我已经对此进行了测试以确保,至少对我来说它完全按预期工作。

Kiran,这让我想知道为什么你CellContentClick一开始就没有工作。想到的第一件事是确保您正在向DataGridViewCellEventHandlergridview 的 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 事件分配一个新的事件处理程序并添加拼写完全相同的方法,它将不会触发。希望这会有所帮助!只需转到您的表单,单击您的网格视图,转到“属性”窗口中的“事件”选项卡,找到 CellContentClick,然后双击它右侧的空间,就容易多了。VS 将为您完成创建方法和为 gridvew 分配新事件处理程序的所有工作。然后你只需要进入该方法并添加一些代码和一个断点来查看它是否正在触发,它应该是。

于 2016-02-24T16:52:35.400 回答