Varias formas de cargar un ListView

Vamos a ver distintas formas de cargar un listview en visual basic .net y en este ejemplo lo vamos a hacer siempre desde un DataTable.

Un listview en un objeto, que a su vez es una colección de objetos ListViewItems, por lo que si queremos llenar un ListView, lo primero que tenemos que hacer es definir los ListViewItem’s que utilizaremos para ir agregando al ListView.

No vamos a ver como se llena el DataTable. Se llama dt y supenemos que ya contiene los datos. Sus campos son Nombre, Apellido y Edad.

Veamos el proceso completo paso por paso:

For i As Integer = 1 To dt.Rows.Count - 1

    'Creo el ListViewItem (item)
    Dim item As ListViewItem

    'Creo una nueva instancia de item pasandole el nombre como dato principal
    item = New ListViewItem(dt.Rows(i).Item("Nombre").ToString)

    'Agrego los demas datos a los SubItems de item
    item.SubItems.Add(dt.Rows(i).Item("Apellido").ToString)
    item.SubItems.Add(dt.Rows(i).Item("Edad").ToString)

    'Agrego el item a la colección de listViewItem's de ListView1
    ListView1.Items.Add(item)

Next

Bueno, acabamos de ver una forma muy detallada y completa de cargar los datos de un DataTable en un ListView. Pero este código se puede optimizar mucho y podemos lograr el mismo resultado con menos código.

Un DataTable es una colección de DataRows y para recorrer los elementos de una colección es conveniente utilizar un For each en lugar de un for controlado por una variable como en el caso anterior.

For Each dr As DataRow In dt.Rows

    'Creo el ListViewItem (item)
    Dim item As ListViewItem

    'Creo una nueva instancia de item pasandole el nombre como dato principal
    item = New ListViewItem(dr("Nombre").ToString)

    'Agrego los demas datos a los SubItems de item
    item.SubItems.Add(dr("Apellido").ToString)
    item.SubItems.Add(dr("Edad").ToString)

    'Agrego el item a la colección de listViewItem's de ListView1
    ListView1.Items.Add(item)

Next

Como se ve en el ejemplo hemos reemplazado

dt.Rows(i).Item("Nombre").ToString

por

dr("Nombre").ToString

Y ahora veremos como optimizar todo el código anterior contenido dentro del For each en una sola linea utilizando algunos conceptos nuevos como la utilización de un arrary de tipo string con los elementos de cada ListViewItem

For Each dr As DataRow In dt.Rows

    ListView1.Items.Add(New ListViewItem(New String() {dr("Nombre").ToString, dr("Apellido").ToString, dr("Edad").ToString}))

Next

La verdad es casi imposible pensar en uin proyecto que incluya ningún ListView, por lo que es importantisimo ponerse al día con todas las virtudes de este impresionante control. Espero que puedas aplicar estos conceptos en tus próximos proyectos. Si te ha servido, me gustaría que dejes un comentario. Gracias!



