martes, 9 de marzo de 2010

Cargar tabla de Sql server en un ListView

Código fuente de ejemplo en visual basic.net 2005, para visualizar una tabla de sql en un control ListView

El ejemplo es un formulario que carga las tablas en un combo, y al seleccionar una, se llena un Dataset con los registros y se añaden al control listview
Nota: la función para obtener los nombres de tablas y poder cargarlos en el combo, está sacado de este ejemplo en c# de la página del guille, es una simple función que utiliza una sentencia T-SQL y retorna un objeto DataTable y luego se enlaza a un control ListBox.
El nombre de la función es GetViews


Ejemplo

Iniciar un nuevo proyecto, añadir un Windows Form, y colocar los siguientes controles :
  • Un control Listview llamado ListView1
  • Un ComboBox llamado ComboBox1
  • Un Control Button llamado Button1
  • Configurar la cadena de conexión
( Espacio de nombres usado en el ejemplo : Imports System.Data.SqlClient )
código fuente
Option Explicit On
Option Strict On

Imports System.Data.SqlClient

Public Class Form1

Private name_bd As String = String.Empty

' Cadena de conexión para sql server express en modo local
Private Const cs As String = "Data Source=(local)\SQLEXPRESS;" & _
"Integrated Security=True;" & _
"Initial Catalog="

' función para llenar el LV
Public Sub cargar_ListView( _
ByRef ListView As ListView, _
ByVal sql As String, _
ByVal db As String)

Try
' Crea y abre una nueva conexión
Using cn As New SqlConnection(cs & db)

cn.Open()

' propiedades del SqlCommand
Dim comando As New SqlCommand

With comando
.CommandType = CommandType.Text
.CommandText = sql

.Connection = cn
End With

Dim da As New SqlDataAdapter ' Crear nuevo SqlDataAdapter
Dim dataset As New DataSet ' Crear nuevo dataset

da.SelectCommand = comando

' llenar el dataset
da.Fill(dataset, "Tabla")

' Propiedades del ListView
With ListView
.Items.Clear()
.Columns.Clear()
.View = View.Details
.GridLines = True
.FullRowSelect = True
' añadir los nombres de columnas
For c As Integer = 0 To dataset.Tables("tabla").Columns.Count - 1
.Columns.Add(dataset.Tables("tabla").Columns(c).Caption)
Next
End With

' Añadir los registros de la tabla
With dataset.Tables("tabla")
For f As Integer = 0 To .Rows.Count - 1

Dim dato As New ListViewItem(.Rows(f).Item(0).ToString)
' recorrer las columnas
For c As Integer = 1 To .Columns.Count - 1
dato.SubItems.Add(.Rows(f).Item(c).ToString())
Next
ListView.Items.Add(dato)
Next
End With
End Using
' errores
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub

' Función que retorna un objeto DataTable para
'enlazarlo con el combobox y visualizar las tablas
Private Function get_Tablas( _
ByVal la_base_de_datos As String) As DataTable

Try

' nueva conexión a sql
Using cn As New SqlConnection(cs)
' nuevo comando
Dim comando As SqlCommand = New SqlCommand()
' Nuevo DataAdapter
Dim da As SqlDataAdapter = New SqlDataAdapter()

'Nuevo DataTable
Dim dt As DataTable = New DataTable()

'Asignación de propiedades para el comando
With comando
.Connection = cn
.CommandType = CommandType.Text
' instrucción T-SQL para obtener las tablas
.CommandText = "Use [" & la_base_de_datos & "] " & _
"Select * From INFORMATION_SCHEMA.TABLES " & _
"Where TABLE_TYPE = 'BASE TABLE'"

da.SelectCommand = comando
End With

da.Fill(dt)

' retornar el dataTable
Return dt
End Using

' errores
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
Return Nothing

End Function
Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Text = "Obtener tablas"

' Propiedades del ComboBox
With ComboBox1
.ValueMember = "TABLE_CATALOG"
.DisplayMember = "TABLE_NAME"
End With

End Sub

Private Sub ComboBox1_SelectedIndexChanged( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

' cargar los registros de la tabla indicada por el combobox

cargar_ListView( _
ListView1, _
"Select * from [" & ComboBox1.Text.ToString & "]", _
name_bd)

End Sub

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


name_bd = InputBox("Escribir el nombre de la base de datos")

If name_bd <> String.Empty Then
Try
' Indicar la base de datos para recuperar
'y cargar las tablas en la lista
ComboBox1.DataSource = get_Tablas(name_bd.Trim)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End If
End Sub
End Class

No hay comentarios:

Publicar un comentario