Está en la página 1de 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 S e! "renas #tt$%&&'(.)sae!.co*&

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 ta la en el DataGrid ............................................................................................ 5 3. !elaciones entre ta las "ediante o #etos Data!elation .......................................................... $ 4. !elacin "aestro%detalle en "&ltiples DataGrid ................................................................... 1' 5. (istas ) ordenacin de datos con la clase Data(ie* ............................................................ 11 (istas por cdigo ) Default(ie* ...........................................................................................12 +iltros con o #etos Data(ie* .................................................................................................13 ,&s-uedas con Data(ie* ...................................................................................................... 14 .rdenacin de filas "ediante Data(ie* ................................................................................15 $. . tener el es-ue"a de un DataSet ........................................................................................ 1/

1.+ntroducci,n.
En este te"a co"en0are"os tratantando de nuevo aspectos del control DataGrid1 el cual nos per"ite tra a#ar con datos de for"a c"oda ) sencilla. 2 continuacin se 3a lar4 de co"o o tener ta las relacionadas1 de for"a -ue pode"os esta lecer una relacion entre ta las -ue visual se encargar4 de gestionar directa"ente. Gracias a la potencialidad de los o #etos Data!ealatin ) los DataGrid1 podre"os construir aplicaciones tipicas de datos co"o son las relaciones 56aestro%Detalle. 7ara finali0ar se tratar4 un nuevo o #eto lla"ado Data(ie*1 "ediante el cual se reali0an funciones de presentacin de los datos en for"ato de ta la.
1

El contenido es 8 96anual de 7rogra"acin (isual ,asic :et;% <uis 6iguel ,lanco. Editorial Eidos.1 la "a-uetacin1. seleccin ) adaptacin del contenido es "=a.
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.Data-rid
Este control1 del -ue )a reali0a"os una pe-ue>a introduccin en el te"a anterior1 nos es "u) &til para "ostrar la infor"acin contenida en las ases de datos de for"a r4pida ) casi sin progra"acin. 6ediante los DataGrid pode"os editar1 a>adir ) orrar registros. ?eniendo en cuenta -ue se tra a#a en descone@in1 3asta -ue no se realice una actuali0acin "ediante un 5Apdate5 no se refle#ar4n los ca" ios en la ase de datos original. .tra caracter=stica incluida por defecto es la ordenacin de las filas por colu"na al 3acer clic en su t=tulo. +inal"ente1 al redi"ensionar el for"ulario1 ta" in ca" iar4 el ta"a>o del DataGrid1 puesto -ue 3e"os utili0ado su propiedad 2nc3or para anclarlo a todos los ordes de la ventana.

An DataGrid edita le.

El siguiente ser=a el cdigo principal de este for"ulario. En este caso la cone@in a la ase de datos se reali0a de for"a "anual1 de iendo1 entre otras cosas1 crear un o #eto Co""and,uilder para el Data2dapter1 )a -ue en caso contrario1 al intentar actuali0ar el DataSet contra la ase de datos1 se producir4 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 c digo! ttenemos una "ase de datos access llamada #$usica#! con dos ta"las% #&ra"aciones# ' #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 "odo "4s potente de crear un DataGrid es a travs de cdigo1 )a -ue nos per"ite un "a)or grado de "anipulacin de sus propiedades. Sin e" argo1 para a-uellas ocasiones en -ue necesite"os una vista r4pida de los datos en un for"ulario para prue as o si"ilares1 pode"os utili0ar los asistentes de (isual Studio .:E?1 en lo -ue a creacin de cone@iones1 adaptadores1 DataGrid1 etc.1 se refiere.

(a"os a crear por lo tanto un nuevo for"ulario para el pro)ecto con el no" re fr"Grid2sist. Ana ve0 a>adido el dise>ador1 a rire"os la pesta>a Explorador de servidores1 ) 3aciendo clic derec3o en su ele"ento Conexiones de datos1 nos "ostrar4 la ventana para la creacin de una nueva cone@in con una ase de datos1 en ella introducire"os los valores necesarios para la cone@in.
+inali0ada la creacin del adaptador de datos1 seleccionare"os el "en& Datos B Generar con#unto de datos.

