Sie sind auf Seite 1von 18

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas 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 Sez Arenas http://vb.jsaez.com/

Contenidos:
1. Introduccin.............................................................................................................................. 1 2. DataGrid .................................................................................................................................. 2 Creacin de un DataGrid a travs de los asistentes del IDE .................................................... 3 Creacin de un DataGrid por cdigo........................................................................................ 4 Configurar las propiedades del DataGrid .................................................................................5 Seleccin de tabla en el DataGrid ............................................................................................ 5 3. Relaciones entre tablas mediante objetos DataRelation .......................................................... 6 4. Relacin maestro-detalle en mltiples DataGrid ................................................................... 10 5. Vistas y ordenacin de datos con la clase DataView ............................................................ 11 Vistas por cdigo y DefaultView ...........................................................................................12 Filtros con objetos DataView .................................................................................................13 Bsquedas con DataView ...................................................................................................... 14 Ordenacin de filas mediante DataView ................................................................................15 6. Obtener el esquema de un DataSet ........................................................................................ 17

1.Introduccin.
En este tema comenzaremos tratantando de nuevo aspectos del control DataGrid, el cual nos permite trabajar con datos de forma cmoda y sencilla. A continuacin 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 DataRealatin 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 presentacin de los datos en formato de tabla.
1

El contenido es Manual de Programacin Visual Basic Net- Luis Miguel Blanco. Editorial Eidos., la maquetacin,. seleccin y adaptacin del contenido es ma.
Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.

2.DataGrid
Este control, del que ya realizamos una pequea introduccin en el tema anterior, nos es muy til para mostrar la informacin contenida en las bases de datos de forma rpida y casi sin programacin. Mediante los DataGrid podemos editar, aadir y borrar registros. Teniendo en cuenta que se trabaja en desconexin, hasta que no se realice una actualizacin mediante un 'Update' no se reflejarn los cambios en la base de datos original. Otra caracterstica incluida por defecto es la ordenacin de las filas por columna al hacer clic en su ttulo. Finalmente, al redimensionar el formulario, tambin cambiar el tamao del DataGrid, puesto que hemos utilizado su propiedad Anchor para anclarlo a todos los bordes de la ventana.

Un DataGrid editable.

El siguiente sera el cdigo principal de este formulario. En este caso la conexin 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.

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 conexin Dim oConexion As New SqlConnection() oConexion.ConnectionString = "Server=(local);" & _ "Database=Musica;uid=sa;pwd=;" ' crear adaptador
2

Para los siguientes ejemplos de cdigo, ttenemos una base de datos access llamada 'Musica', con dos tablas: 'Grabaciones' y 'Autores'. Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas 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

Creacin de un DataGrid a travs de los asistentes del IDE


El modo ms potente de crear un DataGrid es a travs de cdigo, ya que nos permite un mayor grado de manipulacin de sus propiedades. Sin embargo, para aquellas ocasiones en que necesitemos una vista rpida de los datos en un formulario para pruebas o similares, podemos utilizar los asistentes de Visual Studio .NET, en lo que a creacin 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 aadido el diseador, abriremos la pestaa Explorador de servidores, y haciendo clic derecho en su elemento Conexiones de datos, nos mostrar la ventana para la creacin de una nueva conexin con una base de datos, en ella introduciremos los valores necesarios para la conexin.
Finalizada la creacin del adaptador de datos, seleccionaremos el men Datos + Generar conjunto de datos.

A continuacin 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 obtencin de datos.

Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.

Completado este ltimo paso, el DataGrid mostrar en tiempo de diseo, la disposicin de las columnas de la tabla en su interior.

DataGrid mostrando informacin de las columnas de la tabla del DataSet.

En cuanto al cdigo que debemos escribir, en el evento Load, inicializaremos el DataSet, rellenndolo a continuacin 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

Creacin de un DataGrid por cdigo.


Supongamos ahora, que necesitamos por cdigo modificar las propiedades no slo 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 conexin 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

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas 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 tena la apariencia visual por defecto de este control. Evidentemente, a travs de las propiedades del DataGrid, tanto en diseo como en ejecucin, podemos de un modo muy flexible y potente, cambiar la apariencia y el comportamiento de este control. En el formulario frmGridProp, mostramos la misma informacin que en el anterior ejemplo, pero con una presentacin totalmente distinta, al modificar algunas propiedades del DataGrid como BackColor, AlternatingBackColor, CaptionText, etc.

Figura 360. DataGrid con propiedades modificadas.

Seleccin 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 asignacin 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 conexin Dim oConexion As New SqlConnection()

Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas 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.

Seleccin de tabla a mostrar en un DataGrid,

3.Relaciones entre tablas mediante objetos DataRelation


Los objetos DataRelation nos permiten establecer una relacin entre dos tablas (objetos DataTable) de un DataSet, a travs de una columna o campo comn (objetos DataColumn).

Obtener tablas relacionadas mediante cdigo


En primer lugar al cargar el formulario, creamos una relacin entre dos tablas por un campo clave. Despus llenamos un ComboBox con datos de la tabla Customers. Al seleccionar un valor del ComboBox, se tomarn las filas relacionadas de la tabla Orders y se llenar con ellas un ListBox. El cdigo necesario podemos verlo en el Cdigo fuente 586.

Private Sub frmManual_Load(ByVal sender As Object, ByVal e As System.EventArgs)

Handles MyBase.Load ' crear conexin Dim oConexion As New SqlConnection()


3

