我在C#中有一个WinForm。 DataGridView
的其中一列属于DataGridViewLinkColumn
类型。如何处理每列上的点击事件?
此代码似乎不起作用:
private void UserDataTable_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//Code here
}
例如,如果我有10行,每当我点击与“DataGridViewLinkColumn
”列对应的每一行的内容时,我应该能够处理它。
由于
答案 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分配新的事件处理程序。然后你只需要进入方法并添加一些代码和断点来查看它是否会触发,它应该是。