Autor Tema: Como cargar una tabla en un Listview  (Leído 7733 veces)

0 Usuarios y 1 Visitante están viendo este tema.

fx700

  • Kilobyte
  • **
  • Mensajes: 95
  • Reputación: +4/-2
    • Ver Perfil
Como cargar una tabla en un Listview
« en: Enero 02, 2011, 11:46:26 pm »
He encontrado varios ejemplos en internet pero quisiera saber si alguien del foro comparte el codigo o funcion que utiliza en sus proyectos para la carga de los listview6 por que la verdad no me decido cual utilizar y tampoco soy experto como para examinar cual ejemplo va mas rapido y cual tiene el codigo mas optimizado y no hace tantos bucles.

Algo que no he podido hacer es como cargar las cabeceras una sola vez, osea darle el ancho y formato, por ejemplo en el evento form_activate o el que corresponda.


SKL

  • Administrador
  • Kilobyte
  • *****
  • Mensajes: 52
  • Reputación: +9/-2
  • GRIPE A
    • Ver Perfil
Re:Como cargar una tabla en un Listview
« Respuesta #1 en: Enero 02, 2011, 11:55:58 pm »
dim lItem as ListItems

do until  recordset.EOF

set lItem = listview(,,recordset.data(1))
item.subitem(1) = recordset.data(2)
item.subitem(2) = recordset.data(3)

etc...


recordset.movenext
loop


fijate que onda, te lo escribie a lo INDIO

wolf_kof

  • Visitante
Re:Como cargar una tabla en un Listview
« Respuesta #2 en: Enero 03, 2011, 01:02:29 pm »
dim lItem as ListItems

do until  recordset.EOF

set lItem = listview(,,recordset.data(1))
item.subitem(1) = recordset.data(2)
item.subitem(2) = recordset.data(3)

etc...


recordset.movenext
loop


fijate que onda, te lo escribie a lo INDIO

ese ejemplo esta bonito pero yo no lo usaria.....

yo uso este:

Código: (VB) [Seleccionar]
Sub rellenar()

ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear

ListView1.ColumnHeaders.Add 1, , "", 250
ListView1.ColumnHeaders.Add 2, , "Ciclo", 600
ListView1.ColumnHeaders.Add 3, , "Carnet", 1100
ListView1.ColumnHeaders.Add 4, , "Grado", 2900
ListView1.ColumnHeaders.Add 5, , "Nombre", 3400

Do Until inscripcion.EOF
        If inscripcion!sexo = "MASCULINO" Then
        ListView1.ListItems.Add 1, , , , 1
        End If
        If inscripcion!sexo = "FEMENINO" Then
        ListView1.ListItems.Add 1, , , , 2
        End If
        ListView1.ListItems(1).ListSubItems.Add 1, , inscripcion!ciclo
        ListView1.ListItems(1).ListSubItems(1).Bold = True
        If inscripcion!sexo = "FEMENINO" Then
        ListView1.ListItems(1).ListSubItems(1).ForeColor = RGB(255, 145, 145)
        End If
        ListView1.ListItems(1).ListSubItems.Add 2, , inscripcion!Carnet
        ListView1.ListItems(1).ListSubItems(2).Bold = True
        If inscripcion!sexo = "FEMENINO" Then
        ListView1.ListItems(1).ListSubItems(2).ForeColor = RGB(255, 145, 145)
        End If
        ListView1.ListItems(1).ListSubItems.Add 3, , inscripcion!grado
        ListView1.ListItems(1).ListSubItems(3).Bold = True
        If inscripcion!sexo = "FEMENINO" Then
        ListView1.ListItems(1).ListSubItems(3).ForeColor = RGB(255, 145, 145)
        End If
        ListView1.ListItems(1).ListSubItems.Add 4, , inscripcion!nombre
        ListView1.ListItems(1).ListSubItems(4).Bold = True
        If inscripcion!sexo = "FEMENINO" Then
        ListView1.ListItems(1).ListSubItems(4).ForeColor = RGB(255, 145, 145)
        End If
inscripcion.MoveNext
Loop


este lo ocupo para hacerlo atractivo te dejo una pic de como se ve


pero este es el codigo original....

Código: (vb) [Seleccionar]
Sub rellenar1()

ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear

ListView1.ColumnHeaders.Add 1, , "No.", 500
ListView1.ColumnHeaders.Add 2, , "Apellidos, Nombres", 3700

Do Until alumnos.EOF
    ListView1.ListItems.Add 1, , alumnos!orden
        ListView1.ListItems(1).ListSubItems.Add 1, , alumnos!nombre
