Bonjour,
J'ai un dans un DataGrid un "DataGridTemplateColumn" qui contient un TextBlock et une ComboBox.
L'idée est que dans mon Datagrid à l'affichage j'ai mon TextBlock qui affiche la valeur (qui provient d'une BDD) et que lorsque je click dessus, j'ai ma ComboBox pour éditer cette valeur.
À l'heure actuelle, j'arrive à faire ça, je peux éditer et update dans la BDD mais SEULEMENT pour la première ligne... Lorsque je veux modifier une autre ligne c'est toujours la comboBox de la première ligne qui est pris en compte !
XAML :
C#
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <DataGridTemplateColumn Header="Valideur" Width="Auto"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Name="textblock_valideur" Text="{Binding valideur}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <ComboBox x:Name="combobox_valideur" Height="Auto" ItemsSource="{StaticResource ValideurList}" SelectedItem="{Binding valideur, UpdateSourceTrigger=LostFocus}" DisplayMemberPath="{Binding Name}" DataContextChanged="comboBox_valideur_DataContextChanged"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn>
Suis-je peut-être dans la mauvaise direction avec ma façon de faire ?
Code : 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public static T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject { if (parent == null) { return null; } T foundChild = null; int childrenCount = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < childrenCount; i++) { var child = VisualTreeHelper.GetChild(parent, i); T childType = child as T; if (childType == null) { foundChild = FindChild<T>(child, childName); if (foundChild != null) break; } else if (!string.IsNullOrEmpty(childName)) { var frameworkElement = child as FrameworkElement; if (frameworkElement != null && frameworkElement.Name == childName) { foundChild = (T)child; break; } else { foundChild = FindChild<T>(child, childName); if (foundChild != null) { break; } } } else { foundChild = (T)child; break; } } return foundChild; } private void comboBox_valideur_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { object item = dataGrid.SelectedItem; textblox_valideur_save = FindChild<TextBlock>(this.dataGrid, "textblock_valideur"); MessageBox.Show(textblox_valideur_save.Text); }
Merci d'avance pour votre aide
Partager