Listview… “Un amigo inseparable”

En cada desarollo que realizo es casi inevitable tener que utilizar un listview. Por eso lo considero un control muy util. Al principio me costo un poco entender su funcionamiento y tardé varios meses en descubrir todo su potencial… pero desde que logramos entendernos somos inseparables.

Definición
Para definirlo de una forma sencilla diré que un listview es una colección de objetos listviewitem’s

Para poder poblar un listview se debe primero crear un objeto listviewitem (o varios) y luego se anexa ese objeto al listview utilizando el método add de la propiedad items.


'Se supone que tenemos un formulario WinForm llamado Form1
'con un control listview llamado ListView1

Dim item As ListViewItem
item = New ListViewItem("Cliente 1")
ListView1.Items.Add(item)

'También lo podemos llenar utilizando un bucle for/next
For i As Integer = 1 To 10
Dim item As ListViewItem
item = New ListViewItem("Cliente " & i)
ListView1.Items.Add(item)
Next

Un objeto listviewitem puede almacenar varios datos como por ejemplo NOMBRE, APELLIDO,
DOMICILIO, etc.

Para ello es necesario agregarle (add) a cada objeto listviewitem los subitems necesarios.


Dim item As ListViewItem
item = New ListViewItem("Nombre 1")
'Ahora a este objeto item le agrego un
'subItem para cada dato adicional
item.SubItems.Add("Apellido 1")
item.SubItems.Add("Domicilio 1")
item.SubItems.Add("Teléfono 1")

'Solo resta agregar el objeto item a la
'colección de objetos listviewitem's del
'listview1 de la misma forma que lo hemos hecho antes
ListView1.Items.Add(item)

Un listview cuenta con distintas vistas para mostrar los datos, estas son Details,
LergeIcon, List, SmallIcon y Tile.

A continuación una descripción de cada una tomada de la ayuda de visual studio:

Details Cada elemento aparece en una línea independiente con información más detallada acerca
de cada elemento organizada en columnas. La columna situada más a la izquierda contiene
un pequeño icono y una etiqueta, y las columnas siguientes contienen los subelementos
especificados por la aplicación. Las columnas incluyen un encabezado que puede mostrar
un título correspondiente a la columna. El usuario puede cambiar el tamaño de cada
columna en tiempo de ejecución.
LargeIcon Cada elemento aparece como un icono de tamaño normal debajo del cual figura una
etiqueta.
List Cada elemento aparece como un icono pequeño a cuya derecha figura una etiqueta.
Los elementos están organizados en columnas sin encabezado.
SmallIcon Cada elemento aparece como un icono pequeño a cuya derecha figura una etiqueta.
Tile Cada elemento aparece como icono de tamaño normal con la etiqueta del elemento e
información del subelemento situado a su derecha. La aplicación especifica la información
del subelemento que aparece. Esta vista sólo está disponible en Windows XP y en
la familia de Windows Server 2003. En sistemas operativos anteriores, este valor
se omite y el control ListView se muestra en la vista
LargeIcon

.

Para poder ver los datos cuando utilizamos la vista “Details” debemos primero crear
las columnas del listview deacuerdo a la cantidad de items y subitems que tendremos.


Dim column1 As New System.Windows.Forms.ColumnHeader
Dim column2 As New System.Windows.Forms.ColumnHeader

Dim column3 As New System.Windows.Forms.ColumnHeader
Dim column4 As New System.Windows.Forms.ColumnHeader

column1.Text = «Nombre»

column2.Text = «Apellido»
column3.Text = «Domicilio»
column4.Text = «Teléfono»

column1.Width = 40
column2.Width = 30
column3.Width = 30
column4.Width = 20

'siempre es importante asegurarse que no existan
'columnas y para eso es mejor borrarlas antes de
'agregar las nuevas columnas

ListView1.Columns.Clear()

'Ahora agregamos las columnas nuevas
ListView1.Columns.Add(column1)
ListView1.Columns.Add(column2)
ListView1.Columns.Add(column3)
ListView1.Columns.Add(column4)

ListView1.View = View.Details

La configuración de las columnas también se puede hacer en modo diseño desde la
propiedad columns, esto no s abrirá un asistente desde el cual se administran las
columnas del listview.
Propiedades

Hay una serie de propiedades muy utiles que no puedes dejar de conocer, a continuación
mencionaré las que yo más utilizo. El resto de las propiedades las dejo para que
ejercites tu capaciddad de investigación.

FullRowSelect Esta propiedad siempre la seteo un True y su función es resaltar toda la linea cuando
trabajo en vista Details.
MultiSelect Habilita (true) o deshabilita (false) la selección de multiples elementos dentro
del listview.
HideSelection Si la propiedad está en True no verás que elemento está seleccionado cuando el control
pierde el foco. En algunos casos es importante deshabilitar (false) esta opción
para no perder de vista el item activo.



29 Responses to “Listview… “Un amigo inseparable””

  1. nino jesus rodriguez quispe dice:

    buen dia doctor:
    en primer lugar espero no incomodarle, quisiera q me ayudara con respecto a como llenar el listview, siempre use el DataGridView.. y bueno la verdad no c como llenar mi listview pues he probado q no es lo mismo… claro que quiero llenar mi listview con los registro devueltos de una tabla de sqlServer por medio de una consulta por ejemplo “SELECT Id,Descripcion FROM TablaPaises”

    quisiera saber tambien como agregar un registro q tengo en un textbox a mi listview pero sin afectar a mi base de datos, y cuando de click en el boton grabar de mi ventana q estoy trabajando el registro q agregue a mi listview se agregue ahora si a mi base de datos…

    espero pueda ayudarme.. y agradeciendole por su ayuda.. y su aporte…

    atte. nino jesus rodriguez quispe

  2. nino jesus rodriguez quispe dice:

    gracias a su respuesta doctor.. si estuve leyendo el articulo, y me ayudo bastante.. le agradesco su tiempo.. como siempre.. el ser ayudado en problemas como estos y poder ayudar con lo que sabemos.. hace que los conocimientos crezcan y mucho mas encontrar nuevas cosas.. y diseñar otras mas…

    y gracias doctor, problema solucionado

  3. Jimmy Saenz dice:

    que tal, primero que todo, felicitaciones por tu blog, me ha servido de mucho. Quisiera que respondieras una inquietud que tengo si no es mucha molestia, ya que tienes un gran dominio en el control listview, estoy realizando un reproductor en vbnet. el listview lo utilizo para todos los paneles(reproduccion, listas de canciones, filtros…), en el caso de busqueda, cargo en un listview todas las canciones que han sido agregadas a la BD, en el form se encuentra un textbox donde se introduce la cancion a buscar y el boton de busqueda, utilizo un FindItemWithText para la busqueda.. y todo bien, en un msgbox, imprimo que la cancion se encuentra o no, perooo el favor que necesito de parte tuya,es que quiero que haga un focus en el item encontrado en el listview, no se como agregarle index a los items, simplemente uso: listview.items.add(CancionesEncontradas)
    entonces, haber si puedes ayudarme porfavor,esperando una pronta respuesta.gracias

  4. Jimmy Saenz dice:

    buenisimo el post, sencillo e interesante, ya solucione el problemita gracias. te comente en el post anterior sobre el proyectito que estoy haciendo de un reproductor, quisiera que estuvieramos en contacto para alguna pequena consulta, si puedes agregarme a tus contactos seria buenisimo, una ? mas, aparte del control de WMP que tre VB net existe otra forma de reproducir mp3, para no depender de la libreria de wmp? esperando tu pronta respuesta de nuevo, un gracias de antemano

  5. nino jesus rodriguez quispe dice:

    buen dia doctor.

    nuevamente recurriendo a su ayuda, quisiera saber cual es la diferencia entre el datagridview y listview.
    y cual de los dos controles me recomiend a usar para un manejo de mas de 1000 registros por tabla en una base de datos..

    le agradesco de ante mano.

    y feliciandole de nuevo por los grandes aportes…

  6. deVIShop dice:

    saludoss:
    E leido q manejas MUCHO EL listview

    tengo una dudaa q e tenido durante casi tres dias q no e podido resolverla es

    ¿como calculas el intervalo de fechas que estan en una columna de un listview?

    ——————————————–

    Descripcion:
    programe un datetimepicker para q cada ves q se escoga una fecha se agregue en una columna del list view ..

    La cuestion es q :
    una ves agregadas en el listview no encuentro la manera de poder obtener el intervalo de la primera fecha con la segunda , la segunda con la tercera i asi sucesivamente …

    talves se te presento un tema parecido como calcular fechas q se agregaron en un listview …
    SI tienes alguna recomendacion o la respuesta esperare tu consego xD

    algo un poco mas descriptivo del problema q tengo en esta web :::

    http://www.forosdelweb.com/f79/sumar-fechas-listview-711801/

    GRACIASSSSSSSSSSSS…..

  7. Angelandro Magno dice:

    una pregunta sobre tu post,
    como hacer para agregar 2 items a mi listview con la propiedad view igual a largeicons y quiciera que cada items tuviera una imagen diferente?

  8. Nicko lopera dice:

    Cordial saludo,

    de antemano agredezco tu colaboracion. mi duda es la siguente: si yo tengo ya agredados varios items a un listview. ninguno de estos esta seleccionado(osea no le he dado click encima).
    cómo hago para saber por codigo que el listview no tiene ningun item seleccionado?

    algo como listview.listitems(i).select en vb 6.0

    mil gracias

  9. gato sauro dice:

    pues tenemos un amigo en comun :D solo que en vb.net 2008 no le encuentro todas las opciones (propiedades) que me eran utiles para configurarlo … tendra la misma capacidad que el de vb 6??

    • Eliseo dice:

      Hola:

      Te comento que el nuevo control ListView de visual basic .net expone la mayoría de las propiedades y métodos que ya tenía en Visual Basic 6 y sólo deberás tener en cuenta algunos nombres que han cambiado.
      El control ListView expone únicamente algunas nuevas propiedades. Este grupo incluye Activación (especifica si los elementos se activarán con uno o dos clics), HeaderStyle (si se puede hacer clics sobre los titulos de la columnas) Scrollable (deberá definirse como False para impedir el desplazamiento), LargeImageList (el control ImageList utilizado para las imagenes en modo iconos grandes) y smallImageList (el control ImageList utilizado en todos los demas modos). Observa que la propiedad view define el modo de visualización, como sucedía en Visual Basic 6, pero el modo Report ha sido renombrado ahora como modo Details.

      Espero haber despejado un poco tus dudas.

      Saludos

  10. Gabriel dice:

    Hola espero puedas responderme…
    He programado un listview para que me carge un listado de clientes directamente desde la base de datos, mi problema es que quiero que se seleccione el cliente del listview con la opcion FullRowSelect y volver a obtener los datos desde la fila seleccionada, para asi volver a crear un objeto “cliente” a partir de los datos del listview, nose si entenderas asi como lo explico, muchas gracias por todo, gracias por tu tiempo.

  11. Piojo dice:

    Hola Eliseo, primero quiero felicitarte por el blog.. esta muy bueno y me sirvio bastante.
    Ahora te hago una consulta:
    Teniendo en cuenta el primer ejemplo
    item = New ListViewItem(“Nombre 1″)
    ‘Ahora a este objeto item le agrego un
    ‘subItem para cada dato adicional
    item.SubItems.Add(“Apellido 1″)
    item.SubItems.Add(“Domicilio 1″)
    item.SubItems.Add(“Teléfono 1″)
    ‘Solo resta agregar el objeto item a la
    ‘colección de objetos listviewitem’s del
    ‘listview1 de la misma forma que lo hemos hecho antes
    ListView1.Items.Add(item)

    Como puedo hacer para pasar los subitems a diferentes textbox???

    Saludos y gracias

    • Piojo dice:

      Ya lo solucione, lo saque de la guia para modificar los datos del listview.

      Saludos

    • Eliseo dice:

      para referirte a los distintos subitems solo tienes que utilizar un indice como te muestro a continuación:

      textBox1.Text = item.subitems(0).text
      textBox2.Text = item.subitems(1).text
      textBox3.Text = item.subitems(2).text

      Suerte

  12. martin dice:

    necesito que me ayuden con un interrogante que tengo hace ya mucho tiempo y nadie me lo pudo resolver. Cargo una base de datos completa en un listview, el tema es que a medida que voy agregando datos estos se cargar al final y llega un momento que no se ven como puedo hacer para mantener el scroll bar al final para poder ver lo ultimo que voy agregando.
    Desde ya muchas gracias

  13. Julio Da Silva dice:

    Amigo tengo un problema. Al reiniciar mi sistema operativo o formatear mi equipo en mi sistema no puedo ver los listview desde el codigo de programacion. Estoy usando Visual Net 2003.
    Para dar un poco mas de informacion el programa primero fue creado en VB4 migrado a VB6 y ahora trabajando en Visual Net 2003. Que me hace falta instalar para poder ver los listview en el codigo fuente..-

  14. kiraleo dice:

    olahe buscado mucho sobre listview y me gustaria que me ayudaran con la parte de pasar a un siguiente item en un listview
    como con una funcion listview.nextitem por codigo como paara hacer dos botones un de siguiente y otro de previous

    agradezco su ayuda

  15. Padarinis dice:

    Hola en el VB.60 Habia la posibilidad de poner un key y esto era oculto. Lo que sucede es que tengo que llenar un listview con numerados del 1 al 10, pero las ID de cada cliente tiene que estar oculto. asi al abrir un listview. Puero cargar los datos enuna ventana a partir dela ID que estaria escondido. AH. y tambien se podia poner iconos a cada fila..

  16. gabox dice:

    Hola:

    Muy bueno tu blog, además tiene mucha estética… eso es raro en los programadores;)
    Ahora, mi pregunta es la siguiente:
    Tienes algún ejemplo donde se llene un listview a partir de una hashtable que contiene varias instancias de una clase específica? Se que debo utilizar un Foreach, pero cuando se ejecuta, el listview queda “en blanco”. No sé si me exprese bien.
    Muchas gracias por tu respuesta.

    • gabox dice:

      Hola:

      Sobre mi problema quiero aclara que he descubierto como hacerlo funcionar, solo que debo hacerlo fuera del tabcontrol donde se encontraba el listview, porque estaba dentro de un tabcontrol y no funcionaba ¿que será?
      Muchas gracias por cualquier respuesta.

  17. MIGUEL dice:

    hola
    espero alguien pueda ayudarme.
    mi problema con list view es que le mando informacion por medio de codigo ya que yo genero las claves y los datos de mis productos con un poco de informacion que me proporciona el usuario y despues los datos que esten en el listview los mando a una base de datos, hasta aqui todo lo tengo bien pero en ocaciones antes de guardar el usuario necesita modificar datos que estan en los subitems y lo que no puedo hacer es PODER MODIFICAR LOS DATOS DE LOS SUBITEMS alguien puede ayudarme porque ya me desespere y no encuentro la solucion de ante mano gracias

  18. Juan carlos dice:

    Hola,

    Una consulta, como puedo saber cuando se activa el scrool horizontal de un listview en vb net.

    Saludos

    Juan carlos

  19. Diana dice:

    Hola,

    quisiera saber como cargo imagenes en un listview, es decir, coloco en columnas datos traidos desde una base mediante dataset pero quiero que cuando aparezce el dato por ejemplo el nombre a su lado aparezca la imagen de esa persona.

    Agradecere mucho su ayuda

  20. Alfredo dice:

    Quisiera saber como cargo un Listview, con una tabla Access, algún ejemplo sencillito, porque no hay manera de conseguirlo.
    Gracias

Comentar