Drag&Drop: Von Datagrid in einen TreeView Knotenpunkt

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Drag&Drop: Von Datagrid in einen TreeView Knotenpunkt

    Guten Tag,

    ich bin gerade dabei ein Drag & Drop zu Erstellen, wo ich einen Eintrag aus einem DataGridView einem TreeViewKnotenpunkt zuordnen möchte.
    Das Drag&Drop funktioniert soweit, das ich meinen Eintrag aus dem Grid auf dem TreeView droppen kann und ich dann auch den Wert des DataGridView Elements erhalte.

    Jetzt muss die Zuordnung statt finden und ich müsste heraus finden, auf welchen Knotenpunkt dies gezogen wurde.
    Speziell genommen den Namen oder Text zu dem jeweiligen Knotenpunkt.

    Ist dies überhaupt möglich?
    Und falls ja, wo muss ich da ansetzen?

    Nach einer längeren Suche konnte ich nichts passendes finden.
    Bin daher über jegliche Ansätze sehr dankbar.

    Liebe Grüße
    Hi, falls es dich noch interessiert.
    Ein kleines Code Schnipsel als Ansatz.

    VB.NET-Quellcode

    1. ' DGV Muss Manuell zum DoDragDrop gezwungen werden, das passiert im MouseDownEvent, bei gedrückter Rechter MouseTaste
    2. Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    3. If e.Button = Windows.Forms.MouseButtons.Right Then
    4. Dim rInfo As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y) ' DGV HitTestinfo enthält die Infos die wir brauchen
    5. 'Befinden wir uns über einer Zelle?
    6. If rInfo.RowIndex >= 0 And rinfo.ColumnIndex >=0 Then
    7. Dim c As DataGridViewCell = DataGridView1.Rows(rInfo.RowIndex).Cells(rInfo.ColumnIndex)
    8. If c IsNot Nothing And c.Value IsNot Nothing Then 'Wenn eine Zelle gewählt wurde, und der Inhalt nicht NICHTS is, dann machen wir dragn drop.Da muss man sicher noch verfeinern, zB ist der Inhalt STRING?
    9. DataGridView1.DoDragDrop(c.Value.ToString, DragDropEffects.Copy) 'Effect.Copy nehmen wir, da der iNhalt bleibt
    10. End If
    11. End If
    12. End If
    13. End Sub
    14. 'Treeview.Allowdragdrop = True natürlich vorher ;)
    15. Private Sub TreeView1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragOver
    16. 'Können wir die Daten denn Droppen ?
    17. If e.Data.GetDataPresent(DataFormats.StringFormat) Then 'Haben wir einen String ?
    18. If TreeView1.GetNodeAt(TreeView1.PointToClient(New Point(e.X, e.Y))) IsNot Nothing Then 'Wenn wir einen haben, befinden wir uns über einem NODE ?
    19. e.Effect = DragDropEffects.Copy 'Ok, dann darf gedroppt werden
    20. Else
    21. e.Effect = DragDropEffects.None 'sonst nicht
    22. End If
    23. End If
    24. End Sub
    25. Private Sub TreeView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TreeView1.DragDrop
    26. Dim c As String = e.Data.GetData(DataFormats.StringFormat).ToString 'Daten in String wandeln (also den inhalt der DgvZelle)
    27. 'Das is wichtig, sonst wird GetNodeAt nicht funktionieren:
    28. Dim p As Point = TreeView1.PointToClient(New Point(e.X, e.Y)) 'Punkt bestimmen, wo man mit der mouse im treeview im bezug zum client ist
    29. TreeView1.GetNodeAt(p).Nodes.Add(New TreeNode With {.Text = c}) 'an den Node nen neuen Node adden mit dem Text aus der DGVCell
    30. End Sub



    Gruss mono
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mono“ ()