Filtrar datos en ListView

Espero que me puedas dar una mano con un problema que tengo.
Estoy queriendo llenar un Listview desde un recordset (ADO), mirando un código fuente he podido cargar todos los registros del Recordset en el List, pero mi problema es que solo quiero cargar dos campos de los 7 que tiene mi recordset.
Ejemplifico con código:
For i = 0 to rs.Fields.Count - 1
ListView1.ColumnHeaders.Add , , rs.Fields(i).Name
Next

Ahí cargo las cabezeras, eso funciona, pero lo que quiero es cargar solo dos  campos de mi tabla ("nombre_materia" y "profesor")
Si escribo ListView1. ColumnHeaders. Add,, rs. Fields("nombre_materia.").Name Me funciona, pero solo carga una columna y no se como agregar la segunda.
Para cargar los elementos:
Dim item As Listitem ' estas son las variables declaradas para que se entienda mejor
Dim campo As Integer
Dim i As Integer
While Not rs.EOF
    Set item = ListView1.ListItems.Add(, , rs.Fields(0))
    i = 1
    For campo = 1 To rs.Fields.Count - 1
        If Not IsNull(rs.Fields(campo)) Then
            item.SubItems(i) = rs.Fields(campo)
        End If
        i = i + 1
    Next
    Rs. MoveNext
Wend

Acá estoy más perdido que con el de las cabezeras, no entiendo como agregar determinados campos y no todos, tampoco se bien a que se refiere con Subitem.
Podrías dame una mano y tratar de explicarme como hago para que de mi recorset con varios campos, filtre y cargue solo los 2 (o más, pero no todos).
Te agradezco mucho desde ya. Saludos
Pd: otra consultita de menor interés ¿Con qué propiedad se cambia el color de la cabecera de Listview?
Respuesta
2
Listview1. Columnheaders. Add,,"Nombre Materia"
Listview1. Columnheaders. Add,,"Nombre Profesor"
Luego... para llenar los registros del Listview
Solo debes llenar la propiedad Text del ListViewItem y 1 subitem. Cada SubItem es una columna, pero a partir de la segunda columna del listview.
Para llenar la lista :
Primero llenas las columnas y despues la asigna al listview
item.text = rs.Fields("materia")
Item. Subitems. Add,, rs. Fields("profesor")
Listview1. ListItems. Add item
Muchas Gracias sinceramente por responder tan rapido.
Me quedo claro que es el SubItem y como agregar las cabezeras, pero sigo sin poder llenar las columnas con datos de mi recordset.
Hoy estuve tratando todo el día de varias formas, pero no lo conseguí, con respecto al código que me pasaste: yo no puedo agregar Add (Item. Subitems.ADD) Tal ves tenga algo mal yo.
Te paso un ejemplo de código que me despejara las dudas
La Tabla Materia Tiene varios campos, Abro todos pero solo voy a mostrar dos: "Nombre_materia", "Periodo" (Así no es mi código, pero creo que me quedara más claro)
Private Sub cargo_list()
Item As ListItem
ListView1.View = lvwReport
rs.CursorLocation = adUseClient
rs.Open "select * From Materia", cnn, adOpenDynamic, adLockPessimistic
ListView1.ColumnHeaders.Add , , "Nombre Materia"
ListView1.ColumnHeaders.Add , , "Periodo"
'Bueno ahí quede, (Bastante malo lo mio)
Poniendo los siguiente: Set item = ListView1.ListItems.Add(, , rs.Fields("Nombre_materia")) solo logro agregar el primer registro del Campo "Nombre_materia" a la primer columna de mi Listview.
Ahí esta mi problema que te lo divido en dos consultas:1) Como cargo(¿Bucle?) Todos los registros (unos 15 debe haber)de mi campo (nombre_materia) en la primer columna. Y 2) como cargó en la otra columna "periodo" sus respectivos datos.
Bueno espero que nuevamentes me puedas ayudar, te agradezco por tu ayuda.
Saludos!
Pd:El código que mandé es solo de ejemplo (por si notas alguna incongruencia), mi aplicación es un poco más compleja, pero con de esa forma creo que voy a entender mejor
Bueno lo del set item =..... no va
seria algo como :
Dim item as new ListViewItem
item.text = rs.Fields("nombre_materia")
item.SubItems.add (rs.Fields("periodo"))
' agrego el listitem al Lisview
ListView1. ListItems. Add(item)
Gracias por responderme, me sirvió mucho, igualmente no pude hacer andar el código esto no me permite Dim item as new ListViewItem.
Muchas Gracias, Saludos

1 respuesta más de otro experto

Respuesta
1

Con esta macro abres la conexión:

Public Conexion As New ADODB.Connection

Public Rs As New ADODB.Recordset

Sub Conecta()

Set miConexion = New ADODB.Connection

With Conexion

.Provider = "Microsoft.ACE.OLEDB.12.0"

.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\ejemplo.accdb"

.Open

End With

End Sub

luego pegas esto en userform initialize:

Private Sub UserForm_Initialize()

Dim Consulta As String

Call Conecta

Set Rs = New ADODB.Recordset

Consulta = "select*from datos order by materia"

Rs.Open Consulta, Conexion, adOpenKeyset, adLockOptimistic

With Lista

.Gridlines = True

.View = lvwReport

.FullRowSelect = True

.ColumnHeaders.Add Text:="Materia", Width:=70

.ColumnHeaders.Add Text:="Profesor", Width:=80

End With

Rs.MoveFirst

While Not Rs.EOF

Set Item = Lista.ListItems.Add(Text:=Rs!Materia)

Item.SubItems(1) = Rs!Profesor

Rs.MoveNext

Wend

Set Conexion = Nothing

Set Rs = Nothing

no te olvides de cerrar la conexión al salir del formulario

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas