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.
Screenshot :
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
Il faut savoir que je bind cette datagridview à une datatable par l'intermédiaire d'une bindingsource :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Mygrid.DataSource = bindingTS
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.
Partager