Listview con Base de datos SQLCompact 4.0

Visitando diferentes foros y blogs, acerca de usar DatagridView o Listview para presentar datos, decidí poner a prueba los controles, sin duda que las Datagridview se tardan en cargar datos que sobrepasen los 10 campo y las 1000 filas, sin embargo la fácil edición y referencia a la estructura interna de la misma la hace manejable y apreciable por la mayor parte de programadores NET si vamos por el listview, un control mas sencillo que si bien integra también campos y diferentes vistas ha sido usado en la mayoría de aplicaciones  hasta hoy en día.

Usando la base de datos Northwind.sdf que trae el sql compact y creando la conexión idéntica a las formas en los posts antes demostrados conectamos nuestro listview a ver que parece, miren los controles usados en la captura del proyecto.


Como el método de  carga de datos de este control, no esta sencilla a diferencia de  datagridview que simplemente con el datasource = dt, el problema esta resuelto!! . He optado por hacer una función de cargar, colocada en el mismo módulo de conexión con el carácter de publica para que tenga acceso libre en todo el ámbito del proyecto y sea reutilizada con solamente colocar el dt(datatable cargado por consulta ) y el listview usado. 

Vemos el código del modulo

Module conex
 Public path As String = Form1.lbldir.Text
 '----------------------------------------
 Public conn As New SqlCeConnection("Data Source=" & path)
 Public sql As String
 Public cmd As New SqlCeCommand(sql, conn)

 Public Sub conectarse()
  Try
   conn.Open()
   '    MsgBox("Conexion exitosa")
  Catch ex As Exception
   MsgBox(ex.ToString())
  End Try
 End Sub

#Region "CARGAR LISTVIEW"
 Public Function Cargar_listview(ByRef lvw As ListView, ByRef dt As DataTable)
  lvw.Clear()
  lvw.View = View.Details
  lvw.GridLines = True
  'adquiere los campos y encabezados para el listview
  For Each Col As DataColumn In dt.Columns
   lvw.Columns.Add(Col.ColumnName, Col.ColumnName)
  Next
  If dt.Columns.Count = 0 Then
   MsgBox("No existen columnas para llenar listview")
  Else
   'llena el listview
   For Each row As DataRow In dt.Rows
    Dim item As ListViewItem
    item = New ListViewItem
    item.Text = row(0).ToString()
    For intcontador As Integer = 1 To dt.Columns.Count - 1
     item.SubItems.Add(row(intcontador).ToString())
    Next
    lvw.Items.Add(item)
   Next
   lvw.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
  End If
 End Function
#End Region
End Module
Dentro del Form
Public Class Form1
 Private Sub btncargar_Click(sender As Object, e As EventArgs) Handles btncargar.Click
  cargar_datos()
 End Sub
 Sub cargar_datos() ' procedimiento para cargar los datos
  Try
   conectarse()
   Dim dt As New DataTable
   Dim strSql As String = "SELECT* FROM PRODUCTS "
   Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
   adp.Fill(dt)
   Cargar_listview(ListView1, dt)
  Catch ex As Exception
   ex.ToString()
  End Try
  conn.Close()
 End Sub
 Public Sub buscar()
  Try
   Dim dt As New DataTable
   Dim strSql As String
   If TextBox1.Text = "" Then
    MsgBox("Ingrese código para buscar", vbInformation)
   ElseIf IsNumeric(TextBox1.Text) = True Then
    strSql = "SELECT * FROM PRODUCTS WHERE [CATEGORY ID] =" & TextBox1.Text
   ElseIf Not IsNumeric(TextBox1.Text) = True Then
    strSql = "SELECT * FROM PRODUCTS WHERE [PRODUCT NAME] LIKE '%" & TextBox1.Text & "%'"
   End If
   Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
   adp.Fill(dt)
   Cargar_listview(ListView1, dt)
  Catch ex As Exception
   ex.ToString()
  End Try
  conn.Close()
 End Sub
 Private Sub btnFiltrar_Click(sender As Object, e As EventArgs) Handles btnFiltrar.Click
  buscar()
 End Sub
 Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
  buscar()
 End Sub
End Class

Una captura ejecutando 

...cargando y la segunda captura filtrando por  [CATEGORY ID]




Al final comprobé que si existe una mejora en el tiempo de carga del listview vs datagridview, pero Uds. experimenten y juzguen a su criterio.

Y eso es todo! nos vemos en otra entrega, les dejo el link  de mi ejemplo:




Comentarios

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic