Hace mucho tiempo y luego de sentirme un poco descepcionado con los gridviews de .NET y buscando la “alternativa” para poder desplegar datos de una forma clara y sencilla, encontre el control ListView que no esta precisamente orientado a un listado de datos pero a algunos nos acomoda mas.

Voy a indicar como lograr desplegar informacion al igual como se podria con un gridview, la unica desventaja es que la informacion no puede ser editada de forma directa.

Primero, debes arrastrar el control sobre un formulario y posteriormente definir las siguientes propiedades:

* FullRowSelect = true
* GridLines = true
* View = Details

Al establecer esas propiedades el control tomara el siguiente aspecto:



Ahora, necesitamos definir las columnas (ID – NOMBRE – DESCRIPCION-), hacemos clic en Columns y aparecera un recuadro como este:


Podemos agregar todas las que queramos, definiendo el texto a desplegar en la columna, el ancho, etc.
Una vez agregadas todas las que necesitamos se vera un tanto asi:

Con la parte de diseño ya terminada, es tiempo de poder empezar a mostrar datos en el listview. Primero, cambiemos el nombre por defecto y pongamos algo mas acorde, como listadoJuegos.

Ahora bien, el ejemplo lo hare conectandome a una base de datos en MS ACCESS 2007 y rellenare el listview de dos maneras, una con un DataReader y otra con un DataTable (El guille explica la diferencia y cuando usar uno y cuando usar el otro).

La estructura de la tabla es la siguiente:

Nombre tabla juegos

id => autonumerico, llave primaria.
nombre => texto
descipcion => texto

Agregue ademas, 2 botones al formulario, uno para cargar datos a traves de datarader y otro para hacerlo con datatable.

y el codigo para cargar datos dentro del listview :

Private Sub botonDR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botonDR.Click
listadoJuegos.Items.Clear()
 
comando = New OleDbCommand(SELECT * FROM juegos”, conexion)
 
Try
dr = comando.ExecuteReader
 
While dr.Read
Dim item As New ListViewItem(dr(”id”).ToString)
item.SubItems.Add(dr(”nombre”).ToString)
item.SubItems.Add(dr(”descripcion”).ToString)
 
listadoJuegos.Items.Add(item)
 
End While
 
Catch ex As Exception
MsgBox(”Fallo la consulta, mensaje: ” + ex.Message)
End Try
 
End Sub
 
Private Sub botonDT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botonDT.Click
listadoJuegos.Items.Clear()
 
Try
dt = New DataTable(”juegos”)
comando = New OleDbCommand(SELECT * FROM juegos”, conexion)
 
adaptador.SelectCommand = comando
adaptador.Fill(dt)
 
i = 0
 
For Each fila As DataRow In dt.Rows
Dim item As New ListViewItem(dt(i)(”id”).ToString)
item.SubItems.Add(dt(i)(”nombre”).ToString)
item.SubItems.Add(dt(i)(”descripcion”).ToString)
 
listadoJuegos.Items.Add(item)
i += 1
Next
 
Catch ex As Exception
MsgBox(”Fallo la consulta, mensaje: ” + ex.Message)
End Try
End Sub

A todo esto podemos agregarle eventos, el primero para detectar cual o cuales son las filas que estan seleccionadas al hacer doble click en el listview o al clickear un boton (agrego un tercer boton para lanzar el evento ).

Private Sub registrosSeleccionados()
Dim indices As ListView.SelectedIndexCollection = listadoJuegos.SelectedIndices
 
If indices.Count <> 0 Then
For Each indice As Integer In indices
MsgBox(”Indice Seleccionado: ” + indice.ToString)
Dim item As ListViewItem = listadoJuegos.Items(indice)
MsgBox(”ID: ” + item.Text + Chr(13) + “Nombre: ” + item.SubItems(1).Text + Chr(13) + “Descripcion: ” + item.SubItems(2).Text)
Next
End If
End Sub
 
Private Sub registroSeleccionado()
Dim indices As ListView.SelectedIndexCollection = listadoJuegos.SelectedIndices
 
If indices.Count <> 0 Then
Dim indice As Integer = indices(0)
 
MsgBox(”Indice Seleccionado: ” + indice.ToString)
Dim item As ListViewItem = listadoJuegos.Items(indice)
MsgBox(”ID: ” + item.Text + Chr(13) + “Nombre: ” + item.SubItems(1).Text + Chr(13) + “Descripcion: ” + item.SubItems(2).Text)
End If
End Sub
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
registrosSeleccionados()
End Sub
 
Private Sub listadoJuegos_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles listadoJuegos.DoubleClick
registroSeleccionado()
End Sub

Este es solo el comienzo al menos para crear un mantenedor de registros, sin embargo es la base para todo lo siguiente.


Ojo, que esta solucion debe complementarse con algun paginador de resultados para evitar el desborde de recursos.


Articulos Relacionados



Comentarios

[...] VB.NET – Utilizar un Listview para desplegar datos [...]


Misael el 2 octubre, 2008 a las 19:17 pm #

Oye mira soy nuevo en esto y necesito aser una conexion de una aplicacion de VB.Net con mYsql pero no s realmante nada. Desde aser la aplicacion ni se que conector se debe de bajar asi como que lineas escribir para el conector bueno espero que me ayudes si me pudieras ayudar algo o que me facilites un ejemplo seria grandioso deverdad me lo puedes mandar al correo : tazmania_99@hotmail.com. de antemano gracias y que estes bien espero tu respuesta.


admin el 3 octubre, 2008 a las 10:50 am #

Misael, te falto seguir revisando el blog, ya que no hace mucho agregue el metodo de conexion entre vb.net y mysql:

http://www.donubu.com/2008/09/21/vbnet-con-mysql-mysql-driver-cs/

Sale todo lo necesario.


Envia un Comentario
Nombre:
E-Mail:
Sitio Web:
Comentario: