我在C#有一个WinForm。DataGridView的其中一列的类型为DataGridViewLinkColumn。如何处理每列上的单击事件?
这段代码似乎不起作用:
private void UserDataTable_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//Code here
}例如,如果我有10行,每当我单击与列"DataGridViewLinkColumn“对应的每一行的内容时,我应该能够处理它。
谢谢
发布于 2012-10-22 20:26:31
为什么不使用CellClick事件处理函数,可以使用e.ColumnIndex引用每一行对应的列e.RowIndex,如下图所示:
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 ...
}发布于 2016-02-25 00:52:35
实际上,我相信Kiran使用CellContentClick是正确的。当您使用它时,它不会在单元格的空白区域被单击时触发,只有在其实际内容被单击时才会触发。因此,如果您有一个DataGridViewLinkColumn,它将在单击链接时触发。如果您有一个DataGridViewTextBoxColumn,它将在单元格中的文本被单击时触发。如果单击空白区域,它将不会触发,或者如果单元格为空,它将根本不会触发该单元格。
每当单元格的任何部分被单击时,都会触发CellClick事件。@chessofnerd,我不确定为什么这对你不起作用,但我已经测试过了,至少对我来说,它完全像预期的那样工作。
基兰,这让我想知道为什么你的CellContentClick一开始就不能工作。首先要做的是确保在网格视图的CellContentClick属性中添加了一个新的DataGridViewCellEventHandler。例如,如果我的网格视图标题为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();
}
}如果不为网格视图的CellContentClick事件分配一个新的事件处理程序并添加拼写完全相同的方法,它将不会触发。希望这能有所帮助!只需转到表单,单击网格视图,转到属性窗口中的Events选项卡,找到CellContentClick,然后双击它右侧的空白处,就可以轻松得多。VS将为您完成创建方法和为gridvew分配新的eventhandler的所有工作。然后,您只需进入该方法并添加一些代码和断点,以查看它是否触发,它应该是触发的。
https://stackoverflow.com/questions/13011407
复制相似问题