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
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
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