Lorsque l'on charge un DataSet dans une DataGrid avec la propiété DataSource, est-il possible de changer le texte des entêtes des colonnes ?
J'ai essayé la propriété DataGridView.Columns(i).Name = "Texte", cela ne fonctionne que si DataGridView.DataSource = Nothing.
On peut changer le nom des colonnes dans la requête, mais celle-ci devient plus longue et compliquée (on ne peut pas utiliser la forme SELECT [Nom de Table].*, il faut ennoncer tous les champs nécessaires).
j'espère pouvoir t'aider, voici un code que je viens de faire pour pouvoir t'indiquer peut-être une solution :
d.ColumnCount = 85
d.RowCount = 20
For i = 0 To d.ColumnCount - 1
For j = 0 To d.RowCount - 1
d.Columns(i).Name = "colonne " & i ' à ceniveau la je donne un nom à l'entête de la colonne
Next j
Next i
End Sub
Et voici le même code légèrement modifier, ou je modifie l'entête après avoir inséré des valeurs dans mes cellules :
d.ColumnCount = 85
d.RowCount = 20
For i = 0 To d.ColumnCount - 1
For j = 0 To d.RowCount - 1
d.Item(i, j).Value = j 'j'ai inséré des valeurs dans mes cellules
Next j
Next i
For i = 0 To d.ColumnCount - 1
d.Columns(i).Name = "colonne " & i 'ensuite je nomme les colonnes
Next i
Les exemples donnés doivent fonctionner parfaitement.
Comme je le mentionnais dans ma question, le nommage des entêtes de colonnes avec la propriété Name fonctionne uniquement lorsque DataGridView.DataSource = Nothing. C'est à dire que la DataGrid n'est pas liée à un DataTable.
Je reste toujours preneur d'une solution, car les noms des champs de ma base de données ne sont pas des plus clairs.
Alors voici un exemple ou je lie le datagridview à la cellule courant, il y à donc un datasource d'attribué, et pour autant le nommage des colonnes est tout à fait possible :
d.ColumnCount = 85
d.RowCount = 20
For i = 0 To d.ColumnCount - 1
For j = 0 To d.RowCount - 1
d.Item(i, j).Value = j
Next j
Next i
d.DataSource = d.CurrentCell 'ici je lie la source donc !=/<> de nothing
For i = 0 To d.ColumnCount - 1
d.Columns(i).Name = "colonne " & i
Next i
Essaye ce code en remplaçant par le nombre de colonne dont tu as besoin et les différentes valeurs que tu y attribut, tu devrais mettre ton code pour que l'on puisse mieux t'aider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
D.CurrentCell n'est pas un DataTable tiré d'une requête sur une base de données, mais une propriété qui Obtient ou définit la cellule actuellement active. Ce qui n'est pas la même chose.
Un plaisir que tu es pu trouver, tu n'embête pas et tu nous fais pas perdre notre temps, du moment que une solution est pu être fournis, que sa soit toi ou quelqu'un d'autre cela est le principal :)
Je vous joins le code concerné. Je pense qu'il vous sera difficile de l'exploiter car il est appelé en fonction d'une table de configuration où l'on récupère l'apparence du dataGrid (Variable tableau "InfoCol")
'Ctrl est la variable contenant le DataGrid
'BDTabIni(Con) est le tableau contenant tous les objet de la connexion nro "Con"
'InfoCol(I,J) est le tableau contenant toutes les colonnes indice I et les paramètres indice J
' J = 0 => Nom du champ de la base de données
' J = 1 => Nom à placer sur l'entête de la colonne
' J = 2 => Dimension de la colonne
BD_ChrgDS(Con) 'Procédure de chargement du DataSet et du DataTable
Ctrl.DataSource = BDTabIni(Con).TabBD 'Liaison du DataTable au Datasource de la DataGrid
For I = 0 To Ctrl.columns.count - 1
Flag = False
For J = 0 To UBound(RéfCol)
If LCase(Ctrl.columns(I).datapropertyname) = LCase(InfoCol(0)) And UBound(InfoCol) = 2 Then
Ctrl.columns(I).name = InfoCol(I,1)
Ctrl.columns(I).width = CInt(InfoCol(I,2))
Flag = True
Exit For
End If
Next
Ctrl.columns(I).visible = Flag
Next
Pour information supplémentaire, je me suis aperçu que la propriété "Name" de la colonne est bien remplie avec le nom contenu dans la variable "InfoCol(1)".
Mais l'affichage lui conserve l'entête avec le nom des champs de ma requête de chargement de la DataTable.
Nota : C'est vrai que je peux obtenir le résultat que je cherche en renommant les champs dans ma requête, mais je suis réticent à avoir des requêtes avec des kilomètres de texte, qui sont toujours source d'erreur et ça m'étonne que MicroSoft n'ai pas pensé à ce point.