Autor
|
Tema: Control TreeView (Leído 16,719 veces)
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
que tal? Bueno paso a comentarles mi inquietud. No tuve problemas al usar un control TreeView en vb6, pero cuando migre a .NET se me dificulto la cosa. No puedo agregar lo que yo quiero como yo quiero. Pongo un code de ejemplo: treeview.Nodes.Add("Raiz")
treeview.Nodes(0).Nodes.Add("Primero") treeview.Nodes(0).Nodes.Add("Segundo") treeview.Nodes(0).Nodes.Add("Tercero")
con ese code creo una raiz y colgando de esa raiz los items Primero, Segundo y Tercero. Ahora... yo quiero colgar items del item "Primero" y eso es lo que no puedo hacer Saludos.
|
|
|
En línea
|
|
|
|
Hadess_inf
Desesperado
Colaborador
Desconectado
Mensajes: 2.048
Nueva Vida
|
TreeView1.Nodes.Add("Raiz 1") TreeView1.Nodes(0).Nodes.Add("Primero R1") TreeView1.Nodes(0).Nodes.Add("Segundo R1") TreeView1.Nodes(0).Nodes(0).Nodes.Add("Sub Primero 1") TreeView1.Nodes(0).Nodes(0).Nodes.Add("Sub Primero 2") TreeView1.Nodes(0).Nodes(1).Nodes.Add("Sub segundo 1") TreeView1.Nodes(0).Nodes(1).Nodes.Add("Sub segundo 2")
|
|
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
si, esta perfecto eso, ya me habia dado cuenta muchas gracias el problema mio ahora es el siguiente es urgente, necesito hacer este arbol mañana :S el arbol lo tengo q hacer en base a una tabla sql con los sig campos "CODIGO(string)" "DESCRPCION(string)" "PADRE(string)" el tema es que no puedo hacerlo :S encontre un code en google q parece andar pero no me anda tiene un problema suponiendo que el arbol no tiene mas de 6 niveles por favor si alguien sabe como hacer esto q me ayude es bastante muy distinto a vb6 :S un saludo grande a todso y gracais por la colaboracion
|
|
|
En línea
|
|
|
|
Hadess_inf
Desesperado
Colaborador
Desconectado
Mensajes: 2.048
Nueva Vida
|
NO entiendo que quieres decir...quieres llenar los datos de una table en un treeview?. En el caso que asi sea, que dato es el que deseas mostrar ( CODIGO - DESCRIPCION - PADRE ). En el caso que quieras mostrar los datos de esa tabla el control solo tendria un nivel: dim con as new sqlconnection(".....") dim da as sqldataadapter dim dtb as data.datatable
sub Form_Load(byval.........) da= new sqldataadapter("select * from tabla",con) dtb = new data.datatable da.fill(dtb) dim a as integer for a=0 to dtb.rows.count-1 treeview1.nodes.add dtb.rows(a)("COLUMNA").tostring end for end sub
|
|
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
te explico a lo que me refiero, es que escribi apurado porque me estaba llendo. una parte de la tabla supongamos es asi: CODIGO DESCRIPCION PADRE 001 Item 1 (en blanco) 002 Item 2 001 003 Item 3 001 004 Item 4 001 005 Item 5 002 006 item 6 002 007 Item 7 005 008 Item 8 005 009 Item 9 005 010 Item 10 006el arbol quedaria de la siguiente manera: Item 1 |____Item 2 | |____Item 5 | | |___Item 7 | | |___Item 8 | | |___Item 9 | | | |____Item 6 | |___Item 10 | |____Item 3 |____Item 4
creo que quedo claro, el dato que se muestra es la descripcion. hace un rato estaba pensando en agregar los controles de vb6 a vb.net y usar la funcion que hize hace un tiempo para el mismo fin. pero tambien quiero saber como hacerlo directamente desde los controles de vb.net. muchas gracias por las respeustas. Saludos.
|
|
|
En línea
|
|
|
|
Hadess_inf
Desesperado
Colaborador
Desconectado
Mensajes: 2.048
Nueva Vida
|
Recursividad ¿? Sabras que es eso, supongo.
|
|
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
exacto, si se que es la recursividad. la funcion que hize en vb6 era recursiva, pero como en .net hay variaciones en el codigo todadvia no pude hacer una funcion semejante, ni usando la anterior como "base", hace 3 dia utilizo .net.
es posible hacer un llenado recursivo? sin limitacion? como la que hize en vb6 ya que la unica q encontre tenia un limite, si querias mas niveles habria que agregar codigo y era cada vez mas por cada agregado, pero no funcionaba
es posible?con o sin limitacion.
Saludos nuevamente
|
|
|
En línea
|
|
|
|
Hadess_inf
Desesperado
Colaborador
Desconectado
Mensajes: 2.048
Nueva Vida
|
En SQL Create database Ejemplo go use ejemplo go
create table rutina (codigo char(3) primary key, descripcion varchar(7), padre char(3)) go
insert into rutina values ('001','Item 1','') insert into rutina values ('002','Item 2','001') insert into rutina values ('003','Item 3','001') insert into rutina values ('004','Item 4','001') insert into rutina values ('005','Item 5','002') insert into rutina values ('006,'Item 6','002') insert into rutina values ('007','Item 7','005') insert into rutina values ('008','Item 8','005') insert into rutina values ('009','Item 9','005') insert into rutina values ('010','Item 10','006') En .NET Crea un nuevo proyecto, 1 formulario(Form1) y un control treeview(treeview1) Imports System.Data.SqlClient Public Class Form1 Dim con As New SqlConnection("integrated security=sspi;data source=(local);initial catalog=ejemplo") Dim da As SqlDataAdapter Dim dtb As DataTable Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load da = New SqlDataAdapter("select * from rutina", con) dtb = New DataTable da.Fill(dtb) Dim a As Integer For a = 0 To dtb.Rows.Count - 1 If dtb.Rows(a)("padre").ToString = " " Then TreeView1.Nodes.Add(dtb.Rows(a)("descripcion").ToString) añade(dtb.Rows(a)("codigo").ToString, TreeView1.Nodes(TreeView1.Nodes.Count - 1)) End If Next End Sub 'Añade, funcion recursiva Sub añade(ByVal cod As String, ByVal node As TreeNode) da = New SqlDataAdapter("select * from rutina", con) dtb = New DataTable da.Fill(dtb) 'variable que recorre las filas de la tabla Dim a As Integer For a = 0 To dtb.Rows.Count - 1 If dtb.Rows(a)("padre").ToString = cod Then node.Nodes.Add(dtb.Rows(a)("descripcion").ToString) añade(dtb.Rows(a)("codigo").ToString, node.Nodes(node.Nodes.Count - 1)) End If Next End Sub End Class
Espero sea util, mas demore poniendole color .... Necesito explicar ¿?
|
|
« Última modificación: 1 Noviembre 2007, 17:57 pm por hadess_inf »
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
muchisimas gracias por tu tiempo explico nuevamente mi situacion, cada vez mas oscura jaja utilize tu code pero despues de algun que otro retoque(por ejemplo la forma en que me conecto.) es como que nunca llega a su fin la ejecucion, no se porque sera, no se si sera la funcion o porq estoy procesando 7 mil registros. dejo el codigo "modificado" para mirar y analizar. En un modulo: Public ex As Exception 'variable que guardará una exepcion (error) Public MyConexion As New OleDb.OleDbConnection() 'objeto de ADO.net para conectar con la BD Public MiAdaptador As New OleDb.OleDbDataAdapter 'adaptador de datos Public dsDataSet As New Data.DataSet() ' objeto que guardará los resultados de la consulta Public strSQL As String 'para crear la consulta SQL
En el load del formulario(el formulario se llama frm_dimproducto) Private Sub frm_dimproducto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load strSQL = "SELECT * FROM DimTempCustomer" MiAdaptador = New OleDb.OleDbDataAdapter(strSQL, MyConexion.ConnectionString) MiAdaptador.Fill(dsDataSet, "MiTabla")
Dim a As Integer Dim Codigo, Descripcion, Padre As String
For a = 0 To dsDataSet.Tables("MiTabla").Rows.Count - 1 Codigo = Trim(dsDataSet.Tables("MiTabla").Rows(a).Item("DimT_Codigo")) Descripcion = Trim(dsDataSet.Tables("MiTabla").Rows(a).Item("DimT_Descripcion")) Padre = Trim(dsDataSet.Tables("MiTabla").Rows(a).Item("DimT_Padre"))
If Padre = "" Then TreeView1.Nodes.Add(Descripcion) añade(Codigo, TreeView1.Nodes(TreeView1.Nodes.Count - 1)) End If Application.DoEvents() Next End Sub
En el sub añade: Sub añade(ByVal cod As String, ByVal node As TreeNode) strSQL = "SELECT * FROM DimTempCustomer" MiAdaptador = New OleDb.OleDbDataAdapter(strSQL, MyConexion.ConnectionString) MiAdaptador.Fill(dsDataSet, "MiTabla2")
'variable que recorre las filas de la tabla Dim a As Integer Dim Codigo, Descripcion, Padre As String
For a = 0 To dsDataSet.Tables("MiTabla").Rows.Count - 1 Codigo = Trim(dsDataSet.Tables("MiTabla2").Rows(a).Item("DimT_Codigo")) Descripcion = Trim(dsDataSet.Tables("MiTabla2").Rows(a).Item("DimT_Descripcion")) Padre = Trim(dsDataSet.Tables("MiTabla2").Rows(a).Item("DimT_Padre"))
If Padre = cod Then node.Nodes.Add(Descripcion) añade(Codigo, node.Nodes(node.Nodes.Count - 1)) End If Application.DoEvents() Next End Sub
yo quisiera creer que es por un tema del dataset, repito que mi experiencia con .net es de solo 1 semana. tambien dejo el codigo de la funcion que realize en vb6 con el treeview perteneciente a los controles com, el cual no funciona por razones que desconozco, algun tipo de incopatibilidad.(directamente el treeview no funciona como deberia con .NET) Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'On Error Resume Next Dim Codigo, Descripcion As String Dim TotalReg As Long Dim Registro As DataRow Dim Nombre, Hijos, Child
'Me.MousePointer = 11 tv.Nodes.Clear()
strSQL = "SELECT * FROM DimTempCustomer WHERE DimT_Padre=''" MiAdaptador = New OleDb.OleDbDataAdapter(strSQL, MyConexion.ConnectionString) MiAdaptador.Fill(dsDataSet, "Raiz")
Codigo = Trim(dsDataSet.Tables("Raiz").Rows(0).Item("DimT_Codigo")) Descripcion = Trim(dsDataSet.Tables("Raiz").Rows(0).Item("DimT_Descripcion"))
tv.Nodes.Add(, , "Cabecera", "[" & Codigo & " ]" & "[" & Descripcion & "]")
'padres e hijos :) strSQL = "SELECT * FROM DimTempCustomer WHERE DimT_Padre='" & Codigo & "'" MiAdaptador = New OleDb.OleDbDataAdapter(strSQL, MyConexion.ConnectionString) MiAdaptador.Fill(dsDataSet, "Primero")
TotalReg = 0 For Each Registro In dsDataSet.Tables("Primero").Rows TotalReg = TotalReg + 1 Codigo = Trim(Registro.Item("DimT_Codigo")) Descripcion = Trim(Registro.Item("DimT_Descripcion"))
Nombre = Codigo & "A" Hijos = Hijos & "-//-" & Codigo tv.Nodes.Add("Cabecera", Child, Nombre, "[" & Codigo & "]" & "[" & Descripcion & "]")
Application.DoEvents() Next
'si no contiene hijos lo borro despues de la confirmacion If TotalReg <> 0 Then Verificar_hijos(Hijos) End If End Sub
Function Verificar_hijos(ByVal Hijos) 'On Error Resume Next Dim i As Integer Dim Codigo, Descripcion, Nombre, Child, Check_Hijo, Hijos2 As String Dim Hijo Dim TotalReg Dim Registro As DataRow
'desgloso la variable Temp, y recorro en un bucle para ver si tienen hijos Hijo = Split(Hijos, "-//-") For i = 1 To UBound(Hijo)
Check_Hijo = Trim(Hijo(i)) strSQL = "SELECT * FROM DimTempCustomer WHERE DimT_Padre='" & Check_Hijo & "'" MiAdaptador = New OleDb.OleDbDataAdapter(strSQL, MyConexion.ConnectionString) MiAdaptador.Fill(dsDataSet, Check_Hijo)
TotalReg = 0 For Each Registro In dsDataSet.Tables("Primero").Rows TotalReg = TotalReg + 1 Codigo = Trim(Registro.Item("DimT_Codigo")) Descripcion = Trim(Registro.Item("DimT_Descripcion"))
Nombre = Codigo & "A" tv.Nodes.Add(Check_Hijo + "A", Child, Nombre, "[" & Codigo & "]" & " " & Descripcion) Hijos2 = Hijos2 & "--" & Codigo Application.DoEvents() Next 'si ese hijo tiene hijos If Not TotalReg = 0 Then Verificar_hijos(Check_Hijo) End If Next i
Timer1.Enabled = False
End Function
Disculpen lo extenso del post. Saludos
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Treeview VB.net
Programación General
|
tazrebelraider
|
0
|
3,514
|
28 Febrero 2012, 05:53 am
por tazrebelraider
|
|
|
treeview.index
.NET (C#, VB.NET, ASP)
|
luismercedesrd
|
1
|
2,319
|
10 Junio 2016, 03:03 am
por AlbertoBSD
|
|
|
Seleccionar Nodo de Treeview
« 1 2 »
Programación Visual Basic
|
jack06
|
10
|
7,609
|
8 Mayo 2017, 21:11 pm
por jack06
|
|
|
Ayuda treeview
.NET (C#, VB.NET, ASP)
|
alexlopez91
|
1
|
2,498
|
18 Agosto 2017, 00:23 am
por Hadess_inf
|
|
|
TreeView y FullPath
Programación Visual Basic
|
temisto
|
0
|
1,568
|
13 Enero 2018, 22:48 pm
por temisto
|
|