Renommer les colonnes d'un datagridview par l'utilisateur

Résolu
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018
- 31 oct. 2017 à 12:45
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
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.

14 réponses

Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
31 oct. 2017 à 13:12
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?
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

31 oct. 2017 à 13:20


C'est ce que je veux faire
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
31 oct. 2017 à 13:23
Ha ok c’est une configuration d’import.

Et ton datagridview, il est bindé sur une source de données?
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

31 oct. 2017 à 13:29
Non, je remplis le datagridview directement depuis un fichier excel
0

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

Posez votre question
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
Modifié le 31 oct. 2017 à 14:15
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
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

31 oct. 2017 à 16:22
Comment trouver l'index de la colonne sur laquelle l'utilisateur a déposé le texte?
Merci beaucoup pour votre aide.
0
cs_Le Pivert
Messages postés
7743
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 mai 2022
129
Modifié le 31 oct. 2017 à 17:29
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
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

31 oct. 2017 à 17:38
Il m'a souligné le New Point(e.X, e.Y) est ce que je dois ajouter une classe Point?
0
cs_Le Pivert
Messages postés
7743
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 mai 2022
129
Modifié le 31 oct. 2017 à 17:58
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
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

31 oct. 2017 à 17:57
Il m'affiche comme erreur: 'New' cannot be used on an interface
Merci cs_Le Pivert pour votre code.
0
cs_Le Pivert
Messages postés
7743
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 mai 2022
129
31 oct. 2017 à 18:02
New ne peut servir pour l'interface

C'est que le code n'est pas au bon endroit!
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

31 oct. 2017 à 18:03
   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
0
cs_Le Pivert
Messages postés
7743
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 mai 2022
129
31 oct. 2017 à 18:05
chez toi
sender As Object, e As DragEventArgs


chez moi

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


vois-tu une différence!
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

31 oct. 2017 à 18:12
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 ?
0
cs_Le Pivert
Messages postés
7743
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 mai 2022
129
Modifié le 31 oct. 2017 à 18:29
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
0
cs_Le Pivert
Messages postés
7743
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
9 mai 2022
129
1 nov. 2017 à 06:52
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
0
hanadakia
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

1 nov. 2017 à 11:21
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)  
0