Je cherche à savoir quelle est la meileure façon de faire pour contrôler l'état coché / décoché dans des DataGridViewCheckBoxColumn.

En effet je veux contrôler qu'il n'y a jamais plus d'une coche dans la colonne.
Si plus d'une, je passe le fond de la cellule en rouge.

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
 
        private void grd_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            bool bCurrentChecked = false;
            if (this.grd.CurrentCell.ColumnIndex == this.colChek.Index &&
                this.grd.IsCurrentCellDirty == true)
            {
                bCurrentChecked = Convert.ToBoolean(this.grd.SelectedCells[this.colChek.Index].EditedFormattedValue);
            }
            // si la bolonne contenant coche accédée
            if (this.grd.CurrentCell.ColumnIndex == this.colChek.Index)
            {
                int I = 0;
                for (int i = 0; i < this.grd.Rows.Count; i++)
                {
                    if (Convert.ToBoolean(this.grd.Rows[i].Cells[this.colChek.Index].Value) == true)
                    {
                        I++;
                    }
                }
                // si plus d'une coche
                if (I > 1 || (I == 1 && bCurrentChecked))
                {
                    for (int i = 0; i < this.grd.Rows.Count; i++)
                    {
                        // on passe en rouge les coches antérieures
                        if (Convert.ToBoolean(this.grd.Rows[i].Cells[this.colChek.Index].Value) == true)
                        {
                            this.grd.Rows[i].Cells[this.colChek.Index].Style.BackColor = Color.Red;
                        }
                        // et la coche courante
                        else if (Convert.ToBoolean(this.grd.SelectedCells[this.colChek.Index].EditedFormattedValue))
                        {
                            this.grd.SelectedCells[this.colChek.Index].Style.BackColor = Color.Red;
                        }
                        else
                        {
                            if (i % 2 == 0)
                                this.grd.Rows[i].Cells[this.colChek.Index].Style.BackColor = Color.AliceBlue;
                            else
                                this.grd.Rows[i].Cells[this.colChek.Index].Style.BackColor = Color.White;
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < this.grd.Rows.Count; i++)
                    {
                        if (i % 2 == 0)
                            this.grd.Rows[i].Cells[this.colChek.Index].Style.BackColor = Color.AliceBlue;
                        else
                            this.grd.Rows[i].Cells[this.colChek.Index].Style.BackColor = Color.White;
                    }
                }
            }
        }
A priori, ca fonctionnerait quand je coche, parce que quand on rentre dans l'evt, si
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
this.grd.Rows[i].Cells[this.colChek.Index].Value
n'est pas mis à jour,
par contre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
this.grd.SelectedCells[this.colChek.Index].EditedFormattedValue
est bien true.

Le problème c'est que quand je rentre dans l'evt pour une action de décochage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
this.grd.Rows[i].Cells[this.colChek.Index].Value
est cette fois déjà à jour.

Alors je peux tester de quelle action il s'agit, mais est-ce que c'est bien ainsi qu'il faut faire ?