Hello,

Je suis en train de devenir fou et ne sais plus où chercher la cause de ce comportement étrange...
Dans un formulaire, j'ai un TabControl avec 2 TabPages qui contiennent chacun un DataGridView et chaque DataGridView contient une DataGridViewCheckBoxColumn. Dans le premier datagridview, je peux la cocher via la code. Dans le second, pas moyen... C'est pourtant le même code partout (ou alors il est temps que j'aille chez l'opthalmo...).

Voici la définition du TabControl, de ces TabPages et des DataGridView :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
'
        'tcPromoDetail
        '
        Me.tcPromoDetail.Controls.Add(Me.tpDemo)
        Me.tcPromoDetail.Controls.Add(Me.tpOwn)
        Me.tcPromoDetail.Dock = System.Windows.Forms.DockStyle.Fill
        Me.tcPromoDetail.Location = New System.Drawing.Point(0, 184)
        Me.tcPromoDetail.Name = "tcPromoDetail"
        Me.tcPromoDetail.SelectedIndex = 0
        Me.tcPromoDetail.Size = New System.Drawing.Size(1004, 434)
        Me.tcPromoDetail.TabIndex = 6
        '
        'tpDemo
        '
        Me.tpDemo.Controls.Add(Me.dgvPromoDetailDemo)
        Me.tpDemo.Controls.Add(Me.tlpDemo)
        Me.tpDemo.Location = New System.Drawing.Point(4, 22)
        Me.tpDemo.Name = "tpDemo"
        Me.tpDemo.Padding = New System.Windows.Forms.Padding(3)
        Me.tpDemo.Size = New System.Drawing.Size(996, 408)
        Me.tpDemo.TabIndex = 0
        Me.tpDemo.Text = "Demo"
        Me.tpDemo.UseVisualStyleBackColor = True
        '
        'tpOwn
        '
        Me.tpOwn.Controls.Add(Me.dgvPromoDetailOwn)
        Me.tpOwn.Controls.Add(Me.tcOwn)
        Me.tpOwn.Controls.Add(Me.tlpOwn)
        Me.tpOwn.Location = New System.Drawing.Point(4, 22)
        Me.tpOwn.Name = "tpOwn"
        Me.tpOwn.Padding = New System.Windows.Forms.Padding(3)
        Me.tpOwn.Size = New System.Drawing.Size(996, 408)
        Me.tpOwn.TabIndex = 1
        Me.tpOwn.Text = "Own"
        Me.tpOwn.UseVisualStyleBackColor = True
        '
        'dgvPromoDetailDemo
        '
        Me.dgvPromoDetailDemo.AllowUserToAddRows = False
        Me.dgvPromoDetailDemo.AllowUserToDeleteRows = False
        Me.dgvPromoDetailDemo.AllowUserToResizeRows = False
        DataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
        Me.dgvPromoDetailDemo.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle1
        Me.dgvPromoDetailDemo.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
        Me.dgvPromoDetailDemo.Dock = System.Windows.Forms.DockStyle.Fill
        Me.dgvPromoDetailDemo.Location = New System.Drawing.Point(3, 38)
        Me.dgvPromoDetailDemo.Name = "dgvPromoDetailDemo"
        Me.dgvPromoDetailDemo.ReadOnly = True
        Me.dgvPromoDetailDemo.RowHeadersVisible = False
        Me.dgvPromoDetailDemo.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
        Me.dgvPromoDetailDemo.Size = New System.Drawing.Size(990, 367)
        Me.dgvPromoDetailDemo.TabIndex = 0
        '
        'dgvPromoDetailOwn
        '
        Me.dgvPromoDetailOwn.AllowUserToAddRows = False
        Me.dgvPromoDetailOwn.AllowUserToDeleteRows = False
        Me.dgvPromoDetailOwn.AllowUserToResizeRows = False
        DataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer))
        Me.dgvPromoDetailOwn.AlternatingRowsDefaultCellStyle = DataGridViewCellStyle2
        Me.dgvPromoDetailOwn.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
        Me.dgvPromoDetailOwn.Dock = System.Windows.Forms.DockStyle.Fill
        Me.dgvPromoDetailOwn.Location = New System.Drawing.Point(3, 38)
        Me.dgvPromoDetailOwn.Name = "dgvPromoDetailOwn"
        Me.dgvPromoDetailOwn.ReadOnly = True
        Me.dgvPromoDetailOwn.RowHeadersVisible = False
        Me.dgvPromoDetailOwn.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
        Me.dgvPromoDetailOwn.Size = New System.Drawing.Size(990, 367)
        Me.dgvPromoDetailOwn.TabIndex = 1
Mis à part les noms et les tabindex, je ne vois aucune différence entre les 2 TabPages ni entre les deux DataGridView.

Voici comment les colonnes sont ajoutées aux DataGridView :
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    Private Sub InitDgvDemo()
        dgvPromoDetailDemo.AutoGenerateColumns = False
        dgvPromoDetailDemo.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
 
        Dim index As Integer
 
        With dgvPromoDetailDemo.Columns
            index = .Add("dgvcId", "Id")
            .Item(index).DataPropertyName = "Id"
            .Item(index).Visible = False
 
            index = .Add("dgvcCodeDemo", "Code")
            .Item(index).DataPropertyName = "CodeDemo"
 
            index = .Add("dgvcDemoName", "Name")
            .Item(index).DataPropertyName = "DemoName"
 
            index = .Add("dgvcVbn", "VBN")
            .Item(index).DataPropertyName = "Vbn"
 
            index = .Add("dgvcPercentage", "Percentage")
            .Item(index).DataPropertyName = "Percentage"
 
            index = .Add("dgvcPercentType", "Type")
            .Item(index).DataPropertyName = "PercentType"
 
            index = .Add("dgvcDesc", "Description")
            .Item(index).DataPropertyName = "Description"
 
            index = .Add("dgvcNote", "Note")
            .Item(index).DataPropertyName = "Note"
 
            index = .Add("dgvcBuyingDept", "Buying Dept.")
            .Item(index).DataPropertyName = "BuyingDepartment"
 
            index = .Add("dgvcListType", "Type of list")
            .Item(index).DataPropertyName = "ListType"
 
            index = .Add("dgvcProductCount", "Product Count")
            .Item(index).DataPropertyName = "ProductCount"
 
            Dim col As New DataGridViewCheckBoxColumn()
            col.Name = "dgvcEncoded"
            col.HeaderText = "Encoded"
            index = .Add(col)
            .Item(index).DataPropertyName = "Encoded"
 
            Dim btnColumn As New DataGridViewDisableButtonColumn
            btnColumn.Name = "dgvcBrowse"
            btnColumn.HeaderText = ""
            btnColumn.Text = "Get List"
            btnColumn.UseColumnTextForButtonValue = True
            .Add(btnColumn)
        End With
    End Sub
 
    Private Sub InitDgvOwn()
        dgvPromoDetailOwn.AutoGenerateColumns = False
        dgvPromoDetailOwn.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
 
        Dim index As Integer
 
        With dgvPromoDetailOwn.Columns
            index = .Add("dgvcId", "Id")
            .Item(index).DataPropertyName = "Id"
            .Item(index).Visible = False
 
            index = .Add("dgvcDepartment", "Department")
            .Item(index).DataPropertyName = "Department"
 
            index = .Add("dgvcBrand", "Brand")
            .Item(index).DataPropertyName = "Brand"
 
            index = .Add("dgvcBrand", "Brand")
            .Item(index).DataPropertyName = "BrandName"
 
            index = .Add("dgvcPercentage", "Percentage")
            .Item(index).DataPropertyName = "Percentage"
 
            index = .Add("dgvcPercentType", "Type")
            .Item(index).DataPropertyName = "PercentType"
 
            index = .Add("dgvcComment", "Description")
            .Item(index).DataPropertyName = "Description"
 
            index = .Add("dgvcNote", "Note")
            .Item(index).DataPropertyName = "Note"
 
            index = .Add("dgvcSeasons", "Seasons")
            .Item(index).DataPropertyName = "SeasonsRange"
 
            index = .Add("dgvcBuyingDept", "Buying Dept.")
            .Item(index).DataPropertyName = "BuyingDepartment"
 
            index = .Add("dgvcListType", "Type of list")
            .Item(index).DataPropertyName = "ListType"
 
            index = .Add("dgvcProductCount", "Product Count")
            .Item(index).DataPropertyName = "ProductCount"
 
            Dim col As New DataGridViewCheckBoxColumn()
            col.Name = "dgvcEncoded"
            col.HeaderText = "Encoded"
            index = .Add(col)
            .Item(index).DataPropertyName = "Encoded"
 
            Dim btnColumn As New DataGridViewDisableButtonColumn
            btnColumn.Name = "dgvcBrowse"
            btnColumn.HeaderText = ""
            btnColumn.Text = "Get List"
            btnColumn.UseColumnTextForButtonValue = True
            .Add(btnColumn)
        End With
    End Sub
Là encore aucune différence. Bien sûr, toutes les colonnes ne sont pas identiques (sinon autant faire une seule grille) mais la colonne qui pose problème (vers la fin dans les 2 sub) nommée "dgvcEncoded" est créée pareil pour les deux au caractère près.

Et pour finir, voici ce qu'il se passe lorsqu'un utilisateur double-clique sur cette case (me demandez pas pourquoi il faut que ce soit un double-clique et pourquoi pas plutôt simplement autoriser l'édition du DGV pour voir cocher la case normalement, c'est comme ça que cela a été demandé) :
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
    Private Sub dgvPromoDetailDemo_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvPromoDetailDemo.CellDoubleClick
        If e.RowIndex < 0 OrElse
            Not e.ColumnIndex = dgvPromoDetailDemo.Columns("dgvcEncoded").Index OrElse
            CBool(dgvPromoDetailDemo.Rows(e.RowIndex).Cells("dgvcEncoded").Value) = True OrElse
            Not Promo.DTO.IsDemoEncoded OrElse
            dgvPromoDetailDemo.SelectedRows.Count > 1 Then
            Exit Sub
        End If
 
        dtd.FlagAsEncoded()
        dgvPromoDetailDemo.Rows(e.RowIndex).Cells("dgvcEncoded").Value = True
    End Sub
 
    Private Sub dgvPromoDetailOwn_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvPromoDetailOwn.CellDoubleClick
        If e.RowIndex < 0 OrElse
            Not e.ColumnIndex = dgvPromoDetailOwn.Columns("dgvcEncoded").Index OrElse
            CBool(dgvPromoDetailOwn.Rows(e.RowIndex).Cells("dgvcEncoded").Value) = True OrElse
            Not Promo.DTO.IsOwnEncoded OrElse
            dgvPromoDetailOwn.SelectedRows.Count > 1 Then
            Exit Sub
        End If
 
        dto.FlagAsEncoded()
        dgvPromoDetailOwn.Rows(e.RowIndex).Cells("dgvcEncoded").Value = True
    End Sub
Là encore, à part le nom du dgv, rien ne change non plus. Pourtant, en mode pas à pas, si je mets le curseur de la souris sur la propriété Value de la dernière ligne de la sub alors que le curseur de debug est sur le sur end sub, dans le premier cas, je vois que la valeur est bien passée à True mais dans le second, elle reste sur False...

Je ne sais plus quoi vérifier d'autre à part tout ce que je viens de mettre ici. Quelqu'un aurait-il une idée ??