Bonjour,
J'ai un besoin relativement simple, et je n'arrive pas à m'en sortir du tout.
Pour faire simple, j'ai des élevages et des espèces :
Code csharp : 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 public class Espece { public int Code { get; set; } public string Nom { get; set; } public Espece(int code, string nom) { Code = code; Nom = nom; } } public class Elevage { public int Code { get; set; } public string Nom { get; set; } public Espece? Espece { get; set; } public Elevage(int code, string nom, Espece? espece) { Code = code; Nom = nom; Espece = espece; } }
Un élevage poste sur une espèce ou rien.
Maintenant, je veux afficher dans une DataGridView ma liste d'élevages, et sur chaque ligne, dans la colonne "Espèce" je souhaite avoir la liste de toutes les espèces, avec l'espèce de l'élevage sélectionnée, bien entendu.
Je souhaite aussi avoir les mécanismes de mise à jour de la liste des élevage avec possibilté :
- De rajotuer une ligne dans le DGV ce qui ajoute un élevage dans la liste
- De modifier une ligne dans le DGV ce qui a pour effet de modifier l'élevage correspondant
- De supprimer une ligne dans le DGV ce qui apour effet de supprimer l'élevage de la liste
=> Logiquement avec les databindings ça devrait plus ou moins pouvoir se faire tout seul...
Sauf que là, je plante dès le départ...
1/ Le "Code" de mes élevages (mais aussi des espèces) est un int. Ca comment bien, le DVG n'en veut pas, et je ne trouve aucun contrôle natif qui accepte un int. Suis-je obligé de créer une propriété "CodeStr" qui converti mon Code en string et inversement ?
2/ Dès que je tente de passer ma colonne "Espèce" en DataGridViewComboBoxColumn, dès que je lui met ma lisye d'espèces en datasource ça plante en disant que la cellule est du mauvais type...
Et là je nage en plein délire...
Voici mon code :
Code csharp : 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 public partial class Form1 : Form { public List<Espece> Especes = new(); public List<Elevage> Elevages = new(); public BindingList<Espece> listEspeces; public BindingList<Elevage> listElevages; public Form1() { InitializeComponent(); Especes.Add(new("1", "Cheval")); Especes.Add(new("2", "Poule")); Especes.Add(new("3", "Vache")); Elevages.Add(new("1", "Pré fleuri", Especes[0])); Elevages.Add(new("2", "Champ vert", Especes[2])); Elevages.Add(new("3", "Moulin doré", Especes[1])); listEspeces = new(Especes); listElevages = new(Elevages); dataGridView1.DataSource = listElevages; MessageBox.Show(dataGridView1.Columns.Count.ToString()); DataGridViewComboBoxColumn esp = dataGridView1.Columns[2] as DataGridViewComboBoxColumn; esp.ValueType = typeof(Espece); esp.DataSource = listEspeces; esp.DisplayMember = "Nom"; esp.ValueMember = "Code"; } }
Ca me dit que "La valeur DataGridViewComboBoxCell n'est pas valide" dans une popup à la con. Du coup j'ai même pas de point d'arrêt pour essayer de comprendre à quel endroit ça lui plait pas.
Je suis invité à gérer l'événement "DataError", mais je trouve rien d'intéressant dans l'eventargs de ce événement.
Je sèche...
Edit : J'ai essayé depuis la GUI d'ajouter un datasource... Jamais compris comment lier à une liste de valeurs.
Edit : J'ai trouvé sur un forum qu'il fallait utiliser BindingList<T> au lien d'un List<T> pour pouvoir gérer l'ajout et la suppression... mais j'en suis pas encore là...
Partager