从鼠标位置获取 DataGrid 单元格

Posted

技术标签:

【中文标题】从鼠标位置获取 DataGrid 单元格【英文标题】:Get DataGrid cell from mouse position 【发布时间】:2016-08-24 10:15:09 【问题描述】:

我想在MouseDown 事件中获得DataGrid 的点击单元格。到目前为止,我还没有成功。 我试过了

dg.CurrentCell - 包含上一个点击的单元格

dg.GetChildAt(...) - 不起作用,因为单元格未列为 DataGrid 的子项

【问题讨论】:

您是否提出了问题并立即回答,来自msdn 网站的回答,以及简单的谷歌搜索上的十几个链接? @Claudius 您是否注意到所有 google 搜索结果都引用 DataGridView 而不是 DataGrid?如果您将 -datagridview 添加到搜索中,则每个结果都是针对 WPF 等等... 但是如果两者都抓取相同的事件Mouse.MouseDown有什么区别? 好吧,按钮和数据网格视图有什么区别?他们都有MouseDown-event...DataGridViewDataGrid 增强了很多,也许这也是为什么在论坛或 SO 上没有太多关于DataGrid 的帮助 @Claudius 我必须承认:当搜索标题并看到 DataGridView.HitTest 存在时,您可能会想到 DataGrid.HitTest 值得查找,但对于任何搜索标题的人来说-datagridview -wpf(获取DataGrid 的结果)这个问题可能会有所帮助 【参考方案1】:

您可以使用HitTest 来获取鼠标所在的单元格。 (不依赖于MouseDown-Event,只需要鼠标相对于DataGrid的位置)

示例:

Private Sub dg_MouseDown(sender As Object, e As MouseEventArgs) Handles dg.MouseDown
    Dim htinfo As HitTestInfo = dg.HitTest(new Point(e.X, e.Y))

    If htinfo.Type = HitTestType.Cell Then
        Dim clickedCell As DataGridCell = dg.Item(htinfo.Row, htinfo.Column)
    End If
End Sub

【讨论】:

不应将clickedCell 的类型设为DataGridViewCell @CrazyIvan1974 不幸的是,我被绑定到了古老的DataGrid WinForms 控件。如果它也适用于DataGridView,我会很高兴 是的,哇,我错了。我看到 NOW 这个话题与DataGridView 无关。吹过了主要话题。这确实适用于DataGridView【参考方案2】:
   Private Sub DataGridView1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseDown
    Try
        With DataGridView1
            .Rows(.HitTest(e.X, e.Y).RowIndex).Selected = True
        End With
    Catch
    End Try
End Sub

【讨论】:

以上是关于从鼠标位置获取 DataGrid 单元格的主要内容,如果未能解决你的问题,请参考以下文章

WPF Datagrid在鼠标双击时编辑单元格

DataGrid 用鼠标拖动改变列宽,怎么做

在excel中如何用鼠标拖动实现单元格内容的复制与移动

如何获取gridview单元格的值

求wpf代码,鼠标移上列表某列单元格时,用tooltips展示与该单元格数据相关的一个列表(数据是个一集合)

easyui 单元格超出鼠标放上弹出全部