asp.net - gridview - paginación con datos de búsqueda dinámicos

Upload: jrcr1

Post on 18-Jul-2015

2.198 views

Category:

Documents


1 download

TRANSCRIPT

ASP.NET - GridView - paginacin con datos de bsqueda dinmicos

Cmo realizar una bsqueda de datos dinmicos en las pginas ASP.NET utilizando el control GridView para la localizacin de los datos

Realizar esta tarea puede parecer algo complicado, pero utilizando la nueva versin de la plataforma NET es muy fcil de resolver.

Para ello slo necesitamos una herramienta gratuita: Visual Web Developer 2008 Express Edition (VWD 2008) para hacer ms didctico el crear un escenario para que podamos demostrar en la prctica la forma de resolver este problema.

Tomemos como ejemplo de base de datos Neptuno.mdb y echemos un vistazo a la relacin entre las tablas productos, Pedidos y Detalles de pedidos, como se muestra a continuacin:

Tomamos nota de que tenemos una tabla con los datos de productos y las aplicaciones que mostrarn el detalle y los cdigos de los productos.

Nuestro objetivo es crear una pgina web en la cual se puedan consultar las solicitudes que tiene un producto en particular.

Para ello se utilizan dos controles:

El control DropDownList que se mostrar una lista de los productos existentes en la tabla Productos;

El control GridView que mostrar una lista de detalles de las aplicaciones para las que un elemento seleccionado en la lista desplegable se encuentra ; Crear un nuevo sitio web del men Archivo-> Nueva pgina web bajo el nombre de busquedinamica;

Se va a crear la pgina Default.aspx utilizando el modelo de cdigo subyacente y vamos a utilizar el modelo en lnea donde usted pondr en la misma pgina todo el cdigo necesario para su ejecucin.

A continuacin, vamos a excluir la pgina Default.aspx y haremos clic en el botn derecho del ratn sobre el nombre del proyecto y seleccionaremos Agregar nuevo elemento;

A continuacin, seleccione la opcin formulario Web Default.aspx con el nombre, pero no selecciona la opcin - Colocar el cdigo en un archivo independiente, porque no vamos a utilizar el cdigo subyacente;

Seleccione la pgina Default.aspx y activer la vista Diseo. A continuacin se incluyen los controles:

- DropDownList - id = ddlProducts - vamos a rellenar con datos de la tabla Products - GridView - ID = gdvDados - donde vamos a mostrar los detalles de las aplicaciones - Botn - ID = btnSearch - El evento onclick de esta rutina de control se llame a la GetData () que recibir las solicitudes de datos;

A continuacin se muestra la configuracin que se debe hacer para cada uno de los controles: 1 - DropDowList - ddlProducts El evento que desencadena la rutina de GridOne OnSelectedIndexChanged () 2 - Botn - btnSearch El evento onClick llama a la rutina GetData ();

3- GridView - gdvDados Entonces tenemos que crear rutinas para realizar la seleccin de los datos en las tablas respectivas.

En este ejemplo estoy usando las tablas Products y Orders Detalles de la base de datos Neptuno.mdb que Northwin.mdb continuacin, copie el archivo en la carpeta App_Data del proyecto de ASP.NET.

Para llenar el control DropDownList mediante el evento de carga y cuando el usuario selecciona un producto y haga clic en el botn de comando se pasa como parmetro el cdigo del producto para los vinculaDados de rutina () que llenar el conjunto de datos y mostrar el resultado en el gridview. A continuacin, tendr que crear un objeto de comando, un conjunto de datos y un objeto DataAdapter.

Tambin utilizamos una rutina llamada GridOne (hermoso nombre que no es?) Modificar CurrentPageIndex propiedad del control GridView a cero cada vez que se selecciona un elemento en el control DropDownList lo que los errores no se producir si la pgina actual es mayor que el contador la pgina de bsqueda nueva.

As que el cdigo:

Definimos los estados para importar los espacios de nombres:

En el evento Load de la pgina tenemos el siguiente cdigo:

