Visual Basic - Listview Muchas filas

Life is soft - evento anual de software empresarial
 
Vista:

Listview Muchas filas

Publicado por Maria (1 intervención) el 19/12/2006 11:47:50
Holitaaa a todossss y todasss!

Estoy realizando un aplicativo que conecta con una gran base de datos y se baja información.

Al realizar consultas utilizo una listview donde le devuelvo las filas que cumplen ninguna o varias condiciones.

Aún así, el número de filas puede oscilar de unas 5.000 a unas 20.000. Cargar eso en un listveiw es muy lento y no muy útil para el usuario.

Alguién sabe alguna idea para indexarlo? - Dividir el total de filas devueltas por 500?
Que objeto uso para indicar el número de páginas' tiene la consulta en el listview.

¿Alguna otra idea?

Muchas gracias,

Maria.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Listview Muchas filas

Publicado por Edwin (303 intervenciones) el 20/12/2006 00:35:03
Uhmmmm.....

Utiliza un DataGrid con el objeto Command de ADO, es mucho más rapido no crees???

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Listview Muchas filas

Publicado por Alex (40 intervenciones) el 21/12/2006 12:35:54
en un módulo bas.....

Option Explicit
Public Cn As ADODB.Connection
Public sql As String
Public PaginaActual As Long
Public Paginas As Long
Public Const RegistrosPorPagina As Long = 500

Public Sub CargarValores(ListView As ListView, Consulta As String, Pagina As Long)
Dim rs As New ADODB.Recordset, fd As ADODB.Field
Dim i As Long, Regs As Long
Dim Final As Boolean
Dim tItem As ListItem

ListView.ListItems.Clear
rs.PageSize = RegistrosPorPagina
rs.Open Consulta, Cn, adOpenKeyset
If Pagina <= rs.PageCount Then rs.AbsolutePage = Pagina
Pagina = rs.PageCount
i = 1
For Each fd In rs.Fields
If ListView.ColumnHeaders.Count < i Then ListView.ColumnHeaders.Add
ListView.ColumnHeaders(i).Text = fd.Name
i = i + 1
Next
Final = rs.EOF
Do Until Final
i = 1
Regs = Regs + 1
For Each fd In rs.Fields
If i = 1 Then
Set tItem = ListView.ListItems.Add(, , "" & fd.Value)
Else
tItem.SubItems(i - 1) = "" & fd.Value
End If
i = i + 1
Next
rs.MoveNext
If (Regs >= RegistrosPorPagina) Or (rs.EOF) Then Final = True
Loop
rs.Close
Set rs = Nothing
End Sub
-------------------------------

En el Form.....
un ListView con la propiedad View = lvwReport
5 CommandButton (4 para moverse por las páginas y 1 para salir)
un Label para mostar el número de página.

Option Explicit

Private Sub Form_Load()
Set Cn = New ADODB.Connection
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\LaBaseDatos.mdb"
sql = "Select * FROM [LaTabla] Where [ElCampo] = 'UnaVariable'"
PaginaActual = 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = False
Anterior.Enabled = False
End Sub

Private Sub Anterior_Click()
If PaginaActual > 1 Then PaginaActual = PaginaActual - 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Siguiente.Enabled = True
Ultimo.Enabled = True
If PaginaActual = 1 Then
Anterior.Enabled = False
Primero.Enabled = False
End If
End Sub

Private Sub Primero_Click()
PaginaActual = 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = False
Anterior.Enabled = False
Siguiente.Enabled = True
Ultimo.Enabled = True
End Sub

Private Sub Siguiente_Click()
If PaginaActual < Paginas Then PaginaActual = PaginaActual + 1
Paginas = PaginaActual
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = True
Anterior.Enabled = True
If PaginaActual = Paginas Then
Ultimo.Enabled = False
Siguiente.Enabled = False
End If
End Sub

Private Sub Ultimo_Click()
PaginaActual = Paginas
CargarValores ListView1, sql, Paginas
Label1.Caption = "Página " & PaginaActual & " de " & Paginas
Primero.Enabled = True
Anterior.Enabled = True
Siguiente.Enabled = False
Ultimo.Enabled = False
End Sub

Private Sub Salir_Click()
End
End Sub

Fin ----------------------------------

Como verás la constante pública "RegistrosPorPagina" es la que, como su nombre dice, indica los registros que se visualizarán en cada página.
He probado con 500 en una tabla de 65.000 registros y 14 campos y tarda décimas de segundo en visualizar los datos.
De todas formas mostrar 500 registros por página me parecen demasiado, yo lo limitaría a un máx de 50.
Espero que te sirva, si tienes alguna duda, nos lo dices.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar