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. |
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
Hola:
Gracias por comentar y por supuesto que no me incomoda tu consulta.
Primero quisiera recomendarte que leas y pruebes este artículo: http://www.solovb.net/index.php/2009/02/10/varias-formas-de-cargar-un-listview/ donde el ultimo código carga los datos desde un datatable. También podrías leer todos los post sobre listview pués cada uno tiene muchos tips que te serán de utilidad y te ayudarán a comprender mejor este gran control, aqui te dejo el link: http://www.solovb.net/index.php/tag/listview/.
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
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
Te recomiento que leas el siguiente artículo y estoy seguro que encontrarás la forma de solucionar tu problema: http://www.solovb.net/index.php/2009/05/19/mover-elementos-de-un-listview/
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
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…
te recomiendo leer este post que creo te será de gran ayuda:
http://social.msdn.microsoft.com/Forums/es-ES/dotnetes/thread/faea77af-edec-41a9-970f-cedb07542e73
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…..
Hola:
el cálculo debería ser como cualquier otro cálculo entre fechas, sin importar si es o no un listview…
Te recomiendo el siguiente artículo: http://www.solovb.net/index.php/2009/04/28/calculos-entre-fechas/
Suerte
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?
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
pues tenemos un amigo en comun
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??
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
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.
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
Ya lo solucione, lo saque de la guia para modificar los datos del listview.
Saludos
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
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
Martín, he escrito un post que explica como resolver esta problematica. Espero que te sirva.
http://www.solovb.net/index.php/2009/10/15/listview-item-siempre-visible/
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..-
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
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..
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.
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.
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
Hola,
Una consulta, como puedo saber cuando se activa el scrool horizontal de un listview en vb net.
Saludos
Juan carlos
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
Quisiera saber como cargo un Listview, con una tabla Access, algún ejemplo sencillito, porque no hay manera de conseguirlo.
Gracias