Modification des textes des entêtes de colonne DataGrid

Résolu
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020 - 29 juil. 2013 à 10:09
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre 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

11 réponses

Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
29 juil. 2013 à 12:43
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

1
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
29 juil. 2013 à 12:47
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

0
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020
29 juil. 2013 à 13:53
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.
0
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
29 juil. 2013 à 13:58
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020
29 juil. 2013 à 15:38
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.
0
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
29 juil. 2013 à 15:42
oui mais cela permet d'éviter le nothing à partir du moment ou la cellule courante n'est pas vide.
0
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020
29 juil. 2013 à 15:55
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.
0
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
29 juil. 2013 à 16:01
peut-tu mettre ton code pour que nous puissions mieux t'indiquer le problème ?
0
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020
29 juil. 2013 à 19:45
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
0
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
30 juil. 2013 à 09:33
pourras-tu mettre la discutions en résolu du coup ?
0
Adrien2p Messages postés 53 Date d'inscription jeudi 14 février 2013 Statut Membre Dernière intervention 16 juillet 2014 9
29 juil. 2013 à 20:03
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 :)
0
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020
29 juil. 2013 à 19:36
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.
-1
Rejoignez-nous