[VB 2008] Datagridview et datasource
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:
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 :
http://img535.imageshack.us/img535/3084/moche.png
Il faut savoir que je bind cette datagridview à une datatable par l'intermédiaire d'une bindingsource :
Code:
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.