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

RLAPT 32 Messages postés lundi 11 avril 2011Date d'inscription 14 mars 2018 Dernière intervention - 29 juil. 2013 à 10:09 - Dernière réponse : Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention
- 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 

12 réponses

Répondre au sujet
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 29 juil. 2013 à 12:43
+1
Utile
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

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Adrien2p
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 29 juil. 2013 à 12:47
0
Utile
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
RLAPT 32 Messages postés lundi 11 avril 2011Date d'inscription 14 mars 2018 Dernière intervention - 29 juil. 2013 à 13:53
0
Utile
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
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 29 juil. 2013 à 13:58
0
Utile
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
RLAPT 32 Messages postés lundi 11 avril 2011Date d'inscription 14 mars 2018 Dernière intervention - 29 juil. 2013 à 15:38
0
Utile
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
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 29 juil. 2013 à 15:42
0
Utile
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
RLAPT 32 Messages postés lundi 11 avril 2011Date d'inscription 14 mars 2018 Dernière intervention - 29 juil. 2013 à 15:55
0
Utile
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
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 29 juil. 2013 à 16:01
0
Utile
peut-tu mettre ton code pour que nous puissions mieux t'indiquer le problème ?
Commenter la réponse de Adrien2p
RLAPT 32 Messages postés lundi 11 avril 2011Date d'inscription 14 mars 2018 Dernière intervention - 29 juil. 2013 à 19:45
0
Utile
1
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 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 30 juil. 2013 à 09:33
pourras-tu mettre la discutions en résolu du coup ?
Commenter la réponse de RLAPT
Adrien2p 53 Messages postés jeudi 14 février 2013Date d'inscription 16 juillet 2014 Dernière intervention - 29 juil. 2013 à 20:03
0
Utile
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
RLAPT 32 Messages postés lundi 11 avril 2011Date d'inscription 14 mars 2018 Dernière intervention - 29 juil. 2013 à 19:36
-1
Utile
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.