Sub Page_Load(ByVal Source As Object, ByVal E As EventArgs) If Not Page.IsPostBack Then Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("App_Data\Northwind.mdb") Dim SQL As String = "Select [ProductID], [ProductName] from Products" Dim Conn As New OleDbConnection(strConn) Dim dr As OleDbDataReader Dim Cmd As New OleDbCommand(SQL, Conn) Conn.Open() dr = Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection) ddlProducts.DataSource = dr ddlProducts.DataValueField = "ProductID" ddlProducts.DataTextField = "ProductName" ddlProducts.DataBind() Conn.Close() End If End Sub

La cadena de conexin utilizada se define como: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("App_Data\Northwind.mdb") La instruccin SQL utilizada para seleccionar los productos de la tabla Products es el siguiente "Select [ProductID], [ProductName] from Products" El objeto de comando, DataReader y la conexin se definen como sigue: Conn As New OleDbConnection (strConn) Dim dr As OleDbDataReader Dim cmd As New OleDbCommand (SQL, Conn)

Abrimos la conexin: Conn.open ()

Creamos el objeto DataReader

dr = cmd.ExecuteReader (CommandBehavior.CloseConnection)

A travs del parmetro enumerador enumerador CloseConnection. CommandBehavior.CloseConnection se pasa al mtodo ExecuteReader del Comando de objeto de modo no hay necesidad de cerrar la conexin con la base de datos debido a que el DataReader despus de pasar por los registros utilizando el mtodo Close () cierra automticamente el DataReader .

Se define el origen de datos de DropDownList en forma y mostrar el nombre del producto y utilizar el cdigo de producto para actualizar los datos ddlProducts.DataSource = dr ddlProducts.DataValueField = "ProductID" ddlProducts.DataTextField = "ProductName" ddlProducts.DataBind ()

Cerramos la conexin Conn.Close () El procedimiento vinculaDatos mostrar los detalles de las aplicaciones para el producto seleccionado:Sub vinculaDatos() Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ Server.MapPath("App_Data\Northwind.mdb") Dim SQL As String = "Select * from [Order Details] Where ProductID = @ProdID Order by OrderID " Dim Dim Dim Dim Conn As New OleDbConnection(strConn) ds As DataSet = New DataSet() da As OleDbDataAdapter = New OleDbDataAdapter Cmd As New OleDbCommand(SQL, Conn)

da.SelectCommand = Cmd Cmd.Parameters.Add(New OleDbParameter("@ProdID", ddlProducts.SelectedItem.Value)) da.Fill(ds, "Order Details") gdvDaDos.DataSource = ds.Tables("Order Details").DefaultView gdvDaDos.DataBind()

End Sub

Aqu vale la pena sealar que el cdigo del producto seleccionado se est pasando a travs de la lnea de cdigo: Cmd.Parameters.Add (New OleDbParameter ("@ ProdID", ddlProducts.SelectedItem.Value))

Al final de la tabla Detalles de pedidos se muestra a travs del conjunto de datos en el GridView: gdvDaDos.DataSource = ds.Tables ("Datos de pedido"). DefaultView

La rutina de GetData para obtener los datos slo se realiza la llamada al procedimiento vinculaDatos ():

Sub GetData(Source as Object, E as EventArgs) vinculaDados() End Sub

En el procedimiento GridOne slo se actualiza el ndice de la pgina actual: Sub GridOne(Source as Object, E as EventArgs) gdvDaDos.currentpageindex=0 End Sub En el evento change de la pgina tambin deber actualizar el ndice actual y llamar a los vinculaDados de rutina para actualizar la visualizacin de los datos: Sub Page_Change(sender As Object, e As DataGridPageChangedEventArgs) gdvDaDos.CurrentPageIndex = e.NewPageIndex vinculaDados() End Sub

Al ejecutar nuestro proyecto tenemos:

La primera vez que seleccione el producto del cul queremos obtener informacin y luego se muestran los pedidos que contengan este producto en el gridview .