Bonjour à tous,
pour vous replacer dans le contexte :
je débute en WPF et je dois adapter une application de Windows Form à WPF. Le projet en WF comportait une DataGridView, j'ai donc ajouté une DataGrid en WPF.
En ce qui concerne l'ajout simple de donnée au DataGrid, tout va bien, voilà le code utilisé qui marche très bien (si vous avez fait des recherches sur le net : oui je l'ai piqué!) :
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 public ObservableCollection<GameData> test { get; set; } public MainWindow() { InitializeComponent(); DataContext = this; AjoutLst(); } private void AjoutLst() { test = new ObservableCollection<GameData>(); GameData gameOne = new GameData("Overwatch", "Blizzard", "Blizzard"); test.Add(new GameData("Heroes of the Storm", "Blizzard", "Blizzard")); test.Add(new GameData("Starcraft", "Blizzard", "Blizzard")); test.Add(new GameData("World Of Warcraft", "Blizzard", "Blizzard")); test.Add(gameOne); } } public class GameData { private string _gamename; private string _creator; private string _publisher; public GameData(string gn, string cr, string pu) { _gamename = gn; _creator = cr; _publisher = pu; } public string GameName { get { return _gamename; } set { _gamename = value; } } public string Creator { get { return _creator; } set { _creator = value; } } public string Publisher { get { return _publisher; } set { _publisher = value; } } } }
Maintenant, je voudrais ajouter(ou modifier) une colonne.
Les valeurs de cette nouvelle colonne viennent d'un tableau de donnée que je peux changer/importer. J'essaie donc d'utiliser une seconde List ObservableCollection, plus facile à manipuler puisqu'il n'y a qu'à clear et rajouter toutes les données à l'aide d'une boucle for.
Au niveau XAML, je créer une nouvelle colonne et bind celle-ci. Mais les valeurs ne s'affichent pas!
Je suppose qu'il faudrait que cette nouvelle collection soit ajoutée en item, voir ItemSource, mais étant donné qu'il y a déjà "test" en ItemSource, pas possible, donc ça ne marche pas.. D'ailleurs, lorsque j'ai testé un Item.add, j'ai une erreur..
Voilà le code xaml :
Et voilà le code C# :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <DataGrid x:Name="dataGrid" Margin="161,66,118,68.8" AutoGenerateColumns="False" ItemsSource="{Binding test}"> <DataGrid.Columns> <DataGridTextColumn Header="Game Name" Binding="{Binding GameName}"/> <DataGridTextColumn Header="Creator" Binding="{Binding Creator}"/> <DataGridTextColumn Header="Publisher" Binding="{Binding Publisher}" /> <DataGridTextColumn Header="Param" Binding="{Binding Value}" /> </DataGrid.Columns> </DataGrid>
Existe-t-il une façon plus simple?
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72 public partial class MainWindow : Window { public ObservableCollection<GameData> test { get; set; } public ObservableCollection<Param> paramRecu { get; set; } string str_tst = "test"; public MainWindow() { InitializeComponent(); this.DataContext = this; AjoutLst(); } private void AjoutLst() { test = new ObservableCollection<GameData>(); paramRecu = new ObservableCollection<Param>(); GameData gameOne = new GameData("Overwatch", "Blizzard", "Blizzard"); test.Add(new GameData("Heroes of the Storm", "Blizzard", "Blizzard")); test.Add(new GameData("Starcraft", "Blizzard", "Blizzard")); test.Add(new GameData("World Of Warcraft", "Blizzard", "Blizzard")); test.Add(gameOne); for (int i = 0; i <= 3; i++) { paramRecu.Add(new Param(str_tst[i]+"")); } } } public class Param { string _value; public Param(string value) { _value = value; } public string Value { get { return _value; } set { _value = value; } } } public class GameData { private string _gamename; private string _creator; private string _publisher; public GameData(string gn, string cr, string pu) { _gamename = gn; _creator = cr; _publisher = pu; } public string GameName { get { return _gamename; } set { _gamename = value; } } public string Creator { get { return _creator; } set { _creator = value; } } public string Publisher { get { return _publisher; } set { _publisher = value; } } }
Vous voyez où est-ce que je me trompe?
Je remercie d'avance ceux qui se penchent sur mon problème!
Partager