Modification des textes des entêtes de colonne DataGrid [Résolu]

Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
- - Dernière réponse : Adrien2p
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
- 30 juil. 2013 à 09:33
Bonjour,

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).

Quelqu'un aurait-il la réponse ?

Merci d'avance.

Cordialement
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
1
Merci
Bonjour,

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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Adrien2p
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
0
Merci
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

Commenter la réponse de Adrien2p
Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
0
Merci
Bonjour Adrien2P,

Merci de tes réponses.

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.

Merci d'avance.
Commenter la réponse de RLAPT
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
0
Merci
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.
Commenter la réponse de Adrien2p
Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
0
Merci
Re bonjour Adrien2P,

Vraiment merci de l'intérêt pour mon problème.

Je reviens sur le code envoyé. Dans :
d.DataSource = d.CurrentCell 

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.

Cordialement.
Commenter la réponse de RLAPT
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
0
Merci
oui mais cela permet d'éviter le nothing à partir du moment ou la cellule courante n'est pas vide.
Commenter la réponse de Adrien2p
Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
0
Merci
Bonjour,

Ce qui prouve que le problème ne vient pas du nothing dans le DataSource, mais du Du fait qu'il y a un DataTable comme source.
Bien vu.

Ma difficulté reste entière.

Cordialement.
Commenter la réponse de RLAPT
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
0
Merci
peut-tu mettre ton code pour que nous puissions mieux t'indiquer le problème ?
Commenter la réponse de Adrien2p
Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
0
Merci
Rebonjour,

Je viens de trouver ce qu'il falait faire.

Pour obtenir le résultat recherché au lieu de remplir la propriété "name" il faut remplir la propriété "HeaderText".

La ligne de code s'écrit donc.

Ctrl.columns(I).Headertext = InfoCol(1)


Merci encore de votre aide et excusez moi de vous avoir fait perdre votre temps.

Cordialement
Adrien2p
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
-
pourras-tu mettre la discutions en résolu du coup ?
Commenter la réponse de RLAPT
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Dernière intervention
16 juillet 2014
0
Merci
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 :)
Commenter la réponse de Adrien2p
Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
-1
Merci
Rebonjour,

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.

Merci de votre aide.
Commenter la réponse de RLAPT

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.