Para los siguientes ejemplos de cdigo, tenemos una base de datos access llamada 'Northwind', con dos tablas: 'Customer' y 'Orders'. Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas 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 comn 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 relacin 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

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.

Se obtendra algo similar al siguiente formulario:

Obtencin 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 relacin, slo hemos de asignar a su propiedad DataSource, la tabla padre del DataSet. El formulario frmRelacGrid, es un ejemplo de este tipo de relacin de datos. El cdigo de su evento Load es igual al del anterior formulario, por lo que el siguiente cdigo fuente slo muestra la creacin de la relacin en el DataSet, y la asignacin de la tabla maestra al DataGrid.

' relacionar las dos tablas del dataset por campo comn 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 visualizarn los datos de la tabla maestra. Cada fila contiene un nodo expandible, que al ser pulsado muestra la relacin existente. Si volvemos a hacer clic sobre la relacin, se mostrarn 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 ttulo del DataGrid.

Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.

DataGrid mostrando filas de tabla maestra.

DataGrid mostrando filas de tabla detalle.

Mostrar una relacin maestro-detalle en dos DataGrid


Podemos separar la visualizacin 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 relacin, empleando el siguiente formato: TablaMaestra.Relacin. El formulario frmDosGrid, es un ejemplo de este tipo de organizacin de datos. En el cdigo fuente mostramos la parte del evento Load encargada de la creacin de la relacin entre tablas y asignacin a los DataGrid.

' relacionar las dos tablas del dataset por campo comn 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 relacin Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.
' que acabamos de crear por cdigo 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.

Relacin maestro-detalle en dos DataGrid separados.

4.Relacin maestro-detalle en mltiples 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 informacin relacionada en el detalle. El formulario del proyecto encargado de este ejemplo ser frmVariosGrid. Respecto al cdigo, slo tenemos que asignar al nuevo DataGrid maestro la informacin de la tabla principal. Ver cdigo fuente.

' relacionar las dos tablas del dataset por campo comn 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 relacin ' que acabamos de crear por cdigo 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 Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.
Veamos el resultado de la ejecucin en la Figura 367.

Varios DataGrid maestros contra uno de detalle.

5.Vistas y ordenacin de datos con la clase DataView


La clase DataView nos permite la aplicacin de vistas personalizadas a partir de una tabla contenida en un DataSet, as como la ordenacin y bsqueda de filas. En ADO .NET, partiendo de un objeto DataTable situado en un DataSet, vamos a definir varias vistas simultneamente, 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 Cdigo 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 conexin 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() ' aadir 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 Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.

' aadir tabla al dataset con el adaptador oDataAdapter.Fill(oDataSet, "Products") oDataAdapter = Nothing End Sub

Vistas por cdigo y DefaultView


Podemos crear una vista instanciando un objeto de la clase DataView, o tambin obteniendo la denominada vista por defecto de una tabla de un DataSet, a travs de la propiedad DefaultView del objeto DataTable. En el siguiente cdigo 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 cdigo 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 cdigo y obtenido de DataTable.DefaultView.

Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

12

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas 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 expresin de filtro, que en una consulta en lenguaje SQL sera la parte correspondiente a la partcula Where. El cdigo fuente muestra el cdigo de la opcin 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 pas 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 penalizacin en el consumo de recursos. Para demostrar este punto, en el siguiente cdigo 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 Informticas 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.

Bsquedas con DataView


Estableciendo el adecuado filtro a un objeto DataView, podemos realizar bsquedas de registros en tablas, como muestra el cdigo fuente , correspondiente a la opcin 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 Informticas 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 bsqueda, mostrado en uno de los DataGrid del formulario.

Bsqueda de una fila en una tabla de un DataSet, empleando un DataView.

Ordenacin de filas mediante DataView


Para ordenar las filas en un DataView emplearemos su propiedad Sort, asignndole una cadena con el nombre de columna/s a ordenar, tal y como muestra el cdigo fuente, de la opcin de men Ordenacin + 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 Informticas 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 mltiples columnas de la tabla, slo tenemos que asignar a Sort una cadena con la lista de columnas requeridas como sigue:
oDataView.Sort = "Country, PostalCode"

Tambin es factible asignar a un DataView una combinacin de filtro y ordenacin, utilizando en la misma operacin las propiedades RowFilter y Sort. El men del formulario Ordenacin + Con filtro realiza este trabajo, que vemos en el cdigo 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 Informticas 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 informacin contenida por este objeto, acerca de los nombres de tablas, columnas, relaciones, etc.; es decir, se trata de metainformacin sobre los datos que contiene el DataSet. Podemos obtener estos metadatos del DataSet recorriendo la coleccin que nos interese en cada caso: Tables, Columns, etc. El cdigo fuente muestra como tras crear un DataSet, recorremos sus tablas, y dentro de estas, sus columnas, mostrando la informacin obtenida en un ListBox.

Private Sub btnEsquema_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEsquema.Click ' crear conexin 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 aadir 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 informacin del esquema que el dataset contiene Dim oDataTable As DataTable Dim oDataColumn As DataColumn Me.lstEsquema.Items.Add("Estructura del DataSet") ' recorrer la coleccin de tablas del DataSet For Each oDataTable In oDataSet.Tables Me.lstEsquema.Items.Add("Tabla: " & oDataTable.TableName) ' recorrer la coleccin 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 Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas. El ListBox relleno con el esquema del DataSet tras haber pulsado el botn del formulario.

Visual Basic .Net _ BD's. Datagrid, relaciones y vistas

18

Das könnte Ihnen auch gefallen