我在C#中有一个WinForm。其中一列 DataGridView
是类型 DataGridViewLinkColumn
。如何处理每列上的click事件?
此代码似乎不起作用:
private void UserDataTable_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//Code here
}
例如,如果我有10行,每当我点击与该列对应的每一行的内容时DataGridViewLinkColumn
“,我应该能够处理它。
谢谢
你为什么不用 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 ...
}
你为什么不用 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 ...
}
实际上,我相信Kiran使用它是正确的 CellContentClick
。使用此选项时,单击单元格的空白区域时,仅在单击其实际内容时才会触发。所以,如果你有一个 DataGridViewLinkColumn
,点击链接时会触发。如果你有 DataGridViewTextBoxColumn
单击单元格中的文本时将触发。如果单击空白区域,则不会触发,或者如果单元格为空,则根本不会为该单元格触发。
该 CellClick
单击单元格的任何部分时会触发事件,包括空单元素。 @chessofnerd,我不确定为什么这对你不起作用,但我已经对此进行了测试以确保,至少对我而言,它的工作方式完全符合预期。
基兰,这让我想知道为什么你的 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分配新的事件处理程序。然后你只需要进入方法并添加一些代码和一个断点来查看它是否正在触发,它应该是。