Найти имя столбца сетки данных при нажатии на ячейку в сетке данных - PullRequest
5 голосов
/ 18 октября 2010

Я хотел найти заголовок столбца таблицы данных при нажатии на ячейку. Я использовал следующий код

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;

        }
     }

Но заголовок столбца не является прямым родителем для ячейки таблицы данных, поэтому он не может ее найти. есть ли другой выход ??

1 Ответ

8 голосов
/ 18 октября 2010

Исходный выбранный источник на самом деле не подключен к так называемому контейнеру элемента (см. 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;
}

Возможно, это не самое красивое из решений, но просто - король.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...