Taller Web

Transcripción

Taller Web
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
Bases de Datos en VB.Net.
El control Datagrid, Relaciones y Vistas.1
(cc) 2007 Justo Sáez Arenas
http://vb.jsaez.com/
Contenidos:
1. Introducción.............................................................................................................................. 1
2. DataGrid .................................................................................................................................. 2
Creación de un DataGrid a través de los asistentes del IDE .................................................... 3
Creación de un DataGrid por código........................................................................................ 4
Configurar las propiedades del DataGrid .................................................................................5
Selección de tabla en el DataGrid ............................................................................................ 5
3. Relaciones entre tablas mediante objetos DataRelation .......................................................... 6
4. Relación maestro-detalle en múltiples DataGrid ................................................................... 10
5. Vistas y ordenación de datos con la clase DataView ............................................................ 11
Vistas por código y DefaultView ...........................................................................................12
Filtros con objetos DataView .................................................................................................13
Búsquedas con DataView ...................................................................................................... 14
Ordenación de filas mediante DataView ................................................................................15
6. Obtener el esquema de un DataSet ........................................................................................ 17
1.Introducción.
En este tema comenzaremos tratantando de nuevo aspectos del control DataGrid, el cual nos permite
trabajar con datos de forma cómoda y sencilla.
A continuación se hablará de como obtener tablas relacionadas, de forma que podemos establecer una
relacion entre tablas que visual se encargará de gestionar directamente.
Gracias a la potencialidad de los objetos DataRealatión y los DataGrid, podremos construir aplicaciones
tipicas de datos como son las relaciones 'Maestro-Detalle.
Para finalizar se tratará un nuevo objeto llamado DataView, mediante el cual se realizan funciones de
presentación de los datos en formato de tabla.
1
El contenido es © “Manual de Programación Visual Basic Net”- Luis Miguel Blanco. Editorial Eidos., la
maquetación,. selección y adaptación del contenido es mía.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
1
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
2.DataGrid
Este control, del que ya realizamos una pequeña introducción en el tema anterior, nos es muy útil para
mostrar la información contenida en las bases de datos de forma rápida y casi sin programación.
Mediante los DataGrid podemos editar, añadir y borrar registros. Teniendo en cuenta que se trabaja en
desconexión, hasta que no se realice una actualización mediante un 'Update' no se reflejarán los cambios
en la base de datos original.
Otra característica incluida por defecto es la ordenación de las filas por columna al hacer clic en su título.
Finalmente, al redimensionar el formulario, también cambiará el tamaño del DataGrid, puesto que hemos
utilizado su propiedad Anchor para anclarlo a todos los bordes de la ventana.
Un DataGrid editable.
El siguiente sería el código principal de este formulario. En este caso la conexión a la base de datos se
realiza de forma manual, debiendo, entre otras cosas, crear un objeto CommandBuilder para el
DataAdapter, ya que en caso contrario, al intentar actualizar el DataSet contra la base de datos, se
producirá un error.
2
Private oDataAdapter As SqlDataAdapter
Private oDataSet As DataSet
Private Sub frmNormal_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Private Sub frmNormal_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' crear conexión
Dim oConexion As New SqlConnection()
oConexion.ConnectionString = "Server=(local);" & _
"Database=Musica;uid=sa;pwd=;"
' crear adaptador
2
Para los siguientes ejemplos de código, ttenemos una base de datos access llamada
'Musica', con dos tablas: 'Grabaciones' y 'Autores'.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
2
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
oDataAdapter = New SqlDataAdapter("SELECT * FROM Grabaciones", oConexion)
' crear commandbuilder
Dim oCB As SqlCommandBuilder = New SqlCommandBuilder(oDataAdapter)
' crear dataset
oDataSet = New DataSet()
oDataAdapter.Fill(oDataSet, "Grabaciones")
' asignar dataset al datagrid
Me.grdDatos.DataSource = oDataSet
Me.grdDatos.DataMember = "Grabaciones"
End Sub
Private Sub btnActualizar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnActualizar.Click
Me.oDataAdapter.Update(oDataSet, "Grabaciones")
End Sub
Creación de un DataGrid a través de los asistentes del IDE
El modo más potente de crear un DataGrid es a través de código, ya que nos permite un mayor grado de
manipulación de sus propiedades.
Sin embargo, para aquellas ocasiones en que necesitemos una vista rápida de los datos en un formulario
para pruebas o similares, podemos utilizar los asistentes de Visual Studio .NET, en lo que a creación de
conexiones, adaptadores, DataGrid, etc., se refiere.
Vamos a crear por lo tanto un nuevo formulario para el proyecto con el nombre frmGridAsist.
Una vez añadido el diseñador, abriremos la pestaña Explorador de servidores, y haciendo clic
derecho en su elemento Conexiones de datos, nos mostrará la ventana para la creación de una
nueva conexión con una base de datos, en ella introduciremos los valores necesarios para la
conexión.
Finalizada la creación del adaptador de datos, seleccionaremos el menú Datos + Generar conjunto de
datos.
A continuación dibujaremos un DataGrid en el formulario, y pasaremos a su ventana de propiedades. En
la propiedad DataSource asignaremos el DataSet que acabamos de crear, mientras que en la propiedad
DataMember, seleccionaremos la tabla del DataSet que va a mostrar el DataGrid.
Propiedades del DataGrid para la obtención de datos.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
3
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
Completado este último paso, el DataGrid mostrará en tiempo de diseño, la disposición de las columnas
de la tabla en su interior.
DataGrid mostrando información de las columnas de la tabla del DataSet.
En cuanto al código que debemos escribir, en el evento Load, inicializaremos el DataSet, rellenándolo a
continuación mediante el DataAdapter, como sigue:
Private Sub frmGridAsist_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.DsMusica1.Clear()
Me.SqlDataAdapter1.Fill(Me.DsMusica1)
End Sub
Creación de un DataGrid por código.
Supongamos ahora, que necesitamos por código modificar las propiedades no sólo del DataGrid en
general, sino de algunas columnas del mismo. Esto es perfectamente factible mediante los objetos
manipuladores de estilo, tanto del propio DataGrid, como de cada una de las columnas que lo componen.
Private Sub frmGridPropCod_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' crear conexión
Dim oConexion As New SqlConnection()
oConexion.ConnectionString = "Server=(local);" & _
"Database=Musica;uid=sa;pwd=;"
' crear adaptador
oDataAdapter = New SqlDataAdapter("SELECT * FROM Grabaciones", oConexion)
' crear commandbuilder
Dim oCB As SqlCommandBuilder = New SqlCommandBuilder(oDataAdapter)
' crear dataset
oDataSet = New DataSet()
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
4
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
oDataAdapter.Fill(oDataSet, "Grabaciones")
' asignar dataset al datagrid
Me.grdDatos.DataSource = oDataSet
Me.grdDatos.DataMember = "Grabaciones"
Configurar las propiedades del DataGrid
En los casos anteriores, hemos creado un formulario con un DataGrid que tenía la apariencia visual por
defecto de este control. Evidentemente, a través de las propiedades del DataGrid, tanto en diseño como en
ejecución, podemos de un modo muy flexible y potente, cambiar la apariencia y el comportamiento de
este control.
En el formulario frmGridProp, mostramos la misma información que en el anterior ejemplo, pero con una
presentación totalmente distinta, al modificar algunas propiedades del DataGrid como BackColor,
AlternatingBackColor, CaptionText, etc.
Figura 360. DataGrid con propiedades modificadas.
Selección de tabla en el DataGrid
Al construir un DataSet, podemos utilizar distintos objetos DataAdapter para rellenarlo con diversas
tablas. Como hemos visto en los anteriores ejemplos, para mostrar datos en un DataGrid, debemos asignar
el DataSet a su propiedad DataSource, y el nombre de la tabla a mostrar en la propiedad DataMember.
Sin embargo, si obviamos la asignación a DataMember, gracias a los mecanismos de Data Binding, el
propio DataGrid, nos ofrecerá la oportunidad de seleccionar la tabla a mostrar.
El formulario frmGridTablas dispone de este comportamiento. En su evento Load crearemos dos
DataAdapter que usaremos para llenar un DataSet.
Private Sub frmGridTablas_Load(ByVal sender As Object, ByVal e As
System.EventArgs)
Handles MyBase.Load
' crear conexión
Dim oConexion As New SqlConnection()
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
5
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
oConexion.ConnectionString = "Server=(local);" & _
"Database=Musica;uid=sa;pwd=;"
' crear adaptadores
Dim oDAAutores As New SqlDataAdapter("SELECT * FROM Autores", oConexion)
Dim oDAGrabaciones As New SqlDataAdapter("SELECT * FROM Grabaciones",
oConexion)
' crear dataset
Dim oDataSet As New DataSet()
oDAAutores.Fill(oDataSet, "Autores")
oDAGrabaciones.Fill(oDataSet, "Grabaciones")
' asignar dataset a datagrid
Me.grdDatos.DataSource = oDataSet
End Sub
Como al asignar el DataSet al DataGrid no hemos indicado qué tabla queremos que muestre, el DataGrid
en el formulario visualizará un nodo que al expandir, nos permitirá seleccionar la tabla a mostrar.
Podremos contraer dicha tabla para seleccionar otra, y así sucesivamente.
Selección de tabla a mostrar en un DataGrid,
3.Relaciones entre tablas mediante objetos DataRelation
Los objetos DataRelation nos permiten establecer una relación entre dos tablas (objetos DataTable) de un
DataSet, a través de una columna o campo común (objetos DataColumn).
Obtener tablas relacionadas mediante código
En primer lugar al cargar el formulario, creamos una relación entre dos tablas por un campo clave.
Después llenamos un ComboBox con datos de la tabla Customers.
Al seleccionar un valor del ComboBox, se tomarán las filas relacionadas de la tabla Orders y se llenará
con ellas un ListBox. El código necesario podemos verlo en el Código fuente 586.
3
Private Sub frmManual_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load
' crear conexión
Dim oConexion As New SqlConnection()
3
Para los siguientes ejemplos de código, tenemos una base de datos access llamada
'Northwind', con dos tablas: 'Customer' y 'Orders'.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
6
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
oConexion.ConnectionString = "server=(local);" & _
"database=Northwind;uid=sa;pwd=;"
' crear adaptadores
Dim daCustomers As New SqlDataAdapter("SELECT * FROM Customers",
oConexion)
Dim daOrders As New SqlDataAdapter("SELECT * FROM Orders", oConexion)
' instanciar dataset
oDataSet = New DataSet()
oConexion.Open()
' utilizar los dataadapters para llenar el dataset con tablas
daCustomers.Fill(oDataSet, "Customers")
daOrders.Fill(oDataSet, "Orders")
oConexion.Close()
' relacionar las dos tablas del dataset por campo común
oDataSet.Relations.Add("Customers_Orders", _
oDataSet.Tables("Customers").Columns("CustomerID"), _
oDataSet.Tables("Orders").Columns("CustomerID"))
' llenar el combobox con los nombres de cliente
Dim oDataRow As DataRow
'Carga el combobox(cboCustomer) con dos campos de la tabla Customer
' (CustomerID y CompanyName)
For Each oDataRow In oDataSet.Tables("Customers").Rows
Me.cboCustomers.Items.Add(oDataRow("CustomerID"
) & _
"-" & oDataRow("CompanyName"))
Next
End Sub
' cada vez que se selecciona un valor en el combo
' se produce este evento
Private Sub cboCustomers_SelectedIndexChanged(ByVal sender As Object, ByVal
e As
System.EventArgs) Handles cboCustomers.SelectedIndexChanged
' limpiar los valores del listbox
Me.lstOrders.Items.Clear()
Dim drFilaPadre As DataRow
' obtener la fila de la tabla maestra: Customers
drFilaPadre = oDataSet.Tables("Customers").Rows(Me.cboCustomers.SelectedIndex)
Dim drFilasHijas() As DataRow
' obtener las filas hijas de la tabla Orders,
' gracias a la relación Customers-Orders
drFilasHijas = drFilaPadre.GetChildRows("Customers_Orders")
Dim drFila As DataRow
' rellenar el listbox con valores de las filas hijas
For Each drFila In drFilasHijas
Me.lstOrders.Items.Add(drFila("CustomerID") & _
"-" & drFila("OrderID") & _
"-" & drFila("OrderDate"))
Next
End Sub
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
7
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
Se obtendría algo similar al siguiente formulario:
Obtención de filas relacionadas de forma manual.
Visualizar datos relacionados en modo maestro-detalle en un DataGrid
Podemos ahorrar la escritura de la instrucciones que se encargan de obtener las filas hijas, relacionadas
con la fila seleccionada de la tabla padre, empleando un DataGrid. Este control implementa de forma
transparente todos los mecanismos necesarios gracias al Data Binding, por lo que, una vez creada la
relación, sólo hemos de asignar a su propiedad DataSource, la tabla padre del DataSet.
El formulario frmRelacGrid, es un ejemplo de este tipo de relación de datos. El código de su evento Load
es igual al del anterior formulario, por lo que el siguiente código fuente sólo muestra la creación de la
relación en el DataSet, y la asignación de la tabla maestra al DataGrid.
' relacionar las dos tablas del dataset por campo común
oDataSet.Relations.Add("Customers_Orders", _
oDataSet.Tables("Customers").Columns("CustomerID"), _
oDataSet.Tables("Orders").Columns("CustomerID"))
' asignar la tabla maestra al datagrid
Me.grdDatos.DataSource = oDataSet.Tables("Customers")
Al abrir este formulario, se visualizarán los datos de la tabla maestra. Cada fila contiene un nodo
expandible, que al ser pulsado muestra la relación existente. Si volvemos a hacer clic sobre la relación, se
mostrarán en este caso las filas hijas de la tabla Orders, relacionadas con la que hemos seleccionado en la
tabla padre.
En todo momento, desde la vista de las tablas hijas, podemos volver a la vista de la tabla padre, haciendo
clic en el icono con forma de flecha situado en el título del DataGrid.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
8
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
DataGrid mostrando filas de tabla maestra.
DataGrid mostrando filas de tabla detalle.
Mostrar una relación maestro-detalle en dos DataGrid
Podemos separar la visualización de las tablas maestro y detalle en dos DataGrid independientes. Para
sincronizar ambos controles, debemos asignar al que actuará como detalle, una cadena con el nombre de
la tabla maestra, junto con el nombre de la relación, empleando el siguiente formato:
TablaMaestra.Relación.
El formulario frmDosGrid, es un ejemplo de este tipo de organización de datos. En el código fuente
mostramos la parte del evento Load encargada de la creación de la relación entre tablas y asignación a los
DataGrid.
' relacionar las dos tablas del dataset por campo común
oDataSet.Relations.Add("Customers_Orders", _
oDataSet.Tables("Customers").Columns("CustomerID"), _
oDataSet.Tables("Orders").Columns("CustomerID"))
' asignar al datagrid maestro la tabla
Customers
Me.grdCustomers.DataSource = oDataSet
Me.grdCustomers.DataMember = "Customers"
' asignar al datagrid detalles la relación
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
9
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
' que acabamos de crear por código
Me.grdOrders.DataSource = oDataSet
Me.grdOrders.DataMember =
"Customers.Customers_Orders"
En la siguiente figura se muestra el formulario con ambos DataGrid trabajando en modo conjunto; al
hacer clic en una fila del DataGrid maestro, el DataGrid detalle se actualizará con los datos relacionados.
Relación maestro-detalle en dos DataGrid separados.
4.Relación maestro-detalle en múltiples DataGrid
En este caso se trata de disponer de varios DataGrid maestros y uno para detalles, de forma que al hacer
clic sobre cualquiera de los maestros, se muestre la información relacionada en el detalle.
El formulario del proyecto encargado de este ejemplo será frmVariosGrid. Respecto al código, sólo
tenemos que asignar al nuevo DataGrid maestro la información de la tabla principal. Ver código fuente.
' relacionar las dos tablas del dataset por campo común
oDataSet.Relations.Add("Customers_Orders", _
oDataSet.Tables("Customers").Columns("CustomerID"), _
oDataSet.Tables("Orders").Columns("CustomerID"))
' asignar al datagrid maestro la tabla
Customers
Me.grdCustomers.DataSource
=
oDataSet
Me.grdCustomers.DataMember = "Customers"
' asignar al segundo datagrid maestro la tabla
Customers
Me.grdCustomersB.DataSource = oDataSet
Me.grdCustomersB.DataMember = "Customers"
' asignar al datagrid detalles la relación
' que acabamos de crear por código
Me.grdOrders.DataSource = oDataSet
Me.grdOrders.DataMember = "Customers.Customers_Orders"
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
10
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
Veamos el resultado de la ejecución en la Figura 367.
Varios DataGrid maestros contra uno de detalle.
5.Vistas y ordenación de datos con la clase DataView
La clase DataView nos permite la aplicación de vistas personalizadas a partir de una tabla contenida en
un DataSet, así como la ordenación y búsqueda de filas.
En ADO .NET, partiendo de un objeto DataTable situado en un DataSet, vamos a definir varias vistas
simultáneamente, ordenar y buscar registros, con la ventaja de que el consumo de recursos es menor,
puesto que los objetos DataView se alimentan del mismo DataTable.
El DataSet del formulario de pruebas va a estar compuesto por dos tablas. El Código fuente muestra el
evento de carga del formulario.
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles
MyBase.Load
' crear conexión
Dim oConexion As New SqlConnection()
oConexion.ConnectionString = "Server=(local);" & _
"Database=Northwind;uid=sa;pwd=;"
Dim oDataAdapter As SqlDataAdapter
' crear un adaptador de datos para la tabla Customers
oDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", oConexion)
' crear un adaptador de datos para la tabla Products
oDataAdapter = New SqlDataAdapter("SELECT * FROM Products", oConexion)
'crear dataset
oDataSet = New DataSet()
' añadir tabla al dataset con el adaptador
oDataAdapter.Fill(oDataSet, "Customers")
oDataAdapter = Nothing
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
11
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
' añadir tabla al dataset con el adaptador
oDataAdapter.Fill(oDataSet, "Products")
oDataAdapter = Nothing
End Sub
Vistas por código y DefaultView
Podemos crear una vista instanciando un objeto de la clase DataView, o también obteniendo la
denominada vista por defecto de una tabla de un DataSet, a través de la propiedad DefaultView del objeto
DataTable. En el siguiente código se crean dos vistas de esta manera.
Private Sub mnuNormal_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuNormal.Click
' crear una vista por código y asignarla
' a un datagrid
Dim dvNormal As DataView
dvNormal = New DataView(oDataSet.Tables("Customers"))
Me.grdDatos.CaptionText = "Customers"
Me.grdDatos.DataSource = dvNormal
' tomar la vista por defecto de una tabla
' del dataset y asignarla a un datagrid
Me.grdDatosBIS.CaptionText = "Products"
Me.grdDatosBIS.DataSource = oDataSet.Tables("Products").DefaultView
End Sub
Y este será el resultado mostrando estas vistas en sendos DataGrid del formulario.
Objetos DataView creados por código y obtenido de DataTable.DefaultView.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
12
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
Filtros con objetos DataView
La propiedad RowFilter de la clase DataView nos permite asignar a este objeto, una cadena con la
expresión de filtro, que en una consulta en lenguaje SQL sería la parte correspondiente a la partícula
Where.
El código fuente muestra el código de la opción de menú , en la que se crea un filtro que se muestra
posteriormente en un DataGrid.
Private Sub mnuPais_Click(ByVal sender As System.Object, ByVal
e As
System.EventArgs) Handles mnuPais.Click
' crear dataview
Dim oDataView As New DataView()
oDataView.Table = oDataSet.Tables("Customers")
' establecer un filtro
oDataView.RowFilter = "Country='Spain'"
Me.grdDatos.CaptionText = "Filtrar Customers por país Spain"
Me.grdDatos.DataSource = oDataView
End Sub
Así se muestra las filas de la tabla con el filtro aplicado.
DataView con filtro.
Como hemos comentado anteriormente, a partir de un DataTable podemos obtener varios filtros mediante
distintos objetos DataView, sin que ello suponga una penalización en el consumo de recursos. Para
demostrar este punto, en el siguiente código se crea una vista basada en un filtro combinado, y una vista
normal, ambas empleando la misma tabla base.
Private Sub mnuCombinada_Click(ByVal sender As System.Object, ByVal
e As
System.EventArgs) Handles mnuCombinada.Click
' tomar la tabla Customers del dataset y aplicar...
' ...filtro combinado por dos campos y depositar en un datagrid
Dim oDataView As New DataView()
oDataView.Table = oDataSet.Tables("Customers")
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
13
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
oDataView.RowFilter = "ContactTitle LIKE '%Manager%' AND
Country IN ('Spain','USA')"
Me.grdDatos.CaptionText = "Filtro combinado por campos ContactTitle y Country"
Me.grdDatos.DataSource = oDataView
' ...filtro por un campo y depositar en otro datagrid
Dim oDV As New DataView()
oDV.Table = oDataSet.Tables("Customers")
oDV.RowFilter = "ContactName LIKE '%an%'"
Me.grdDatosBIS.CaptionText = "Filtro por campo ContactName"
Me.grdDatosBIS.DataSource = oDV
End Sub
El formulario con los diversos filtros establecidos
Filtros combinados con objetos DataView.
Búsquedas con DataView
Estableciendo el adecuado filtro a un objeto DataView, podemos realizar búsquedas de registros en
tablas, como muestra el código fuente , correspondiente a la opción de menú Vistas + Buscar fila, del
formulario de ejemplo. Deberemos previamente, haber escrito en el TextBox del formulario, el
identificador de la tabla Customers a buscar.
Private Sub mnuBuscarFila_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles mnuBuscarFila.Click
' crear un dataview y buscar una fila en la vista
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
14
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
' estableciendo un filtro
Dim oDataView As New DataView()
oDataView.Table = oDataSet.Tables("Customers")
oDataView.RowFilter = "CustomerID = '" & Me.txtCustomerID.Text & "'"
Me.grdDatosBIS.CaptionText = "Buscar ID cliente: " & Me.txtCustomerID.Text
Me.grdDatosBIS.DataSource = oDataView
End Sub
Veamos el resultado de una búsqueda, mostrado en uno de los DataGrid del formulario.
Búsqueda de una fila en una tabla de un DataSet, empleando un DataView.
Ordenación de filas mediante DataView
Para ordenar las filas en un DataView emplearemos su propiedad Sort, asignándole una cadena con el
nombre de columna/s a ordenar, tal y como muestra el código fuente, de la opción de menú Ordenación
+ Normal, en el formulario del ejemplo.
Private Sub mnuOrdNormal_Click(ByVal sender As System.Object, ByVal
e As
System.EventArgs) Handles mnuOrdNormal.Click
' crear dataview y ordenar las filas
' con la propiedad Sort
Dim oDataView As New DataView()
oDataView.Table = oDataSet.Tables("Customers")
oDataView.Sort = "Country"
Me.grdDatos.CaptionText = "Ordenar por campo Country"
Me.grdDatos.DataSource = oDataView
End Sub
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
15
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
Veamos el resultado al ejecutar:
DataView ordenando las filas por la columna Country.
Si necesitamos ordenar por múltiples columnas de la tabla, sólo tenemos que asignar a Sort una cadena
con la lista de columnas requeridas como sigue:
oDataView.Sort = "Country, PostalCode"
También es factible asignar a un DataView una combinación de filtro y ordenación, utilizando en la
misma operación las propiedades RowFilter y Sort. El menú del formulario Ordenación + Con filtro
realiza este trabajo, que vemos en el código fuente.
Private Sub mnuOrdenFiltro_Click(ByVal sender As System.Object, ByVal
e As
System.EventArgs) Handles mnuOrdenFiltro.Click
Dim oDataView As New DataView()
oDataView.Table = oDataSet.Tables("Customers")
' establecer un filtro al dataview
oDataView.RowFilter = "Country='USA'"
' ordenar las filas del filtro
oDataView.Sort = "City"
Me.grdDatos.CaptionText = "Filtrar por USA. Ordenar por campo City"
Me.grdDatos.DataSource = oDataView
End Sub
Los datos con el filtro y orden podemos verlos en el DataGrid del formulario, que muestra la Figura 373.
Resultado de DataView con filtro y orden.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
16
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
6.Obtener el esquema de un DataSet
El esquema de un DataSet consiste en toda la información contenida por este objeto, acerca de los
nombres de tablas, columnas, relaciones, etc.; es decir, se trata de metainformación sobre los datos que
contiene el DataSet.
Podemos obtener estos metadatos del DataSet recorriendo la colección que nos interese en cada caso:
Tables, Columns, etc.
El código fuente muestra como tras crear un DataSet, recorremos sus tablas, y dentro de estas, sus
columnas, mostrando la información obtenida en un ListBox.
Private Sub btnEsquema_Click(ByVal sender As System.Object, ByVal
e As
System.EventArgs) Handles btnEsquema.Click
' crear conexión
Dim oConexion As New SqlConnection()
oConexion.ConnectionString = "Server=(local);" & _
"Database=Northwind;uid=sa;pwd=;"
' crear dataset
Dim oDataSet As New DataSet()
' crear adaptadores de datos para las tablas
' y añadir cada tabla al dataset con el adaptador
Dim oDataAdapter As SqlDataAdapter
oDataAdapter = New SqlDataAdapter("SELECT * FROM Customers", oConexion)
oDataAdapter.Fill(oDataSet, "Customers")
oDataAdapter = Nothing
oDataAdapter = New SqlDataAdapter("SELECT * FROM Orders", oConexion)
oDataAdapter.Fill(oDataSet, "Orders")
oDataAdapter = Nothing
oDataAdapter = New SqlDataAdapter("SELECT * FROM Products", oConexion)
oDataAdapter.Fill(oDataSet, "Products")
oDataAdapter = Nothing
oDataAdapter = New SqlDataAdapter("SELECT * FROM Territories", oConexion)
oDataAdapter.Fill(oDataSet, "Territories")
oDataAdapter = Nothing
' crear un objeto tabla y columna para mostrar
' la información del esquema que el dataset contiene
Dim oDataTable As DataTable
Dim oDataColumn As DataColumn
Me.lstEsquema.Items.Add("Estructura del DataSet")
' recorrer la colección de tablas del DataSet
For Each oDataTable In oDataSet.Tables
Me.lstEsquema.Items.Add("Tabla: " & oDataTable.TableName)
' recorrer la colección de columnas de la tabla
For Each oDataColumn In oDataTable.Columns
Me.lstEsquema.Items.Add("Campo: " & _
oDataColumn.ColumnName & " --- " & _
"Tipo: " & oDataColumn.DataType.Name)
Next
Next
End Sub
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
17
IES Fco. De Quevedo Desarrollo de Aplicaciones Informáticas
Visual Basic Net – BD's.Datagrid, relaciones y vistas.
El ListBox relleno con el esquema del DataSet tras haber pulsado el botón del formulario.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas
18

Documentos relacionados