当在 datagrid 中点击单元格时,如何找到 datagrid 列的名称?

5

当单元格被点击时,我想找到数据网格列标题... 我使用了以下代码

private void grid1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  {    
    DependencyObject dep = (DependencyObject)e.OriginalSource;
       while ((dep != null) &&     
            !(dep is DataGridColumnHeader))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }

    if (dep == null)
        return;

    if (dep is DataGridColumnHeader)
    {
        DataGridColumnHeader columnHeader = dep as DataGridColumnHeader;

        if (columnHeader.ToString() == "Adv Comments")
        {
        MessageBox.Show(columnHeader.Column.Header.ToString());

        }
    }
    if (dep is DataGridCell)
        {
            DataGridCell cell = dep as DataGridCell;

        }
     }

但是列标题不是数据网格单元格的直接父级,因此无法找到它。是否有其他方法可以解决?

如果 (columnHeader.Content.ToString() == "Adv Comments"),那么你的错误就会被修复。 - Chandraprakash
1个回答

8

被点击的原始资源并没有真正连接到所谓的项容器(请参见DataGrid.ItemContainerGenerator),因此尝试向上工作虽然是一个好主意,但不会让你走得太远。

对于一个非常愚蠢简单的解决方案,您可以利用它只有一个单元格被点击的知识,并因此使用该单元格来检索列,如下所示:

private void DataGrid_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    // First check so that we´ve only got one clicked cell
    if(myGrid.SelectedCells.Count != 1)
        return;

    // Then fetch the column header
    string selectedColumnHeader = (string)myGrid.SelectedCells[0].Column.Header;
}

也许这不是最美观的解决方案,但简单就是王道。 希望能帮到你!

非常好用,这正是我正在寻找的东西。是的,简单就是王道。 :) - prem
请谨慎使用此代码。对于左键点击,这将有效,但对于右键点击,所选单元格可能不同,而右键点击标题则会显示错误的列名。 - Chandraprakash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接