Que tal perdón por molestar, tengo un duda, espero me puedas ayudar te adjunto el code para que lo puedas apreciar mejor.
Te comento, que uso el control treeview y lo que estoy atascado es como agrupar los datos cargados en ellos, si lo ejecutas veras como esta quedando
https://drive.google.com/open?id=..... retirado por discrección
En la carpeta hay 3 capturas de como seria, espero me apoyes
Gracias x tu tiempo
Lo primero decirte que el propósito del foro es ayudar a todos... una duda resuelta vale para otros, luego procede preguntar en el foro, no en mensajes privados. Los mensajes privados, como su nombre indica, son para mensajes que no atañe a nadie más que a los que participan dle mensaje...Te comento, que uso el control treeview y lo que estoy atascado es como agrupar los datos cargados en ellos, si lo ejecutas veras como esta quedando
https://drive.google.com/open?id=..... retirado por discrección
En la carpeta hay 3 capturas de como seria, espero me apoyes
Gracias x tu tiempo
Es posible exponer claramente tus dudas, sin necesidad de exponer todo tu código (si razonablemente no lo quieres exponer), si es lo que te preocupa, de hecho, puedes ver como editando 2 de dichas imágenes que mandaste junto con una sola función de carga del Treeview, basta...
Después de todo, no he podido ejecutar tu proyecto, porque yo tengo instalado el entorno de vb6 en un XP, y tu tienes referencias a librerías, no disponibles en XP.
Lo siguiente decirte, que estás usando la versión de commoncontrols de vb5 (SP2), es mejor si la actualizas por la de vb6 (SP6)...
También podría decirte que hay lugar para mucha optimización, peor ese es otro tema...
A lo que venimos...
Cuando como en tu caso cargas datos procedentes de una base de datos y por tanto a priori, desconoces si los ítems a cargar son únicos o tienen subítems, y en cuyo caso quieres que se coloquen exactamente como subítems DEL MISMO ÍTEM, lo adecuado es localizar si existe ya el ITEM, y en tal caso se coloca como 'hijo' de él...
En tu código, no solo no haces búsqueda es que ni puedes hacerla porque no asignas ninguna clave, para luego poder buscar el nodo...
Este es tu código tal cual lo tenías (modificado para eliminar tantas líneas en blanco y antecediendo las declaraciones de variables a cualquier otra sentencia (das trabajo inútil al analizador léxico y al sintáctico, declarando variables en otras partes que no sea al comienzo)).
Código
Sub CARGAR_COTI_SEGUN_NOMBRE(ByVal strQuery As String) Dim i As Long Dim FACTORY As Node Dim GROUP As Node Dim ARTICULO As Node Dim TIPO_ORDEN As String '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ '// Conectar la Base Datos con ADO Call ConectarBDD '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ StrSQL = strQuery RST.Open StrSQL, CN, adOpenStatic, adLockOptimistic, adCmdText Do While Not RST.EOF With TreeView1.Nodes .Clear Set FACTORY = .Add(, , , RST!NOMBRE_CLI, otFactory, 1) For i = 1 To RST.RecordCount Set GROUP = .Add(FACTORY, tvwChild, , "Número: " & RST!IDCoti & " - " & "Fecha: " & RST!Fecha, otGroup, 2) Set ARTICULO = .Add(GROUP, tvwChild, , "Cant.: " & RST!Cantidad & " - " & RST!Descripcion, 3) RST.MoveNext FACTORY.Expanded = True Next i End With Loop '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ '// Cerrar la base de datos y liberar la memoria Call CerrarADO '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ End Sub
Y esta es la modificación de la función para que realice el cometido que reclamas...
Nota, que en cada ítem de 'Grupo' añadimos la clave, precisamente para luego poder buscarlo...
Y una vez encontrado (esto es, ya existe), solo se añade el artículo al grupo existente (como hijo de aquel)...
La sintaxis del método Add (nodo) es:
objeto.Add(relativa, relación, clave, texto, imagen, imagenSeleccionada)
Relativa: es una referencia al nodo bajo el cual se trabaja (clave o indice). Se usa el índice cuando la posición es fija y nunca cambia (es más rápido que buscar), se usa la clave, cuando se añaden y eliminan elementos, y por tanto varía y no tendrán nunca un puesto asegurado en un índice específico.
Relación: Indica el posicionado respecto del referenciado (relativo)... primero, último, siguiente, previo, hijo... excepto hijo, el resto es como 'hermano' del referenciado...
Clave: Un texto asociado como único para poder hacer búsquedas... Si se pone clave, y no hicieras búsqueda como hago, no podrías añadirlo, porque te diría que ya existe en la colección nodes un ítem con esa clave... en casos así, donde pueda haber claves repetidas y no interese ponerlos cmo hijos sino al mismo nivel debe omitirse la clave...
Texto: el dato textual que se mostrará en el control para ese ítem...
El resto es autoexplicativo...
Código
NOTA: Para ver como van apareciendo uno a uno... 'descomenta' las línea de código comentadas...
Sub CARGAR_COTI_SEGUN_NOMBRE(ByVal strQuery As String) Dim i As Long Dim FACTORY As Node Dim GROUP As Node Dim ARTICULO As Node Dim TIPO_ORDEN As String Dim Key As String ' clave del nodo que se buscara y tal vez se añadira... Dim Existe As Node ' nodo que se busca '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ '// Conectar la Base Datos con ADO Call ConectarBDD '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ StrSQL = strQuery RST.Open StrSQL, CN, adOpenStatic, adLockOptimistic, adCmdText 'me.show Do While Not RST.EOF With TreeView1.Nodes .Clear Set FACTORY = .Add(, , , RST!NOMBRE_CLI, otFactory, 1) For i = 1 To RST.RecordCount Key = CStr(RST!IDCoti) ' esta es la clave del grupo... Set Existe = TreeView1.Nodes.Item(Key) ' buscamos el nodo cuya clave interesa... If Not (Existe Is Nothing) Then ' si existe anadimos el articulo bajo el (como hijo)... Set ARTICULO = .Add(Existe, tvwChild, , "Cant.: " & RST!Cantidad & " - " & RST!Descripcion, 3) 'ARTICULO.EnsureVisible Else ' Si no existe se anade el grupo (con su key) y el articulo bajo el... Set GROUP = .Add(FACTORY, tvwChild, Key, "Número: " & RST!IDCoti & " - " & "Fecha: " & RST!Fecha, otGroup, 2) 'GROUP.EnsureVisible Set ARTICULO = .Add(GROUP, tvwChild, , "Cant.: " & RST!Cantidad & " - " & RST!Descripcion, 3) 'ARTICULO.EnsureVisible End If RST.MoveNext FACTORY.Expanded = True Next i End With Loop '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ '// Cerrar la base de datos y liberar la memoria Call CerrarADO '+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ End Sub
'ARTICULO.EnsureVisible (y si la ventana aún no es visible
'me.show
OJO: Solo para verlo claro, ejecutando las líneas paso a paso (tecla de función: F8), luego lo vuelves a comentar... carga más rápido si el control se actualiza solo al final... y no con cada añadido.