Urgente TreeView

14/03/2005 - 09:02 por Anonimo | Informe spam
Hola a todos.
Tengo un pequeño problema con el objeto treeview. Estoy realizando una
aplicación en la que las cabeceras de los registros se van a encontrar en un
treeview. Dependiendo de las tablas manejadas (indicadas en un TabControl),
el treeview cargará una u otra. El problema surge cuando se hace click sobre
un tab para que me vuelva a cargar de nuevo la información en el treeview.
Resulta que éste tarda mucho en cargarse (es como si por cada registro
lanzase algún evento) y creo que el problema está cuando se llama al método
treeview.nodes.clear() pero no estoy seguro. Necesito ayuda, gracias
Saludos

Preguntas similare

Leer las respuestas

#1 Rubén Vigón
14/03/2005 - 09:41 | Informe spam
Hola Anonimo,

Prueba a desactivar el redibujado del TreeView (con «BeginUpdate») y volver a activarlo (mediante «EndUpdate») tras la carga de todos sus nodos:

[...] Para mantener el rendimiento mientras se agregan elementos a TreeView de uno en uno, hay que llamar al método BeginUpdate. El método BeginUpdate impide que se dibuje el control hasta que se llama al método EndUpdate

[...] si se desean agregar los elementos de uno en uno, hay que utilizar el método BeginUpdate para impedir que el control TreeView dibuje durante las operaciones de inserción. Para permitir que el control reanude la acción de dibujo, hay que llamar al método EndUpdate cuando se hayan agregado todos los nodos de árbol a la vista de árbol

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvp-access.com
Respuesta Responder a este mensaje
#2 Anonimo
14/03/2005 - 10:01 | Informe spam
Hola Ruben...
Gracias por tu contestación, pero eso ya lo puse y sigue igual. El código
que tengo es el siguiente:


Me.TreeView.BeginUpdate()

Me.TreeView.Nodes.Clear()



Select Case Me.TabControl1.SelectedIndex()

Case 0 'TODOS

Me.pDataSet = Me.AccesoDatosTerm.rellenarDataSet(Me.pDataSet,
Me.pColeccionTablas.Item(2))

Me.pDataSet = Me.AccesoDatos.rellenarDataSet(Me.pDataSet,
Me.pNombreTablaprimaria)

Me.insertarPesas()

Me.insertarTermometros()

Case 1 'PESAS

Me.pDataSet = Me.AccesoDatos.rellenarDataSet(Me.pDataSet,
Me.pNombreTablaprimaria)

Me.insertarPesas()

Case 2 'TERMOMETROS

Dim tabla As String = Me.pColeccionTablas.Item(2)

Me.pDataSet = Me.AccesoDatosTerm.rellenarDataSet(Me.pDataSet, tabla)

Me.insertarTermometros()

End Select

Me.TreeView.Sorted = True

Me.TreeView.EndUpdate()

Me.pDataSet.EndInit()









"Rubén Vigón" escribió en el mensaje
news:%
Hola Anonimo,

Prueba a desactivar el redibujado del TreeView (con «BeginUpdate») y
volver a activarlo (mediante «EndUpdate») tras la carga de todos sus nodos:

[...] Para mantener el rendimiento mientras se agregan elementos a TreeView
de uno en uno, hay que llamar al método BeginUpdate. El método BeginUpdate
impide que se dibuje el control hasta que se llama al método EndUpdate

[...] si se desean agregar los elementos de uno en uno, hay que utilizar el
método BeginUpdate para impedir que el control TreeView dibuje durante las
operaciones de inserción. Para permitir que el control reanude la acción de
dibujo, hay que llamar al método EndUpdate cuando se hayan agregado todos
los nodos de árbol a la vista de árbol

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvp-access.com
Respuesta Responder a este mensaje
#3 Rubén Vigón
14/03/2005 - 11:50 | Informe spam
1. ¿Qué volumen tienen las tablas que muestras en el TreeView?
2. ¿Has probado a utilizar un «DataReader» en lugar de un «DataSet»?
3. ¿Y a traer los registros ya ordenados (ORDER BY...) del servidor en lugar de usar el método «Sort» del TreeView?

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvp-access.com
Respuesta Responder a este mensaje
#4 Anonimo
14/03/2005 - 13:01 | Informe spam
Hola de nuevo
Las tablas como máximo deben tener unos 50 registros cada una.
He probado todo eso que me dices y sigue haciendo lo mismo...

saludos y gracias por tu ayuda

"Rubén Vigón" escribió en el mensaje
news:Oxd%
1. ¿Qué volumen tienen las tablas que muestras en el TreeView?
2. ¿Has probado a utilizar un «DataReader» en lugar de un «DataSet»?
3. ¿Y a traer los registros ya ordenados (ORDER BY...) del servidor en lugar
de usar el método «Sort» del TreeView?

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvp-access.com
Respuesta Responder a este mensaje
#5 Rubén Vigón
14/03/2005 - 15:45 | Informe spam
Acabo de hacer una pequeña prueba: rellenar un TreeView con 1.000 nodos (cadenas de texto de longitud media 40 caracteres) mediante un «System.Data.SqlClient.SqlDataReader» tardó entre 0.09 y 0.14 segundos (en un Pentium 4 a 1.7 Ghz con 768 Mb de RAM); para 2.000 elementos, entre 0.38 y 0.45 segundos

En tu caso (50 nodos) tardó menos de 0.01 segundos; para ese volumen de datos el tiempo de carga del TreeView debería ser imperceptible... ¿estás seguro de que la demora no la causa alguna de tus funciones «rellenarDataSet», «insertarPesas» e «insertarTermometros»?

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvp-access.com
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida