Renommer les colonnes d'un datagridview par l'utilisateur [Résolu]

Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
- - Dernière réponse : hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
- 1 nov. 2017 à 11:21
Salut tout le monde,
Dans mon formulaire j'ai une ListBox qui contient des noms de colonnes et un datagridview. Je veux permettre à l'utilisateur de glisser chaque nom de colonne depuis la listbox et le mettre dans le header du datagridview. Est ce que c'est possible de le faire?
Merci d'avance.
Afficher la suite 

Votre réponse

14 réponses

Messages postés
12390
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Bonjour

L’idée c’est quoi?
C’est de renommer la cellule, le titre comme le laisse penser, ou ajouter/modifier une colonne (par exemple pour une personne, tu as nom, prénom, date de naissance, adresse, téléphone ect) et tu remplaces la date de naissance par l’adresse, comme ton texte le laisse penser?
Commenter la réponse de Whismeril
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
0
Merci


C'est ce que je veux faire
Commenter la réponse de hanadakia
Messages postés
12390
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Ha ok c’est une configuration d’import.

Et ton datagridview, il est bindé sur une source de données?
Commenter la réponse de Whismeril
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
0
Merci
Non, je remplis le datagridview directement depuis un fichier excel
Commenter la réponse de hanadakia
Messages postés
12390
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
EN terme d’optimisation c’est pas le mieux.


Regardes du côté du drag and drop, tu stockes le texte de ta listbox sur un drag et tu appliques le header sur un drop
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Commenter la réponse de Whismeril
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
0
Merci
Comment trouver l'index de la colonne sur laquelle l'utilisateur a déposé le texte?
Merci beaucoup pour votre aide.
Commenter la réponse de hanadakia
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Il faut que tes 2 controls aient la propriété AllowDrop = True

Dans mon exemple la listBox est listBox3 à adapter:

 'exemple ListBox datagridview
    'Dans le listBox3 de départ, l'évènement MouseDown  déclenche le glisser déplacer par DoDragDrop.
    Private Sub ListBox3_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox3.MouseDown
   ListBox3.DoDragDrop(ListBox3.Items(ListBox3.IndexFromPoint(e.X, e.Y)), DragDropEffects.Copy Or DragDropEffects.Move)
    End Sub
    Private Sub DataGridView1_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragDrop
      Dim ht As DataGridView.HitTestInfo = DataGridView1.HitTest(DataGridView1.PointToClient(New Point(e.X, e.Y)).X, DataGridView1.PointToClient(New Point(e.X, e.Y)).Y)
        'If ht.ColumnIndex > -1 And ht.RowIndex > -1 Then 'activer pour draganddrop ligne
        If ht.ColumnIndex > -1 Then
            ' DataGridView1.Rows(ht.RowIndex).Cells(ht.ColumnIndex).Value = e.Data.GetData("Text")'activer pour draganddrop ligne
            DataGridView1.Columns(ht.ColumnIndex).HeaderText = e.Data.GetData("Text")
        End If
    End Sub
    Private Sub DataGridView1_DragOver(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragOver
        e.Effect = DragDropEffects.Move
    End Sub
   

Pour les drag and drop voir cela aussi:

http://codes-sources.commentcamarche.net/source/45726-picture-drag-drop

j'ai mis le code pour les lignes en commentaire.


@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
0
Merci
Il m'a souligné le New Point(e.X, e.Y) est ce que je dois ajouter une classe Point?
Commenter la réponse de hanadakia
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
e.X et e.Y sont les coordonnées de la souris comme ceci:

     Private Sub DataGridView1_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragDrop
 MsgBox(e.X)


Il faut choisir pour la datagridview en haut à doite dans le menu déroulant l'évenement DragDrop

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
0
Merci
Il m'affiche comme erreur: 'New' cannot be used on an interface
Merci cs_Le Pivert pour votre code.
cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
New ne peut servir pour l'interface

C'est que le code n'est pas au bon endroit!
Commenter la réponse de hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
0
Merci
   Private Sub DataGridView1_DragDrop(sender As Object, e As DragEventArgs) Handles DataGridView1.DragDrop
'For Each col As DataGridViewColumn In DataGridView1.Columns
' col.HeaderText = e.Data.GetData(DataFormats.Text).ToString
'Next
Dim ht As DataGridView.HitTestInfo = DataGridView1.HitTest(DataGridView1.PointToClient(New Point(e.X, e.Y)).X, DataGridView1.PointToClient(New Point(e.X, e.Y)).Y)
'If ht.ColumnIndex > -1 And ht.RowIndex > -1 Then 'activer pour draganddrop ligne
If ht.ColumnIndex > -1 Then
' DataGridView1.Rows(ht.RowIndex).Cells(ht.ColumnIndex).Value = e.Data.GetData("Text")'activer pour draganddrop ligne
DataGridView1.Columns(ht.ColumnIndex).HeaderText = e.Data.GetData("Text")
End If
End Sub
cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
chez toi
sender As Object, e As DragEventArgs


chez moi

sender As Object, e As System.Windows.Forms.DragEventArgs


vois-tu une différence!
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
-
J'ai choisis l'événement dragdrop depuis le menu déroulant et il m'a donné:
sender As Object, e As DragEventArgs


Je pense que c'est la même chose non ?
Commenter la réponse de hanadakia
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Voilà le site de référence que j'ai adapté, tu constateras par toi-même:

https://www.experts-exchange.com/questions/27533350/Drag-Drog-from-ListBox-to-DataGridView.html

Cela fonctionne très bien, je ne peux pas en faire plus!

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
J'ai mis le programme cité plus haut à jour avec le draganddrop d'une listBox à une datagridview

http://codes-sources.commentcamarche.net/forum/affich-10080025-renommer-les-colonnes-d-un-datagridview-par-l-utilisateur#7
Commenter la réponse de cs_Le Pivert
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Dernière intervention
30 mai 2018
0
Merci
Merci cs_Le Pivert, maintenant ça fonctionne très bien. J'ai mis au lieu de
 New Point(e.X, e.Y)
,
New System.Drawing.Point(e.X, e.Y)  
Commenter la réponse de hanadakia

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.