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

Signaler
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018
-
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018
-
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

Messages postés
15939
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 mai 2021
545
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?
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018



C'est ce que je veux faire
Messages postés
15939
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 mai 2021
545
Ha ok c’est une configuration d’import.

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

Non, je remplis le datagridview directement depuis un fichier excel
Messages postés
15939
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 mai 2021
545
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
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

Comment trouver l'index de la colonne sur laquelle l'utilisateur a déposé le texte?
Merci beaucoup pour votre aide.
Messages postés
7381
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 mai 2021
122
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
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

Il m'a souligné le New Point(e.X, e.Y) est ce que je dois ajouter une classe Point?
Messages postés
7381
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 mai 2021
122
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
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

Il m'affiche comme erreur: 'New' cannot be used on an interface
Merci cs_Le Pivert pour votre code.
Messages postés
7381
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 mai 2021
122
New ne peut servir pour l'interface

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

   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
Messages postés
7381
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 mai 2021
122
chez toi
sender As Object, e As DragEventArgs


chez moi

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


vois-tu une différence!
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
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 ?
Messages postés
7381
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 mai 2021
122
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
Messages postés
7381
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 mai 2021
122
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
Messages postés
48
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
30 mai 2018

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)