2010-10-18 5 views
4

Je voulais trouver l'en-tête de colonne DataGrid lorsqu'une cellule est cliqué .. i utilisé le code suivanttrouver le nom de la colonne DataGrid lorsqu'une cellule est cliqué dans DataGrid

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; 

     } 
    } 

Mais l'en-tête de la colonne n'est pas un parent direct pour la cellule de DataGrid donc elle n'est pas capable de le trouver. Y a-t-il un autre moyen?

Répondre

7

La source d'origine étant cliqué est pas vraiment connecté à la soi-disant conteneur d'éléments (voir le DataGrid.ItemContainerGenerator) afin d'essayer de vous travailler haut dans la hiérarchie, bien qu'une bonne idée ne vous mènera à bien.

une solution simple tout à fait ridicule, vous pouvez utiliser la connaissance de celui-ci étant seulement une cellule l'utilisateur clique dessus et donc en utilisant cette cellule cliquée pour récupérer la colonne, comme ceci:

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; 
} 

Ce peut-être ain' t la plus jolie des solutions mais simple est roi.

J'espère que ça aide!

+0

Cela fonctionne comme un charme .. c'est ce que je cherche exactement .. oui simple est roi .. :) – prem

Questions connexes