2 continuacin di u#are"os un DataGrid en el for"ulario1 ) pasare"os a su ventana de propiedades. En la propiedad DataSource asignare"os el DataSet -ue aca a"os de crear1 "ientras -ue en la propiedad Data6e" er1 seleccionare"os la ta la del DataSet -ue va a "ostrar el DataGrid.

7ropiedades del DataGrid para la o tencin 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.

Co"pletado este &lti"o paso1 el DataGrid "ostrar4 en tie"po de dise>o1 la disposicin de las colu"nas de la ta la en su interior.

DataGrid "ostrando infor"acin de las colu"nas de la ta la del DataSet.

En cuanto al cdigo -ue de e"os escri ir1 en el evento <oad1 iniciali0are"os el DataSet1 rellen4ndolo a continuacin "ediante el Data2dapter1 co"o sigueC

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.


Suponga"os a3ora1 -ue necesita"os por cdigo "odificar las propiedades no slo del DataGrid en general1 sino de algunas colu"nas del "is"o. Esto es perfecta"ente facti le "ediante los o #etos "anipuladores de estilo1 tanto del propio DataGrid1 co"o de cada una de las colu"nas -ue lo co"ponen.
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 anteriores1 3e"os creado un for"ulario con un DataGrid -ue ten=a la apariencia visual por defecto de este control. Evidente"ente1 a travs de las propiedades del DataGrid1 tanto en dise>o co"o en e#ecucin1 pode"os de un "odo "u) fle@i le ) potente1 ca" iar la apariencia ) el co"porta"iento de este control. En el for"ulario fr"Grid7rop1 "ostra"os la "is"a infor"acin -ue en el anterior e#e"plo1 pero con una presentacin total"ente distinta1 al "odificar algunas propiedades del DataGrid co"o ,acDColor1 2lternating,acDColor1 Caption?e@t1 etc.

+igura 3$'. DataGrid con propiedades "odificadas.

Seleccin de tabla en el DataGrid


2l construir un DataSet1 pode"os utili0ar distintos o #etos Data2dapter para rellenarlo con diversas ta las. Co"o 3e"os visto en los anteriores e#e"plos1 para "ostrar datos en un DataGrid1 de e"os asignar el DataSet a su propiedad DataSource1 ) el no" re de la ta la a "ostrar en la propiedad Data6e" er. Sin e" argo1 si o via"os la asignacin a Data6e" er1 gracias a los "ecanis"os de Data ,inding1 el propio DataGrid1 nos ofrecer4 la oportunidad de seleccionar la ta la a "ostrar. El for"ulario fr"Grid?a las dispone de este co"porta"iento. En su evento <oad creare"os dos Data2dapter -ue usare"os 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

Co"o al asignar el DataSet al DataGrid no 3e"os indicado -u ta la -uere"os -ue "uestre1 el DataGrid en el for"ulario visuali0ar4 un nodo -ue al e@pandir1 nos per"itir4 seleccionar la ta la a "ostrar. 7odre"os contraer dic3a ta la para seleccionar otra1 ) as= sucesiva"ente.

Seleccin de ta la a "ostrar en un DataGrid1

