Bonjour,
J'ai un petit soucis sur la gestion des événements dans des cellules de type DataGridViewComboBoxCell.
Pour faciliter la saisie de l'utilisateurs, lorsque celui-ci saisie une valeur dans une des cellules de ma colonne, toutes les autres cellules de ma colonne prenne la même valeur.
Juste que là pas de difficulté, je joue avec le selectedIndexChanged.
Mon problème est que si je change la valeur d'une cellule (n'importe laquelle) de la colonne, pour une valeur vide (index = 0), et qu'ensuite je veux modifier une autre cellule de la colonne, d'autres événements selectedIndexChanged se déclenche (avant que je ne change de valeur, sans explications) et provoque un bug d'affichage :
La cellule vidé reprend sa valeur d'origine et la liste déroulante prend un fond noir.
Voici le code source en vigeur, il faut prendre en compte que les events sont créé à la voler dans l'event showing
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 private void datagridview_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { try { if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)) { ComboBox comboCell = (ComboBox)e.Control ; comboCell.SelectedIndexChanged -= new EventHandler(ComboBox_SelectedIndexChanged); comboCell.BackColor = Color.White; comboCell.SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged); } else if (e.Control.GetType() == typeof(DataGridViewTextBoxEditingControl)) { TextBox txbCell = (TextBox)e.Control; txbCell.TextChanged -= new EventHandler(TextBox_TextChanged); txbCell.TextChanged += new EventHandler(TextBox_TextChanged); } } catch(Exception ex) { WinUtilsLib.Diagnostics.Log.WriteError(ex.InnerException + ex.Message + ex.Source + ex.StackTrace); } } private void ComboBox_SelectedIndexChanged(object sender, EventArgs e) { try { if (((ComboBox)sender).SelectedItem != null && ((ComboBox)sender).SelectedIndex>0) { if (((DataGridViewColumn)datagridview.Columns[datagridview.SelectedCells[0].ColumnIndex]).Tag.ToString() == "#FirstChoice") { for (int i = 0; i < datagridview.RowCount; i++) { if (((DataGridViewComboBoxCell)datagridview.Rows[i].Cells[datagridview.SelectedCells[0].ColumnIndex]).Value == DBNull.Value) { (datagridview.Rows[i].Cells[datagridview.SelectedCells[0].ColumnIndex]).Value = ((ComboBox)sender).SelectedValue; } } } } } catch (Exception ex) { WinUtilsLib.Diagnostics.Log.WriteError(ex.InnerException + ex.Message + ex.Source + ex.StackTrace); } }
Partager