Bonjour,
je viens une nouvelle fois à vous en espérant que vous aurez la réponse à mon problème. Il y a quelques temps je suis venu ici car j'avais un problème pour sélectionner une cellule bien précise d'un datagrid et lui mettre un background.
Il en est ressortie (avec un peu de remaniement de code de ma par) une méthode qui me récupère ma cellule selon la ligne et la colonne du datagrid appelé :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 private DataGridCell recupDataGridCell(DataGrid datagrid, int ligne,int colonne) { MessageBox.Show("ok"); // Recherche de la ligne if ((datagrid == null)||(VisualTreeHelper.GetChildrenCount(datagrid) == 0)) return null; DataGridRowsPresenter drp = FindFirstOfType<DataGridRowsPresenter>(datagrid); if ((drp == null) || (VisualTreeHelper.GetChildrenCount(drp) < ligne)) return null; DataGridRow dr = VisualTreeHelper.GetChild(drp, ligne) as DataGridRow; // Recherche du champs if ((dr == null) || (VisualTreeHelper.GetChildrenCount(dr) == 0)) return null; DataGridCellsPanel cellP = FindFirstOfType<DataGridCellsPanel>(dr); if ((cellP == null) || (VisualTreeHelper.GetChildrenCount(cellP) < colonne)) return null; DataGridCell cell = VisualTreeHelper.GetChild(cellP, colonne) as DataGridCell; return cell; } private T FindFirstOfType<T>(DependencyObject item) where T : DependencyObject { // Si notre item est du type recherché, on le renvoie if (item is T) return item as T; for (int i = 0; i < VisualTreeHelper.GetChildrenCount(item); i++) { T x = FindFirstOfType<T>(VisualTreeHelper.GetChild(item, i)); if (x != null) return x; } return null; }
Ce code marche très bien si je dois utiliser une datagrid de 5-6 lignes. Cependant quand je dois utiliser des datagrids d'une cinquantaine de ligne, il commence à y avoir un bug. En effet, lorsqu'on utilise la scrollbar pour voir les lignes plus bas puis qu'on remonte la scrollbar, les cellules coloriées ne sont plus les mêmes. Je pense que le problème viens du fait que je récupère mes cellules avec un VisualTreeHelper qui va regarder ce qu'on voit dans notre affichage à un instant donné (les cellules que je récupère doivent être dynamique je suppose par rapport à mon affichage).
Ce n'est bien sur qu'une supposition mais j'avoue que si qqn avait une idée sur comment résoudre ce problème, cela me serait d'une grande aide.
Merci
Partager