alumnos.MoveNext
Loop


puedes hacer los filtrados antesde cargar el listview facilmente ya que el listview agarra el recordset que estas utilizando

por ejemplo

Código: (vb) [Seleccionar]
Private Sub PushButton1_Click()

dim alumnos as new adodb.recordset

'El termino Data es lo adodb.connection con cualquier proveedor de datos.
alumnos.open "Select * from Alumnos", Data, adOpenDynamic, adLockOptimistic

alumnos.filter = "nombre = 'Juan Arturo Sandoval'"

rellenar1


ahi sta.... cualquier cosa preguuuuuuuuuuuuuuuuuuuuuuuuuuuuuntame......
« última modificación: Enero 03, 2011, 01:04:05 pm por wolf_kof »

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Como cargar una tabla en un Listview
« Respuesta #3 en: Enero 14, 2011, 04:14:02 am »
Es muy parecido al de wolf_kof, sin pretender robarle el crédito !!! ;D

Private Sub Form_Load()
                   
                    '
                    '
                    '//

                    Set rcsMiembros =  New ADODB.Recordset
                    '//
                    rcsMiembros.Open [Sentencia SQL] & " ORDER BY " & _
                    "[Primer Apellido] ASC;", [String de conexión], _
                    adOpenStatic, adLockReadOnly, adCmdText
                    '//
                    With lvwListado     '// Listview... cragas los encabezados de las columnas, _
                                                      determinas el ancho de la columna y la alineación de _
                                                      la misma...
                            .View = lvwReport
                            .GridLines = True
                            .LabelEdit = lvwManual
                            .ColumnHeaders.Add , , "# Inscripción", 1300
                            .ColumnHeaders.Add , , "Cédula Id.", 1600, lvwColumnRight
                            .ColumnHeaders.Add , , "Nombres", 2500, lvwColumnLeft
                            .ColumnHeaders.Add , , "Apellidos", 2500, lvwColumnLeft
                            .ColumnHeaders.Add , , "Fecha de Nacimiento", 2100, lvwColumnRight
                            .ColumnHeaders.Add , , "Teléfono", 1500, lvwColumnLeft
                            '
                            '
                            '
                            '

                    End With
                    '// Sub para llenar el Listview enviandole el recordset...
                    LlenarListView rcsMiembros
End Sub

'//     Esta subrutina se encarga de llenar el control ListView "lvwListado"...
Private Sub LlenarListView(rcsRec As ADODB.Recordset, bPrinc as boolean, Optional SQL _
                                            As String = "SELECT * FROM [Miembros (Mayores de 18)] " & _
                                            "ORDER BY [Primer Apellido] ASC;")
                    '
                    '//

                    With rcsRec
                            If bPrinc = True Then
                               If .State = adStateOpen Then
                                  .Close
                               End If
                               .Open SQL, adoConnSCADIG, adOpenStatic, _
                                          adLockReadOnly, adCmdText
                            End If
                            If Not
(.BOF And .EOF) Then
                               lvwListado.ListItems.Clear
                               .MoveFirst
                               Do While Not .EOF
                                     Set lstLi = lvwListado.ListItems.Add(, , _
                                                      Format(.Fields![Id Número], "         " & "000000") & "")
                                     lstLi.SubItems(1) = _
                                                       Format(.Fields![Cédula de Identidad], "0#,###") & ""
                                     lstLi.SubItems(2) = .Fields![Primer Nombre] & " " & _
                                                                    .Fields![Segundo Nombre] & ""
                                     lstLi.SubItems(3) = .Fields![Primer Apellido] & " " & _
                                                                    .Fields![Segundo Apellido] & ""
                                     lstLi.SubItems(4) = .Fields![Fecha de Nacimiento] & ""
                                     lstLi.SubItems(5) = Format(.Fields![Teléfono Celular], _
                                                                                  "@@@@-@@@@@@@") & ""
                                    '
                                     '
                                     '
                                     '

                                     .MoveNext
                              Loop
                            Else
                                   MsgBox "No existen registros que reunan estos requisitos !!!", _
                                                 vbExclamation + vbOKOnly, "No hay..."
                            End If
                            '
                            '
                            '

                            .Close
                    End With
End Sub

Espero que pueda servir de algo !!!
saludos !!! :)
« última modificación: Enero 14, 2011, 04:38:24 am por ADONAIRAFA »
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Como cargar una tabla en un Listview
« Respuesta #4 en: Enero 14, 2011, 03:54:55 pm »
Yo tengo estas funciones para usar ucListView casi automaticamente (funciona con el normal y con el mio xD)
En un modulo
Código: (vb) [Seleccionar]