..Relaciones entre ta(las *ediante o()etos DataRelation


<os o #etos Data!elation nos per"iten esta lecer una relacin entre dos ta las Eo #etos Data?a leF de un DataSet1 a travs de una colu"na o ca"po co"&n Eo #etos DataColu"nF.

/(tener ta(las relacionadas *ediante c,digo


En pri"er lugar al cargar el for"ulario1 crea"os una relacin entre dos ta las por un ca"po clave. Despus llena"os un Co" o,o@ con datos de la ta la Custo"ers. 2l seleccionar un valor del Co" o,o@1 se to"ar4n las filas relacionadas de la ta la .rders ) se llenar4 con ellas un <ist,o@. El cdigo necesario pode"os verlo en el Cdigo fuente 5G$.

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

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


(

Para los siguientes ejemplos de c digo! tenemos una "ase de datos access llamada #)ort*+ind#! con dos ta"las% #,ustomer# ' #-rders#. 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 o tendr=a algo si"ilar al siguiente for"ularioC

. tencin de filas relacionadas de for"a "anual.

Visuali!ar datos relacionados en *odo *aestro0detalle en un Data-rid


7ode"os a3orrar la escritura de la instrucciones -ue se encargan de o tener las filas 3i#as1 relacionadas con la fila seleccionada de la ta la padre1 e"pleando un DataGrid. Este control i"ple"enta de for"a transparente todos los "ecanis"os necesarios gracias al Data ,inding1 por lo -ue1 una ve0 creada la relacin1 slo 3e"os de asignar a su propiedad DataSource1 la ta la padre del DataSet. El for"ulario fr"!elacGrid1 es un e#e"plo de este tipo de relacin de datos. El cdigo de su evento <oad es igual al del anterior for"ulario1 por lo -ue el siguiente cdigo fuente slo "uestra la creacin de la relacin en el DataSet1 ) la asignacin de la ta la "aestra 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")

2l a rir este for"ulario1 se visuali0ar4n los datos de la ta la "aestra. Cada fila contiene un nodo e@pandi le1 -ue al ser pulsado "uestra la relacin e@istente. Si volve"os a 3acer clic so re la relacin1 se "ostrar4n en este caso las filas 3i#as de la ta la .rders1 relacionadas con la -ue 3e"os seleccionado en la ta la padre. En todo "o"ento1 desde la vista de las ta las 3i#as1 pode"os volver a la vista de la ta la padre1 3aciendo clic en el icono con for"a de flec3a situado en el t=tulo 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 "ostrando filas de ta la "aestra.

DataGrid "ostrando filas de ta la detalle.

1ostrar una relaci,n *aestro0detalle en dos Data-rid


7ode"os separar la visuali0acin de las ta las "aestro ) detalle en dos DataGrid independientes. 7ara sincroni0ar a" os controles1 de e"os asignar al -ue actuar4 co"o detalle1 una cadena con el no" re de la ta la "aestra1 #unto con el no" re de la relacin1 e"pleando el siguiente for"atoC ?a la6aestra.!elacin. El for"ulario fr"DosGrid1 es un e#e"plo de este tipo de organi0acin de datos. En el cdigo fuente "ostra"os la parte del evento <oad encargada de la creacin de la relacin entre ta las ) 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 "uestra el for"ulario con a" os DataGrid tra a#ando en "odo con#untoI al 3acer clic en una fila del DataGrid "aestro1 el DataGrid detalle se actuali0ar4 con los datos relacionados.

!elacin "aestro%detalle en dos DataGrid separados.

2.Relaci,n *aestro0detalle en *3lti$les Data-rid


En este caso se trata de disponer de varios DataGrid "aestros ) uno para detalles1 de for"a -ue al 3acer clic so re cual-uiera de los "aestros1 se "uestre la infor"acin relacionada en el detalle. El for"ulario del pro)ecto encargado de este e#e"plo ser4 fr"(ariosGrid. !especto al cdigo1 slo tene"os -ue asignar al nuevo DataGrid "aestro la infor"acin de la ta la principal. (er 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

1'

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas.
(ea"os el resultado de la e#ecucin en la +igura 3$/.

(arios DataGrid "aestros contra uno de detalle.

4.Vistas y ordenaci,n de datos con la clase DataVie5


<a clase Data(ie* nos per"ite la aplicacin de vistas personali0adas a partir de una ta la contenida en un DataSet1 as= co"o la ordenacin ) &s-ueda de filas. En 2D. .:E?1 partiendo de un o #eto Data?a le situado en un DataSet1 va"os a definir varias vistas si"ult4nea"ente1 ordenar ) uscar registros1 con la venta#a de -ue el consu"o de recursos es "enor1 puesto -ue los o #etos Data(ie* se ali"entan del "is"o Data?a le. El DataSet del for"ulario de prue as va a estar co"puesto por dos ta las. El Cdigo fuente "uestra el evento de carga del for"ulario.

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


7ode"os crear una vista instanciando un o #eto de la clase Data(ie*1 o ta" in o teniendo la deno"inada vista por defecto de una ta la de un DataSet1 a travs de la propiedad Default(ie* del o #eto Data?a le. En el siguiente cdigo se crean dos vistas de esta "anera.

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

J este ser4 el resultado "ostrando estas vistas en sendos DataGrid del for"ulario.

. #etos Data(ie* creados por cdigo ) o tenido de Data?a le.Default(ie*.

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 ob etos DataView
<a propiedad !o*+ilter de la clase Data(ie* nos per"ite asignar a este o #eto1 una cadena con la e@presin de filtro1 -ue en una consulta en lengua#e SK< ser=a la parte correspondiente a la part=cula L3ere. El cdigo fuente "uestra el cdigo de la opcin de "en& 1 en la -ue se crea un filtro -ue se "uestra posterior"ente 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

2s= se "uestra las filas de la ta la con el filtro aplicado.

Data(ie* con filtro.

Co"o 3e"os co"entado anterior"ente1 a partir de un Data?a le pode"os o tener varios filtros "ediante distintos o #etos Data(ie*1 sin -ue ello suponga una penali0acin en el consu"o de recursos. 7ara de"ostrar este punto1 en el siguiente cdigo se crea una vista asada en un filtro co" inado1 ) una vista nor"al1 a" as e"pleando la "is"a ta la ase.

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 for"ulario con los diversos filtros esta lecidos

+iltros co" inados con o #etos Data(ie*.

!"s#uedas con DataView


Esta leciendo el adecuado filtro a un o #eto Data(ie*1 pode"os reali0ar &s-uedas de registros en ta las1 co"o "uestra el cdigo fuente 1 correspondiente a la opcin de "en& Vistas + Buscar fila1 del for"ulario de e#e"plo. De ere"os previa"ente1 3a er escrito en el ?e@t,o@ del for"ulario1 el identificador de la ta la Custo"ers a uscar.

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

(ea"os el resultado de una &s-ueda1 "ostrado en uno de los DataGrid del for"ulario.

,&s-ueda de una fila en una ta la de un DataSet1 e"pleando un Data(ie*.

$rdenacin de filas %ediante DataView


7ara ordenar las filas en un Data(ie* e"pleare"os su propiedad Sort1 asign4ndole una cadena con el no" re de colu"naMs a ordenar1 tal ) co"o "uestra el cdigo fuente1 de la opcin de "en& Ordenacin + Normal1 en el for"ulario del e#e"plo.

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.
(ea"os el resultado al e#ecutarC

Data(ie* ordenando las filas por la colu"na Countr).

Si necesita"os ordenar por "&ltiples colu"nas de la ta la1 slo tene"os -ue asignar a Sort una cadena con la lista de colu"nas re-ueridas co"o sigueC
oDataView.Sort = "Country, PostalCode"

?a" in es facti le asignar a un Data(ie* una co" inacin de filtro ) ordenacin1 utili0ando en la "is"a operacin las propiedades !o*+ilter ) Sort. El "en& del for"ulario Ordenacin + Con filtro reali0a este tra a#o1 -ue ve"os 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

<os datos con el filtro ) orden pode"os verlos en el DataGrid del for"ulario1 -ue "uestra la +igura 3/3.

!esultado de Data(ie* con filtro ) orden.

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

1$

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

6./(tener el es7ue*a de un DataSet


El es-ue"a de un DataSet consiste en toda la infor"acin contenida por este o #eto1 acerca de los no" res de ta las1 colu"nas1 relaciones1 etc.I es decir1 se trata de "etainfor"acin so re los datos -ue contiene el DataSet. 7ode"os o tener estos "etadatos del DataSet recorriendo la coleccin -ue nos interese en cada casoC ?a les1 Colu"ns1 etc. El cdigo fuente "uestra co"o tras crear un DataSet1 recorre"os sus ta las1 ) dentro de estas1 sus colu"nas1 "ostrando la infor"acin o tenida en un <ist,o@.

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

1/

IES Fco. De Quevedo Desarrollo de Aplicaciones Informticas Visual Basic Net BD's.Datagrid, relaciones y vistas. El <ist,o@ relleno con el es-ue"a del DataSet tras 3a er pulsado el otn del for"ulario.

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

1G

También podría gustarte