Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/04/2009, 18:04
Avatar de seba123neo
seba123neo
 
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 3 meses
Puntos: 19
Respuesta: treeview y bases

pues si con un bucle...recorres el recordset y cargas primero los padres y le añadis a cada uno un identificador asi cuando agreges los hijos sabrasa cual padre agregarselo...para eso obviamente debe haber un campo en tu tabla que le diga al hijo cual es el padre...te paso un ejemplo de un programa que tenia de como los cargaba...de esta forma podes cargarle la profundidad que quieras de hijos y padres...supongamos que tengo una tabla llamada padres y tengo un idpadre y un nombre...y otra llamada hijos donde tenemos los campos idpadre(que relaciona con la tabla padre, un padre puede tener varios hijos) , idhijo, nombre...esta es un afuncion que habia realizado para cargar los padres:

Código vb:
Ver original
  1. Private Function CargaNodoPadre(ByVal Tv As TreeView) As Boolean
  2.     Dim nodo As Node
  3.     mRsAux.Open "SELECT idpadre,nombre FROM padres", mConexion, adOpenForwardOnly, adLockReadOnly, adCmdText
  4.     If mRsAux.EOF Then
  5.         CargaNodoPadre = False
  6.     Else
  7.         Do Until mRsAux.EOF
  8.             Set nodo = Tv.Nodes.Add("abuelo", tvwChild, "Padre " & mRsAux("idpadre"), mRsAux("nombre"), ImageTV.ListImages(2).Key)
  9.             mRsAux.MoveNext
  10.         Loop
  11.         CargaNodoPadre = True
  12.     End If
  13.     Set nodo = Nothing
  14.     mRsAux.Close
  15. End Function

el primer parametro es el que le dice a que nodo "padre" se va a agregar el nodo, fijate que aca dice "abuelo", eso es asi porque yo antes de cargar el padre cargaba un unico nodo principal con el nombre "abuelo"....fijate en el explorador de windows arriba de todo dice "escritorio" ese seria el que yo llamo abuelo porque contiene todos los padres...hijos...nietos jeje...es el principal...se puede obviar pero yo lo hice asi...

fiajte que cada vez que se agrega un nodo se esta agregando un identificador donde dice "Padre " & mRsAux("idforopadre"), entonces queda algo asi dependiendo del id de cada padre internamente se vana llamar:

Padre 1
Padre 2
Padre 3


etc...

ahora para cargar los hijos a cada padre..es lo msimco casi pero indicando el idpadre que tenemos relacionado...

Código vb:
Ver original
  1. Private Function CargaHijos(ByVal Tv As TreeView) As Boolean
  2.     Dim nodo As Node
  3.     mRsAux.Open "SELECT idpadre,idhijo,nombre FROM hijos", mConexion, adOpenForwardOnly, adLockReadOnly, adCmdText
  4.     If mRsAux.EOF Then
  5.         CargaHijos= False
  6.     Else
  7.         Do Until mRsAux.EOF
  8.             Set nodo = Tv.Nodes.Add("Padre " & mRsAux("idpadre"), tvwChild, "Hijo " & mRsAux("idhijo"), mRsAux("nombre"), ImageTV.ListImages(3).Key)
  9.             mRsAux.MoveNext
  10.         Loop
  11.         CargaHijos= True
  12.     End If
  13.     Set nodo = Nothing
  14.     mRsAux.Close
  15. End Function

fijate en el primer parametro le estoy dicendo que carge el hijo en su padre correspondiente dependiendo del campo idpadre que tengo relacionada donde dice "Padre " & mRsAux("idpadre")

y hasta le podes agregar un hijo al hijo si queres y asi sucesivamente...

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein