【问题标题】:How to handle the click event of DataGridViewLinkColumnDataGridViewLinkColumn的点击事件如何处理
【发布时间】:2023-03-24 01:15:01
【问题描述】:

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

此代码似乎不起作用:

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

比如我有10行,每次点击“DataGridViewLinkColumn”列对应的每一行的内容,我应该都能处理。

谢谢

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    为什么不用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 ...
    }
    

    【讨论】:

    • 非常感谢。我曾想过类似的方法。但是,我想知道是否可以使用DataGridViewLinkColumn 来处理点击事件。
    • 这会处理 cell 点击。理想情况下,我认为我们希望附加到 link 点击。 (如何在不遍历每个链接单元格的情况下做到这一点,我仍在尝试找出自己!)
    • 我撒谎了,建议的解决方案确实会在 link 点击时触发,而不会在 cell 点击时触发。这似乎与单元格点击事件应该做的非常不一致,但是,嘿,这是我们 99% 的人想要的! (我向那些真正想要在 cell click 上举办活动的可怜人道歉...)social.msdn.microsoft.com/Forums/windows/en-US/…
    • 你应该做 DataGridViewImageCell cell = (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]) as DataGridViewImageCell;然后检查它是否不为空,此事件将为所有单元格触发,因此您只想处理具有该类型的单元格
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2011-07-24
      • 2010-12-17
      • 1970-01-01
      • 2011-10-11
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多