Bonjour à tous,
Je suis face à un problème sur lequel je bloque depuis plusieurs jours.
Voici le contexte :
J'ai une DataGridView avec 2 colonnes, Communes et Sections. Ces 2 colonnes sont des DataGridViewComboBoxColumn :
- la première est liée à une source de données "liste de communes"
- l'autre est liée à une source de données "liste de sections"
La relation entre les communes et les sections est qu'une commune peut contenir plusieurs sections et qu'une section ne se trouve que dans une seule commune.
Le principe que je dois avoir est que pour chaque ligne distincte du DataGridView, je filtre la liste des sections (2ème colonne) suivant la commune choisie (1ère colonne). Pour ce faire, je filtre la BindingSource des sections suivant l'identifiant de commune dans l'événement CellBeginEdit de ma DataGridView.
Donc concrètement, lorsque je clique pour éditer une section, je filtre à ce moment-là les sections relatives à la commune choisie.
Ce principe fonctionne bien mais me montre ses faiblesses lorsque j'ai plusieurs lignes de communes différentes dans mon tableau.
Supposons que j'ai les données communes (lettres) et sections (chiffres) suivantes :
A 1
A 2
A 3
B 4
B 5
B 6
C 7
C 8
C 9
Dans ma DataGridView, j'ai les lignes suivantes :
A 1
A 2
B 5
C 7
C 8
Si je clique sur la section de la ligne 2 (2) puis sur la section de la ligne 3 (5), le contenu de la section de la ligne 2 disparait. Pourtant si je retourne sur la section de la ligne 2, son contenu se réaffiche, par contre cette fois c'est le contenu de la section de la ligne 3 qui disparait...
Ma théorie est que lorsque je passe en revue les sections par ligne de mon tableau, le filtre sur la ligne active est bien affecté, mais du coup les lignes où la commune est différente de la ligne active n'affiche plus correctement la section à cause du filtre, car le BindingSource de la colonne des sections est commun.
Dans mon exemple, si je me positionne sur la section de la ligne 2, la combobox doit lister les sections 1, 2, 3 pour la commune A. Si je passe sur la ligne 3, la combobox doit lister les sections 4, 5 et 6 pour la commune B. La combobox active est correcte, mais les sections des autres lignes sont vidées parce que la BindingSource est filtrée de manière à exclure les sections 1, 2, 3, 7, 8 et 9.
J'espère que mon explication est suffisamment claire, ce n'est pas évident à expliquer par écrit ce qui saute aux yeux lorsque le programme tourne.
Ma question est de savoir comment je peux éviter ce comportement...
Là je me lance dans une surcharge d'une DataGridViewComboBoxColumn, mais je n'arrive à rien et je commence même à patauger lol
Merci d'avance aux âmes charitables qui m'aideront à me sortir de là :-)
Partager