35 Responses to “Varias formas de cargar un ListView”

  1. Información Bitacoras.com…

    Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias….

    • bestiaciclope dice:

      Estoy empezando con esto del visual basic .net y todavia estoy un poco perdido, pero lo que he visto me ha parecido bastante claro.

      Gracias

  2. mario chicharo dice:

    hola
    buen dia solo para saber si me pueden ayudar tengo un combobox al que ya logre poner en la lista los datos de una base de datos llamada productos el cual contiene estos campos “clave,descripcion,unidad de medida,precio” pero ahora quiero que cuando el usuario elija alguna opcion del combobox este automaticamente despliege la descripcion del producto en un label que codigo nesesito para buscar la clave y que me ponga la descripcion gracias

  3. Eliseo dice:

    Hola Mario:

    cuando cargar datos en un combobox utilizando la propiedad datasource del mismo podes programar vos le indicas cual es el DisplayMember (dato que se va a mostrar en la lista) y el ValueMember (valor que se recuperará al hacer una selección). Podés programar un evento llamado SelectedIndexChanged con un código parecido al siguiente:

    TextBox1.text = ComboBox1.SelectedValue

    en breve escribiré un artículo con ejemplos de ComboBox.

    Saludos

    Eliseo

  4. Mario _chicharo dice:

    buendia

    yo denuevo
    solo para preguntarte por que no pones un ejemplo de como hacer un kardex automatizado

    que pueda imprimir y guardar un documento ya sea entrada o salida asi como un reporte parecido a un kardex manual

    fecha/articulo/entrada/salida/existencia
    12/1 crema 1 1
    13/1 crema 1 0

    no se si me explique gracias espero tu pronta respuesta

    • Eliseo dice:

      Mario:

      Te pido disculpas por no poder acceder a tu petición, pero el bridar soluciones específicas no es el objetivo de este proyecto. Lo que estás pidiendo es el desarrollo de un sistema de kardex, ya sea a modo de ejemplo o no, pero es un sistema. Y el desarrollo del sistema lo deberías hacer vos… como yo siempre digo: “La mejor forma de aprender es haciendo”.
      Y a medida que lo vas haciendo podes consultar todas las dudas que tengas en forma genérica para que también sirvan a otros. Por ejemplo: ¿cómo borra un item del listview?, ¿cómo hacer un UPDATE de un registro en la base de datos? o hasta como hacer un reporte a partir de un DataTable?, etc.
      Espero que comprendas mi posición y espero seguir contando con tus visitas.

  5. mario chicharo dice:

    ok entendido

    bueno tengo una pregunta mas espero no desesperarte pero soy principiante y quiero diseñar un sistemita para mi tienda
    para empezar como hago una busqueda en una tabla por ejemplo prductos quiero buscar la clave desde un combo box y que el resultado dela busqueda me lo coloque en label por ejemplo que en una etiqueta ma ponga la descripcion y el precio en otra pero el valor buscado fue desde un combobox gracias la tabla esta en sql

    • Eliseo dice:

      Mario:

      no entiendo bien que es lo que quieres hacer, pero acabo de publicar un post mostrando como filtrar las filas de un datagridview, espero que te sirva para orientarte. Saludos.

    • goyo dice:

      te mamaste con tu pregunta la verdad yo creo que tu deberias de tomar de perdido un curso basico de programacion.
      lo que tu kieres es un sistema. como dice el administrador de esta web , nada mas son ejemplos , no te va a enseñar a programar
      ademas , si lo kieres para tu tienda , pues pagale a un ingeniero para ke te dearrolle alguna solucion para tu tienda.
      hay ke soltar billetes , luz , lana entiendes
      yo soy novato pero no ando haciendo ese tipo de preguntas.
      saludos cordiales

  6. Leonardo dice:

    Saludos, aplicaria lo mismo para label o textbox?, lo que yo quisiera es que al seleccionar un objeto del combobox se cargen sus demas datos en label, un ejemplo a ver si me entiendes mejor.

    si la tabla es:
    nombre,apellido,telefono.

    yo cargo el campo nombre en el combobox y al seleccionar un nombre de esos, aparezca en los label, el apellido y el telefono de el nombre seleccionado.

    gracias de antemano

  7. Eliseo dice:

    Si, pero solo te funcionaría si la busqueda te devuelve solo un registro.

  8. Dr. Optimo dice:

    Gracia amigo…

    Te cuento q soy muy nuevo con el vb.net, estoy haciendo un trabajopractico para la facu, este año empezamos con vb.net, y esto me vino de diez para ver cómo usar el listview.. yo habia usado el gridview en otros ejercicios q hice.. pero esto está mucho mejor a la hora de presentar los datos..

    Gracias. Seguí asi.

  9. Ari dice:

    Buenas tengo una duda tengo que hacer un programa q por medio de lo q digit el cliente salga cuanto es su salario en uno d los campos tengo q poner un combobox y en ese combobox tiene que desplegarse varios puestos como administador, asistente y cosas asi pero ese combobox lo tengo q conectar con un label para q si escojo la opcion administrador del combobbox en el label me tire cuanto es su salario por hora… y si escojo otra opcion me tire en el label el salario por hora pero dependiendo del puesto.. Como hago para conectar el combobox con el label???

    • Eliseo dice:

      En realidad no debes conectarlos. Utiliza el evento selectChange del comboBox para disparar una función que llene los textBox con los datos que corresponden. Para seleccionar los datos correctos a cada opción puedes usar un Select Case.

      Select case comboBox1.Text
      case = “Administrativo”
      textBoxSueldo.Text = 1200
      case = “Asistente”
      textBoxSueldo.Text = 650
      case else
      textBoxSueldo.Text = 0
      End Select

      Consejo: muchas veces perdemos mucho tiempo buscando la solución específica para un caso puntual cuando en realidad no existe. Por lo que te recomiendo buscar siempre la forma de solucionar el problema creando una función para tal fin.

      Suerte.

  10. Haomaru dice:

    Hola, vi tu tutorial y lo encontré genial, seguí tus pasos, pero mi listview sólo muestra los datos de esta sentencia item = New ListViewItem(dr(“RutCliente”).ToString) no sale nada mas a pesar de que han sido agregado los subitems…¿Que PAsa?
    Los datos estan llenos, si los cargo a un label, entonces los dr muestran la información que contienen

    el código es este:

    Dim filas() As DataRow
    filas = dt.Select(“RutCliente LIKE ‘%” & txtRut.Text & “%’”)

    If filas.Length > 0 Then

    For Each dr As DataRow In filas
    Lista.Clear()
    Dim item As ListViewItem
    item = New ListViewItem(dr(“RutCliente”).ToString)
    item.SubItems.Add(dr(“Empresa”).ToString)
    item.SubItems.Add(dr(“GiroCliente”).ToString)

    Lista.Items.Add(item)

    Next
    ‘For Each dr As DataRow In filas
    ‘Me.ListaClientes.Items.Add( _
    ‘ dr(“RutCliente”).ToString & ” ” & _
    ‘dr(“Empresa”).ToString)
    ‘Next
    End If

    • Eliseo dice:

      El listview tiene varios modos de visualización y algunos de ellos solo muestran la información del item pero no la de los subitems que este contiene. Prueba cambiando dicha propiedad utilizando listview1.view = details (puedes hacerlo desde el código o desde las propiedades del control).

      • Haomaru dice:

        lo he intentado, pero en Details no me muestra simplemente nada…lo curioso como mencioné antes, es que si cargo los datos por ejemplo en un label, los datos están, pero por alguna razón, no se despliegan
        El código es este.

        If iniciando Then Exit Sub
        Dim filas() As DataRow
        filas = dt.Select(“RutCliente LIKE ‘%” & txtRut.Text & “%’”)
        Me.Lista.Items.Clear()
        If filas.Length > 0 Then

        For Each dr As DataRow In filas
        Lista.Clear()
        Dim item As ListViewItem
        item = New ListViewItem(dr(“RutCliente”).ToString)
        lblMuestra.Text = dr(“Empresa”).ToString
        item.SubItems.Add(Trim(dr(“Empresa”).ToString))
        item.SubItems.Add(dr(“GiroCliente”).ToString)
        Lista.Items.Add(item)
        Next
        End If

  11. Carlos Humberto Arce dice:

    bien eliseo eres un buen elemento en estos foros….

  12. Dano dice:

    Hola, buenas aportaciones por parte de todos, yo tengo una duda sobre los listview, lo que pasa es todos los ejemplos que he visto acerca de llenar datos en un listview estan hechos usando tablas o con bases de datos ODBC o sqlserver. Yo quisiera saber si hay alguna manera de llenar un listview mediante textbox (que lo que escriba en el textbox se agregue a un listview de N columnas) y llenar un listview desde una base de datos en mysql porque esa estoy manejando.

    espero su respuesta, saludos…

    • Eliseo dice:

      Puedes llenar un listview con lo que quieras… es cierto que todos los ejemplos se usan tomando los datos de una base de datos, pero si te fijas el código, la parte donde se llena el listview se hace a mano. El control ListView no tiene una propiedad DataSource o DataBinding como otros controles.
      Te la hago facil:
      Supongamos que quiero llenar un listview de tres columnas (nombre, apellido, telefono) y los datos los tengo en tres variables o controles textBos o lo que tu quieras. Y supongamos que esas variables se llaman vNombre, vApellido y vTelefono.
      Con esta sola linea puedo llenar las tres columnas del listview:
      ListView1.Items.Add(New ListViewItem(New String() {vNombre, vApellido, vTelefono} ))
      Pruebalo es muy fácil. Suerte

  13. ANA dice:

    HOLA SOY PRINCIPIANTE ESTOY DANDOLE A UN PROYECTO BUENO EL CASO ES QUE QUISIERA SABER COMO HAGO PARA EL MANEJO AL DAR CLIC EN UN LISTBOX Y UN COMBOBOX (AL SELECCIONAR UN NOMBRE CUALQUIERA DE CADA UNO)VALLA A UN FORMULARIO QUE CONTENGA LOS DATOS DE LA PERSONA QUE SELECCIONE

    EJEMPLO

    LISBOX TENGO
    PRIMERO
    SEGUNDO
    TERCERO

    COMBOBOX TENGO
    A
    B
    C

    QUE AL SELECCONAR ME DE OTRO FORMULARIO CON LOS DATOS DE ESA SELECCON URGENTE POR FAVORRRRRRRRRRRRRRR

  14. Edu dice:

    hola a todos quisiera saber si me pueden a yudar con vb y mysql, ya me logre conectar usando el conector net.6.2.2 pero quiero hacer lo siguiente.
    en mi formulario tengo 3 textbox, codigo, nombre ,apellido, y un boton. lo que quiero es ingresar el codigo y al hacer clik en el boton que me muestre el nombre y apellido correspondientes al codigo en la cual estan almacenados en la base de datos

  15. Edu dice:

    hola a todos quisiera saber si me pueden a yudar con vb y mysql, ya me logre conectar usando el conector net.6.2.2 pero quiero hacer lo siguiente.
    en mi formulario tengo 3 textbox, codigo, nombre ,apellido, y un boton. lo que quiero es ingresar el codigo y al hacer clik en el boton que me muestre el nombre y apellido correspondientes al codigo en la cual estan almacenados en la base de datos

    les agradeceria me puedan ayudar……….

  16. MILENA dice:

    HOLA porfavor alguien me puede ayudar a sacar un logo cuando inicie un proyecto en vb.net .

    les agradezco mucho

  17. hector machado dice:

    hola necesito que alguien me diga como cargar a un listview el texto de dos texbox… por ejempli id, nombre…
    puedo cargarlo desde la base de datos..
    pero este caso es para un boton agregar!!

  18. karina dice:

    Hola saludos a todos.
    Nesecito una ayuda con esto, estoy haciendo un sistema de inscripcion en bisual basic 6.0. ya guarda todos los datos pero mi prof quiere que imprima la planilla de inscripcion. si alguien sabe como hacerlo lo agrasco me ayude. en realidad no se como hacerlo.

  19. Joel dice:

    gracias por los tutoriales, me sirvieron de mucho, pensé que el listview era más sencillo en cuanto a funcionalidad.

  20. Itachisensei dice:

    Soy un principiante en esto de visual basic y deseo aprender a utilizar este programa y deseo saber como conecto un listview a una base de datos como acces2003. agradeceria su pronta respuesta me despido con todo respeto de ustedes Gracias!!

  21. Maristin dice:

    Que tal soy nuevo en asp.net

    Alguien podria ayudarme en mi problema
    tengo un GridView cargando los datos de la BD.

    Pero lo que quiero hacer es que al seleccionar un objeto de dicho Grid este se opaque y me arroje la informacion en un DetailsView del objeto seleccionado al frente del GridView.
    Alguien sabe como hacer eso???

  22. gabiota dice:

    hola necesito la progracion para registrar la compra de una casa en un lisview hay varias y tienen un stock entonces al momento que se completa el stokc que ya no me permita registrar y me muestre un sms diciendo ya no hay. Necesito esa programacion porfa ayudenme

  23. gabiota dice:

    como recorro un lisviw y sumo las cantidades por ejemplo de un total de sueldos, de todos los registrados al fnal en una caja de texto me muestre el total de sueldos registrados que lo sume ayudenme xfa lo necesito esa programacion

    • Eliseo dice:

      suponiendo que tienes un textobox1 debajo del listview1 y que este listview tiene dos columnas Descripción e importe el codigo sería mas o menos así:

      dim total as doouble = 0
      for each item as listviewitem in listview1.items
      total += item.subitems(1).text
      next
      textbox1.text = total

      esto te tiene que servir de guía, es el concepto que deberás adaptar a tu sistema, el codigo no lo he probado por cuestiones de tiempo, pero estoy seguro que debería funcionar muy bien.

      Suerte

  24. Airbit dice:

    Hola, gracias por la info, era lo que buscaba para aprender acerca de ese control!

Comentar