Bonjour
Je cherche l'origine d'un probleme qui se produit dans un DataGridViewComboBoxColumn sous certaines condition
1- J'ai deux DataGridViewComboBoxColumn bindés sur deux DataView différent !!
Ces combos sont Pays et Regions
2- Au départ ces combos affichent des cellules vides
3- Je selectionne un pays dans Pays : tout va bien
J'intercepte l'event de modification de mon combo de la maniere montrée dans le code ci apres
Lors de la selection d'un pays, je change le filtre du DataView des régions pour ne plus afficher que les régions du pays.
Au premier coup ca va bien, je peux selectionner les regions
Si apres je change de pays, au moment je passe la souris sur le combo des Regions, je ramasse une bordée d'erreurs DataGridViewComboCell is not Valid avant que tout se stabilise
Je suppose que je devrais faire un refresh ou un rebinding quelque part mais je ne vois pas vraiment quoi ?
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 bool noEvent=false; // *********************************************************************************** private void dgv1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (noEvent) { return; } ComboBox combo = e.Control as ComboBox; if (combo != null) { // Remove an existing event-handler, if present, to avoid // adding multiple handlers when the editing control is reused. combo.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged); // Add the event handler. combo.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged); } } // *********************************************************************************** private void ComboBox_SelectedIndexChanged(object sender, EventArgs e) { noEvent = true; ComboBox combo = (ComboBox)sender; if (combo.SelectedItem == null) { return; } DataRowView cRowV = (DataRowView)combo.SelectedItem; DataRow cRow = cRowV.Row; if (combo.DisplayMember == "Pays") { curPays = cRow["Pays"].ToString(); curPaysID = cRow["PaysID"].ToString(); string s = string.Format("PaysID='{0}'", curPaysID); dvRegion.RowFilter = ""; dvRegion.RowFilter = s; noEvent = false; return; } if (combo.DisplayMember == "Region") { curReg = cRow["Region"].ToString(); return; } }
Partager