IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

drag & drop (problème index du drop) entre deux datagrid


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut drag & drop (problème index du drop) entre deux datagrid
    Bonsoir
    Je voudrais réaliser un drag drop entre deux datagrid : pas de problème pour déplacer un élément.Sauf que la ligne déplacée se positionne à la fin de du datagrid de destination.

    Je voudrais pouvoir positionner l'article là où le bouton de la souris est relâché : et pour ça je voudrais récupérer la position de la souris.J’utilise DataGridView2.CellMouseUp, mais l’index renvoyé est celui de la ligne d’origine(drag) et pas celui du drop
    Si vous avez une piste…

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Montre ton code

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    le code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Public Class Form1
        Public Index As Integer
        Dim dt1 As DataTable
        Dim dt2 As DataTable
     
        Private Sub frmDataGrid_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            dt1 = New DataTable
            dt2 = New DataTable
     
            dt1.Columns.Add("Source", Type.GetType("System.String"))
            dt2.Columns.Add("destination", Type.GetType("System.String"))
     
            Dim dr As DataRow
            dr = dt1.NewRow
            Dr("Source") = "Element 1"
            dt1.Rows.Add(dr)
            dr = dt1.NewRow
            Dr("Source") = "Element 2"
            dt1.Rows.Add(dr)
            dr = dt1.NewRow
            Dr("Source") = "Element 3"
            dt1.Rows.Add(dr)
            dr = dt1.NewRow
            Dr("Source") = "Element 4"
            dt1.Rows.Add(dr)
            Dr = DT1.NewRow
     
            DataGridView1.DataSource = dt1
            DataGridView2.DataSource = dt2
     
        End Sub
     
       Fonction qui ne renvoie pas de valeur quand je relache le bouton droit du drop
        Private Sub DataGridView2_CellMouseUp(ByVal sender As Object, ByVal e As DataGridViewCellMouseEventArgs) _
         Handles DataGridView2.CellMouseUp
            MsgBox(e.RowIndex)
        End Sub
     
        Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
            Index = DataGridView1.HitTest(e.X, e.Y).RowIndex
            If Index > -1 Then
                DataGridView1.DoDragDrop(Index, DragDropEffects.Move)
            End If
        End Sub
        Private Sub DataGridView2_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragOver
            e.Effect = DragDropEffects.Move
        End Sub
     
        Private Sub DataGridView2_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragDrop
            Try
                Dim index As Integer = Convert.ToInt32(e.Data.GetData(Type.GetType("System.Int32")))
                Dim destination As String
                destination = DataGridView1.Rows(index).Cells("Source").Value.ToString
                Dim y As Integer = DataGridView1.CurrentCellAddress.Y
                Dim x As Integer = DataGridView1.CurrentCellAddress.X
                DataGridView1.Rows.Remove(DataGridView1.Rows(index))
     
                Dim Dr As DataRow
                Dr = dt2.NewRow
                Dr("destination") = destination
                dt2.Rows.Add(Dr)
     
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
        End Sub
     
    End Class

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je suppose que tu cherchais à obtenir l'index de destination dans le MouseUp ? Pendant un drag/drop, les évènements souris sont capturés, il ne faut pas se baser dessus. Il faut que tu fasses un HitTest dans l'évènement DragDrop du DGV2, comme tu as fais dans le MouseDown du DGV1

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    J'ai rajouté MsgBox("Drop ! " & DataGridView2.HitTest(e.X, e.Y).RowIndex) dans la SUB ci dessous, la valeur renvoyée est -1 (RowIndex) quel que soit le drop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub DataGridView2_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView2.DragDrop
            Try
                Dim index As Integer = Convert.ToInt32(e.Data.GetData(Type.GetType("System.Int32")))
                Dim destination As String
                destination = DataGridView1.Rows(index).Cells("Source").Value.ToString
                Dim y As Integer = DataGridView1.CurrentCellAddress.Y
                Dim x As Integer = DataGridView1.CurrentCellAddress.X
                DataGridView1.Rows.Remove(DataGridView1.Rows(index))
     
                Dim Dr As DataRow
                Dr = dt2.NewRow
                Dr("destination") = destination
                dt2.Rows.Add(Dr)
     
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
        End Sub
     
    End Class

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ah ok, je vois pourquoi. C'est parce les coordonnées de l'évènement DragDrop sont des coordonnées écran, et non des coordonnées relatives au contrôle. Il faut donc convertir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim pos = DataGridView2.PointToClient(New Point(e.X, e.Y))
    Dim destIndex = DataGridView2.HitTest(pos.X, pos.Y)

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Points : 12
    Points
    12
    Par défaut [Résolu] drag & drop (problème index du drop) entre deux datagrid
    Merci ! je peux maintenant récupérer l'index de la ligne
    Dim destIndex = DataGridView2.HitTest(pos.X, pos.Y).RowIndex

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pense au bouton stp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème accès aux propriétés entre deux classes liées par many-to-one
    Par moha1984 dans le forum Persistance des données
    Réponses: 1
    Dernier message: 21/06/2010, 10h07
  2. Réponses: 5
    Dernier message: 11/12/2007, 14h44
  3. [RegEx] Problème avec les espaces entre deux tags
    Par elcoyotos dans le forum Langage
    Réponses: 9
    Dernier message: 17/04/2007, 11h01
  4. Réponses: 5
    Dernier message: 29/03/2007, 22h26
  5. [XSL-FO] Problème de pages blanches entre deux page-sequence
    Par slopera dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 28/03/2006, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo