Hola amigos del foro, estoy trabajando con vb.net 2005 y sqlserver2000, tengo un form con un treeview y un listview, en el treeview se cargan las tablas de mi bd con sus campos y puedo arrastras los campos hasta el listview con el evento ItemDrag,DragEnter y  DragDrop y todo resulta bien, pero si quiero hacer lo mismo dentro del listview, es decir arrastrar los items dentro del mismo listview para reordenarlos haciendo los eventos correspondientes, no me resulta, logro seleccionar los items y simular el movimiento, pero no se cambian de posición, depurandolo me pareció ver que no entra al evento DragDrop del listview cuando intento arrastrar los elementos dentro del propio listview pero si lo hace cuando lo hago desde el treeview.He sacado un código que aparece varias veces en internet donde a la gente le resulta, entonces creo que yo debo estar fallando en algo, solo sé que no entra al dragdrop y no sé por qué.
Aquí muestro mi codigo:
 
Private Sub TreeView1_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles TreeView1.ItemDrag
 
        If TreeView1.SelectedNode.Text <> "Tablas" Then
            If TreeView1.SelectedNode.Parent.Text <> "Tablas" Then
                DoDragDrop(e.Item, DragDropEffects.Copy)
            End If
        End If
    End Sub
 
Private Sub ListView1_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag
 
        DoDragDrop(e.Item, DragDropEffects.Copy)
 
    End Sub
 
Private Sub ListView1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragEnter
 
        If TreeView1.Focused Then
            e.Effect = DragDropEffects.Copy
        Else
            e.Effect = DragDropEffects.Move
        End If      
 
    End Sub
 
Private Sub ListView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragDrop
 
        Dim i As Integer
        Dim Ntabla As String
        Dim existe As Boolean = False
 
        If TreeView1.Focused Then
 
            If TreeView1.SelectedNode.Text <> "Tablas" And TreeView1.SelectedNode.Parent.Text <> "Tablas" Then
 
                Ntabla = TreeView1.SelectedNode.Parent.Text  
                Ntabla = Ntabla + "." + TreeView1.SelectedNode.Text  
                If ListView1.Items.Count > 0 Then
                    For i = 0 To ListView1.Items.Count - 1
                        If Ntabla = ListView1.Items.Item(i).Text Then 
                            existe = True
                        End If
                    Next
                    If existe Then
                        Exit Sub
                    Else
                        ListView1.Items.Add(Ntabla)
                    End If
                Else
                    ListView1.Items.Add(Ntabla)
                End If
            End If
        Else
            '<< Ordenando los items del list >>
            '  -----------------------------
 
            'Si los Items no estan seleccionados Sale del Sub
            If ListView1.SelectedItems.Count = 0 Then Exit Sub
            'Tomamos la ubicación del puntero del ratón en el control.
            Dim p As Point = ListView1.PointToClient(New Point(e.X, e.Y))
            'Leemos el item donde se ubica el ratón
            Dim dragToItem As ListViewItem = ListView1.GetItemAt(p.X, p.Y)
            If dragToItem Is Nothing Then Return
            'Tomamos el Index del Item y recorremos todos los items
            Dim dragIndex As Integer = dragToItem.Index
            Dim sel(ListView1.SelectedItems.Count) As ListViewItem
            For i = 0 To ListView1.SelectedItems.Count - 1
                sel(i) = ListView1.SelectedItems.Item(i)
            Next
            For i = 0 To ListView1.SelectedItems.Count - 1
                'Arrastramos a la ubicación de destino.
                Dim dragItem As ListViewItem = sel(i)
                Dim itemIndex As Integer = dragIndex
                If itemIndex = dragItem.Index Then Return
                If dragItem.Index < itemIndex Then
                    itemIndex = itemIndex + 1
                Else
                    itemIndex = dragIndex + i
                End If
                'Lo insertamos.
                Dim insertitem As ListViewItem = CType(dragItem.Clone, ListViewItem)
                ListView1.Items.Insert(itemIndex, insertitem)
                'Borramos el Item de su ubicación original
                'Lo movemos a su nueva ubicación.
                ListView1.Items.Remove(dragItem)
            Next
            'Por ultimo refrecamos el List para reasignar indices
            ListView1.Refresh()
        End If
    End Sub
 
...También probé sacando el codigo correspondiente al treeview para ver si influía y dejé solo el codigo correspondiente al listview pero al parecer no entró al procedimiento, como indiqué antes si hago el proceso arrastrando los datos desde el treeview funciona a la perfección y entra al eventro dragdrop, pero si arrastro los items desde el listview al mismo listview para cambiarlos de posición, al parecer no entra al evento dragdrop y no hace nada, o entra y sale a la vez, no puedo chequearlo bien.He perdido mucho tiempo tratando de descubrir el error y qusiera saber si alguien lo descubre o me dá alguna solución.
De antemano se les agradece mucho.
Saludos. 
   
 

