Вы находитесь на странице: 1из 6

DISTINTAS 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 coleccin de objetos ListViewItems, por lo que si
queremos llenar un ListView, lo primero que tenemos que hacer es definir los ListViewItems 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:
01.For i As Integer = 1 To dt.Rows.Count - 1
02.
03.'Creo el ListViewItem (item)
04.Dim item As ListViewItem
05.
06.'Creo una nueva instancia de item pasandole el nombre como dato principal
07.item = New ListViewItem(dt.Rows(i).Item("Nombre").ToString)
08.
09.'Agrego los demas datos a los SubItems de item
10.item.SubItems.Add(dt.Rows(i).Item("Apellido").ToString)
11.item.SubItems.Add(dt.Rows(i).Item("Edad").ToString)
12.
13.'Agrego el item a la coleccin de listViewItem's de ListView1
14.ListView1.Items.Add(item)
15.
16.Next
Bueno, acabamos de ver una forma muy detallada y completa de cargar los datos de un DataTable en
un ListView. Pero este cdigo se puede optimizar mucho y podemos lograr el mismo resultado con
menos cdigo.
Un DataTable es una coleccin de DataRows y para recorrer los elementos de una coleccin es
conveniente utilizar un For each en lugar de un for controlado por una variable como en el caso
anterior.
01.For Each dr As DataRow In dt.Rows
02.
03.'Creo el ListViewItem (item)
04.Dim item As ListViewItem
05.
06.'Creo una nueva instancia de item pasandole el nombre como dato principal
07.item = New ListViewItem(dr("Nombre").ToString)
08.
09.'Agrego los demas datos a los SubItems de item
10.item.SubItems.Add(dr("Apellido").ToString)
11.item.SubItems.Add(dr("Edad").ToString)
12.
13.'Agrego el item a la coleccin de listViewItem's de ListView1
14.ListView1.Items.Add(item)
15.
16.Next
Como se ve en el ejemplo hemos reemplazado
1.dt.Rows(i).Item("Nombre").ToString
por
1.dr("Nombre").ToString
Y ahora veremos como optimizar todo el cdigo anterior contenido dentro del For each en una sola
linea utilizando algunos conceptos nuevos como la utilizacin de un arrary de tipo string con los
elementos de cada ListViewItem
1.For Each dr As DataRow In dt.Rows
2.
3.ListView1.Items.Add(New ListViewItem(New String() {dr("Nombre").ToString,
dr("Apellido").ToString, dr("Edad").ToString}))
4.
5.Next
La verdad es casi imposible pensar en uin proyecto que incluya ningn ListView, por lo que es
importantisimo ponerse al da con todas las virtudes de este impresionante control. Espero que
puedas aplicar estos conceptos en tus prximos proyectos. Si te ha servido, me gustara que dejes un
comentario. Gracias!

AGREGAR SUBTEMS PARA UNA VISTA DETALLE O REPORTE
Dim subelemento As listitem

Set subelemento = listview1.listitem.Add(, , "Carlos")

subelemento.subitems(1) = "487-8795"
subelemento.subitems(2) = "avenida libertador n 123"
subelemento.subitems(3) = "carlos@yahoo.com"
--------------------------------------------------------------------------------------------------------------------------------------------
Dim SItem As ListItem
Dim i As Integer

For i = 1 To 50

Set SItem = ListView1.ListItems.Add(, , "Elemento" & i)

SItem.SubItems(1) = "Subitem " & i
SItem.SubItems(2) = "Subitem " & i

Next

Set SItem = Nothing

Private Function Sumar() As Double

Dim i As Integer
'Recorre todos los items y para sumar los SubItems
For i = 1 To ListView1.ListItems.Count
Sumar = Sumar + CDbl(ListView1.ListItems(i).SubItems(1))
Next i

End Function
------------------------------------------------------------------------------------------------------------------------------------------------





CARGAR EXCEL EN UN DATASET
(en el ejemplo uso OleDB)

strconn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Directorio & ";Extended Properties=""Excel 8.0;hdr = " & primera & "; imex = " &
Como_Texto & """"""

donde:
- strconn = variable donde se almacena la cadena de conexin.
- Directorio = variable q' contiene la ruta donde se encuentra la planilla. (Ej.: C:\planilla.xls)
- primera (opcional) = aqu indicas si la primera fila corresponde a la cabecera de la planilla, o sea, a los
titulos. (de serlo primera = "si")
- Como_Texto (opcional) = con esta variable determinas si las filas (n, fechas, datos, etc..) se leen todos
como texto. (true o false)

Luego creas la instancia de la conexin:
Dim mconn As New OleDb.OleDbConnection(strconn)

Ahora creas y determinas la consulta a cargar en el objeto DataAdapter:
Dim ad As New OleDb.OleDbDataAdapter("Select * from [" & Hoja & "$]", mconn), donde Hoja es el nombre
de la hoja de la planilla a cargar en el DataSet.

Abres la conexin:
mconn.Open()

Por ltimo haces efectiva la carga de datos en el DataSet:
ad.Fill(ds, "Nombre_Tabla") ' donde ds es el nombre del DataSet y "Nombre_Tabla" es cualquier
'nombre q' le quieras dar a la tabla q' contendra los datos de la planilla. Este
'"Nombre_Tabla" te sirve, por ejemplo, para cuando desees asignar el
'contenido de un determinado campo a una variable. (ej.: nom =
'ds.Tables("Nombre_Tabla").Rows(i)("Nombre_Campo"). ToString (i=fila de la tabla))

Y cierras la conexin cuando ya no la vayas a utilizar:
mconn.Close()
CARGAR RANGO DE DATOS EN DATAGRIDVIEW
Option Explicit On
Option Strict On

Public Class Form1
Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Button1.Text = "Cargar"
txtRange.Text = "A1:C15"

End Sub

Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

' // Pasar valores para Leer el rango
loadRange("c:\book1.xls", "sheet1", txtRange.Text, DataGridView1)

End Sub

' ----------------------------------------------------------------------------------
' // Subrutina para conectar al libro Excel y obtener el rango de datos
' ----------------------------------------------------------------------------------
Private Sub loadRange( ByVal sFileName As String, ByVal sSheetName As String, ByVal sRange As String, _
ByVal dv As DataGridView)

Try
' // Comprobar que el archivo Excel existe
If System.IO.File.Exists(sFileName) Then

Dim objDataSet As System.Data.DataSet
Dim objDataAdapter As System.Data.OleDb.OleDbDataAdapter
' // Declarar la Cadena de conexin
Dim sCs As String = "provider=Microsoft.Jet.OLEDB.4.0; " & "data source=" & sFileName & ";
Extended Properties=Excel 8.0;"
Dim objOleConnection As System.Data.OleDb.OleDbConnection
objOleConnection = New System.Data.OleDb.OleDbConnection(sCs)

' // Declarar la consulta SQL que indica el libro y el rango de la hoja
Dim sSql As String = "select * from " & "[" & sSheetName & "$" & sRange & "]"
' // Obtener los datos
objDataAdapter = New System.Data.OleDb.OleDbDataAdapter(sSql, objOleConnection)

' // Crear DataSet y llenarlo
objDataSet = New System.Data.DataSet
objDataAdapter.Fill(objDataSet)

' // Cerrar la conexin
objOleConnection.Close()

' // Enlazar DataGrid al Dataset
With dv
.DataSource = objDataSet
.DataMember = objDataSet.Tables(0).TableName
End With
Else
MsgBox("No se ha encontrado el archivo: " & sFileName, MsgBoxStyle.Exclamation)
End If

Exit Sub
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try

End Sub
End Class

Вам также может понравиться