Foros del Web » Programación para mayores de 30 ;) » .NET »

Arrastrar un treenode

Estas en el tema de Arrastrar un treenode en el foro de .NET en Foros del Web. -Hola a todos ,tengo un pequeño problema, espero me puedan ayudar. Tengo creado un treeview,en el cual puedo arrastrar los nodos ,cambiarlos de nodo padre, ...
  #1 (permalink)  
Antiguo 26/06/2008, 01:29
 
Fecha de Ingreso: junio-2008
Ubicación: Valencia
Mensajes: 152
Antigüedad: 15 años, 10 meses
Puntos: 3
Arrastrar un treenode

-Hola a todos ,tengo un pequeño problema, espero me puedan ayudar.

Tengo creado un treeview,en el cual puedo arrastrar los nodos ,cambiarlos de nodo padre, cambiarlos de orden.
el problema esta ahi.en mi tabla tengo los registros con un campo anterior y siguiente.Creo el arbol siguiendo estos campos.Al cambiarlos de orden lo hago en la tabla y vuelvo a crear de nuevo el arbol.
No me gustaria saber si hay alguna forma de no tener que volver a crear el arbol.Si hay algun metodo para poder decirle donde tiene que añadir el nodo.Ya que lo he intentado con el add pero los añade al final del nodo padre.
Gracias.
  #2 (permalink)  
Antiguo 26/06/2008, 02:57
 
Fecha de Ingreso: junio-2008
Ubicación: Valencia
Mensajes: 152
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: Arrastrar un treenode

He encontrado el metodo :
seria con un insert.que te pide un indece el problema es que yo hago :

Dim selectedNode As TreeNode = TreeView1.SelectedNode
Dim idxSelected As Integer = selectedNode.Index
y mi indice es cero alguien me podia explicar porque.
gracias
  #3 (permalink)  
Antiguo 26/06/2008, 04:42
 
Fecha de Ingreso: junio-2008
Ubicación: Valencia
Mensajes: 152
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: Arrastrar un treenode

Lo de no obtener los indeces era un error mio de como habia creado los nodos.Un pekeño fallo.
Encontre el siguiente codigo para para subir nodos,pero lo que necesito es no es esto.Sino que el usuario pueda poner el nodo donde quiera no solo intercambiar el seleccionado con el siguiente.
el codigo esta en el siguiente link:

http://ferraripablo.blogspot.com/2007/02/vb-netcontrolstreeview.html
  #4 (permalink)  
Antiguo 26/06/2008, 10:15
 
Fecha de Ingreso: junio-2008
Ubicación: Valencia
Mensajes: 152
Antigüedad: 15 años, 10 meses
Puntos: 3
Respuesta: Arrastrar un treenode

Aqui esta la solucion.Es mi evento DrapDrop de un treeview,donde el usuario arrastrando el nodo ordenara el arbol como quiera.En ningun momento se le deja que pueda cambiar la categoria del nodo.si es un 2º hijo siempre sera 2º hijo.
Si alguien con mas conocimietnos que yo ve posibles cambios me gustaria que los comentarais.

Private Sub arbol_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles arbol.DragDrop

If e.Data.GetDataPresent("System.Windows.Forms.TreeNo de", False) Then
' variable que sirve para guardar el valor del nodo de destino
Dim DestinationNode As TreeNode
'el nodo seleccionado sera el nodo anterior al destino
DestinationNode = arbol.SelectedNode
Dim nodosg As Integer
nodosg = prueba(DestinationNode.Tag + 1, CInt(DestinationNode.Name))
'para que el usuario al arrastrarlo sobre si mismo no haga nada
If DestinationNode.Name <> NodoOrigen.Name Then
'si el nodo destino es el nodo siguiente al nodo origen
If nodosg <> CInt(NodoOrigen.Name) Then
'Comprobamos que tiene nodo siguiente de su mismo nivel
Dim nextNode As TreeNode = arbol.SelectedNode.NextNode

'el nodo arrastrado solo pueda ser arrastrado a nodos de su mismo nivel
If NodoOrigen.Tag = DestinationNode.Tag Then

Dim parentNodo As Object = arbol.SelectedNode.Parent
Dim indicedNext As Integer

Dim prevNode As TreeNode = arbol.SelectedNode.PrevNode
If nextNode IsNot Nothing Then
indicedNext = nextNode.Index

If TypeOf parentNodo Is TreeNode Then
If indicedNext < NodoOrigen.Index Then ' el movimiento de arrastrar es hacia arriba
CType(parentNodo, TreeNode).Nodes.Remove(CType(parentNodo, TreeNode).Nodes(NodoOrigen.Index))
CType(parentNodo, TreeNode).Nodes.Insert(indicedNext, NodoOrigen)
Else ' el movimiento de arrastrar es hacia abajo
indicedNext = nextNode.Index
CType(parentNodo, TreeNode).Nodes.Remove(CType(parentNodo, TreeNode).Nodes(NodoOrigen.Index))
CType(parentNodo, TreeNode).Nodes.Insert(indicedNext - 1, NodoOrigen)
End If
End If
Else
'creamos un nuevo nodo
Dim nodo As TreeNode
'obtenemos el nodo superior del nodo seleccionado
nodo = DestinationNode.Parent
'Borramos el nodo
NodoOrigen.Remove()
'Le decimos que el nodo seleccionado debe ser un hijo del nodo superior
nodo.Nodes.Add(CType(NodoOrigen.Clone, TreeNode))
End If
'Seleccionamos el arrastrado
arbol.SelectedNode = CType(parentNodo, TreeNode).Nodes(indicedNext)
'Con esta funcion guardariamos el cambio de orden en la BD
' modNodArrastre(NodoOrigen, DestinationNode)
End If
End If
End If
End If

End Sub
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:47.