Public Sub LV_Preparar(LV As ucListView)
    Call LV.Initialize
    Call LV.InitializeImageListHeader
   
    Dim i As Integer
    If LV.ColumnCount > 0 Then
        For i = LV.ColumnCount To 0 Step -1
            Call LV.ColumnRemove(i)
        Next
    End If
End Sub

Public Sub LV_Terminar(LV As ucListView)
    With LV
        Dim nCol As Integer
        Dim lCol As Integer
        lCol = LV.ColumnCount - 1
        For nCol = 0 To lCol
            .ColumnIcon(nCol) = -1
        Next nCol
           
        .FullRowSelect = True
        .GridLines = True
        .BorderStyle = bsThin
        .ViewMode = [vmDetails]
        .RaiseSubItemPrePaint = True ' Para poner efecto cebra en las filas
    End With
End Sub

Public Sub LV_Rellenar(LV As ucListView, rsDatos As Recordset)
    LV.Clear
    Dim itemid As Integer
    Dim i As Integer
    Dim nCols As Integer
    Dim s As String
    nCols = LV.ColumnCount
    Dim colLen() As eColumnAutosizeConstants
    ReDim colLen(nCols)
    itemid = 0
    For i = 1 To nCols
        colLen(i) = caHeader
    Next
    If nCols >= rsDatos.Fields.Count Then nCols = rsDatos.Fields.Count - 1
    ReDim Preserve colLen(nCols)
    While Not rsDatos.EOF
        If IsNull(rsDatos(0)) Then s = "" Else s = rsDatos(0)
        Call LV.ItemAdd(itemid, rsDatos(0), 0, 0)
        For i = 1 To nCols
            If IsNull(rsDatos(i)) Then s = "" Else s = rsDatos(i)
            Call LV.SubItemSet(itemid, i, s, 0)
            If colLen(i) = caHeader Then If Len(s) > Len(LV.ColumnText(i)) Then colLen(i) = caItem
        Next
        rsDatos.MoveNext
        itemid = itemid + 1
    Wend
   
    For i = 1 To nCols
        Call LV.ColumnAutosize(i, colLen(i))
        If colLen(i) = caHeader Then LV.ColumnWidth(i) = LV.ColumnWidth(i) + 24
    Next
End Sub

Public Sub LV_Ajustar(LV As ucListView)
    Dim i As Integer
    For i = 1 To LV.ColumnCount - 1
        Call LV.ColumnAutosize(i, caHeader)
    Next
End Sub

Uso:

Código: (vb) [Seleccionar]
Private Sub Form_Load()
    ' lstCli = ucListView en el formulario
    Call LV_Preparar(lstCli)
    With lstCli
        Call .ColumnAdd("Nombre", 100, caLeft)
        Call .ColumnAdd("Edad", 100, caLeft)
    End With
    Call LV_Terminar(lstCli)
    Call CargarClientes
End Sub

Private Sub CargarClientes()
    Dim rsDatos as Recordset
    '' rellenan rsDatos

     ' Si la consulta salio bien (hay filas para mostrar)
     Call RellenarListView(lstCli, rsDatos)
     ' Si la consulta dio vacia o salio mal
     Call LV_Ajustar(lstCli)
End Sub

Private Sub lstCli_OnSubItemPrePaint(ByVal Item As Integer, ByVal SubItem As Integer, TextBackColor As Long, TextForeColor As Long, Process As Boolean)
    ' Efecto cebra!
    If (Item Mod 2) Then
        TextBackColor = RGB(220, 220, 220)
        TextForeColor = RGB(0, 0, 0)
        Process = True
    End If
End Sub

Y listo :P
« última modificación: Enero 14, 2011, 03:57:07 pm por raul338 »

fx700

  • Kilobyte
  • **
  • Mensajes: 95
  • Reputación: +4/-2
    • Ver Perfil
Re:Como cargar una tabla en un Listview
« Respuesta #5 en: Enero 14, 2011, 08:08:15 pm »
Gracias a todos me ha servido bastante.

Otra consulta como le hago para ponerle un progressbar en caso haya demaciados registros y si es factible poner una opcion para detener la ejecucion en caso por error se hayan llamado a miles de registros y el programa no se quede colgado.

Por ahi he visto un ejemplo de paginacion que tambien pretendo aplicar.

Saludos