Bonjour,

Je cherche à créer une datagridview directement par le code, qui se situe dans une form elle-même contenant une tabcontrol, comme illustré ci-dessous.

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
Public class Form1
 
    Private WithEvents Mygrid As DataGridView
    Friend WithEvents Arbre As DataGridViewImageColumn
    Friend WithEvents Indic, Number, Task, Unit As DataGridViewTextBoxColumn
 
Public Sub Tableau5()
 
        Me.Arbre = New DataGridViewImageColumn
        Me.Arbre.HeaderText = "Tree"
        Arbre.Width = 25
 
        Me.Indic = New DataGridViewTextBoxColumn
        Me.Indic.HeaderText = "Indice"
        Me.Indic.Width = 5
        Me.Indic.Visible = False
 
        Me.Number = New DataGridViewTextBoxColumn
        Me.Number.HeaderText = "Numéro"
        Me.Number.Width = 33
 
        Me.Task = New DataGridViewTextBoxColumn
        Me.Task.HeaderText = "Tache"
        Me.Task.Width = 440
 
        Me.Unit = New DataGridViewTextBoxColumn
        Me.Unit.HeaderText = "Unité"
        Me.Unit.Width = 50
 
        Mygrid = New DataGridView
        Me.Controls.Add(Mygrid)
        Mygrid.Parent = TabPage2
        Mygrid.Location = New Point(10, 10)
        Mygrid.Size = New Size(800, 500)
        Mygrid.ColumnHeadersVisible = False
        Mygrid.ReadOnly = True
        Mygrid.RowHeadersVisible = False
        Mygrid.AllowUserToAddRows = False
 
        Mygrid.Columns.AddRange(Me.Arbre, Me.Indic, Me.Number, Me.Task, Me.Unit)
 
        Mygrid.DataSource = bindingTS
 
        Mygrid.Columns.Item(2).DataPropertyName = "Linenumber"
        Mygrid.Columns.Item(3).DataPropertyName = "Description"
        Mygrid.Columns.Item(4).DataPropertyName = "Unit"
        Mygrid.Columns("Linenumber").Visible = False
        Mygrid.Columns("Description").Visible = False
        Mygrid.Columns("QuantityPlanning").Visible = False
        Mygrid.Columns("QuantityPapyrus").Visible = False
        Mygrid.Columns("Unit").Visible = False
        Mygrid.Columns("Avancement").Visible = False
        Mygrid.Columns("PricePers").Visible = False
        Mygrid.Columns("PriceMat").Visible = False
 
    End Sub
 
End Class
Screenshot :



Il faut savoir que je bind cette datagridview à une datatable par l'intermédiaire d'une bindingsource :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Mygrid.DataSource = bindingTS
Jusqu'à là pas de problème, je remplis bien mes colonnes comme affiché précédement, mais le soucis ce sont les indices des colonnes.

En effet, je devrais avoir :
la colonne d'indice 0 qui devrait être ma colonne "Arbre"
la colonne d'indice 1 qui devrait être ma colonne "Indic"
la colonne d'indice 2 qui devrait être ma colonne "Number"
la colonne d'indice 3 qui devrait être ma colonne "Task"
la colonne d'indice 4 qui devrait être ma colonne "Unit"

or ce n'est pas le cas, les indices changent tout seul et mes colonnes se mélangent avec les colonnes cachées de la datasource, même si visuellement elle sont dans le bon ordre.

Donc je ne comprend pas pourquoi je ne peux pas avoir mes colonnes en indice 0,1,2,3,4 etc, et les autres colonnes(celle de la datasource) au-delà des colonnes que j'ai créé moi-même.

Par ailleurs existe-t-il un moyen d'attribuer le DataPropertyName directement avec la colonne souhaitée dans la datatable, sans avoir ajouter la datatable à la datasource de la datagridview.

Pour terminer, j'ai également fait un autre essai, en créant une datagridview en mode création, ainsi que mes colonnes toujours en mode création (dans les options de la datagridview), mais j'ajoute la datasource par le code, et à ce moment là les colonnes de la datasource sont bien en indice après les indices des colonnes ajoutées par le mode création.

Bug windows ou y a-t-il une explication ? Je pense que je dois faire quelquechose de mal, mais je n'arrive pas à trouver.

Merci de l'aide d'avance.