Renommer les colonnes d'un datagridview par l'utilisateur

Résolu
hanadakia Messages postés 43 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 30 mai 2018 - 31 oct. 2017 à 12:45
hanadakia Messages postés 43 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 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
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 43 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 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
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 43 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 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
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 43 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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
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 43 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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
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 43 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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
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 43 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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
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 43 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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
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 43 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
Rejoignez-nous