Compartir a través de


Configurar los valores de parámetro de ObjectDataSource mediante programación (VB)

de Scott Mitchell

Descargar PDF

En este tutorial veremos cómo agregar un método a nuestra DAL y BLL que acepta un único parámetro de entrada y devuelve datos. En el ejemplo se establecerá este parámetro mediante programación.

Introducción

Como hemos visto en el tutorial anterior, hay varias opciones disponibles para pasar valores de parámetro mediante declaración a los métodos de ObjectDataSource. Si el valor del parámetro está codificado de forma rígida, procede de un control web de la página o de cualquier otro origen legible por un objeto de origen de datos Parameter , por ejemplo, ese valor se puede enlazar al parámetro de entrada sin escribir una línea de código.

Sin embargo, puede haber ocasiones en las que el valor del parámetro procede de algún origen que aún no tenga en cuenta uno de los objetos de origen de datos Parameter integrados. Si nuestro sitio admite cuentas de usuario, es posible que deseemos establecer el parámetro en función del identificador de usuario del visitante que ha iniciado sesión actualmente. O es posible que tengamos que personalizar el valor del parámetro antes de enviarlo al método del objeto subyacente objectDataSource.

Cada vez que se invoca el método Select de ObjectDataSource, este primero genera su evento Selecting. A continuación, se invoca el método del objeto subyacente del objeto ObjectDataSource. Una vez que se completa el evento Selected de ObjectDataSource (la figura 1 muestra esta secuencia de eventos). Los valores de parámetro pasados al método del objeto subyacente de ObjectDataSource se pueden establecer o personalizar en un controlador de eventos para el Selecting evento.

Los eventos Selected y Selecting del ObjectDataSource se activan antes y después de que se invoque el método del objeto subyacente

Figura 1: Los eventos Selected y Selecting de ObjectDataSource se activan antes y después de que su método del objeto subyacente es invocado (Haga clic para ver la imagen en tamaño completo)

En este tutorial veremos cómo agregar un método a nuestra DAL y BLL que acepta un único parámetro Monthde entrada , de tipo Integer y devuelve un EmployeesDataTable objeto rellenado con los empleados que tienen su aniversario de contratación en el especificado Month. En nuestro ejemplo se establecerá este parámetro mediante programación en función del mes actual, en el que se muestra una lista de "Aniversario de empleados este mes".

¡Comencemos!

Paso 1: Agregar un método aEmployeesTableAdapter

Para nuestro primer ejemplo, necesitamos agregar un medio para recuperar los empleados cuyos HireDate se produjeron en un mes especificado. Para proporcionar esta funcionalidad de acuerdo con nuestra arquitectura, primero necesitamos crear un método en EmployeesTableAdapter que se asigne a la instrucción SQL adecuada. Para ello, comience abriendo el conjunto de datos con tipo Northwind. Haga clic con el botón derecho en la EmployeesTableAdapter etiqueta y elija Agregar consulta.

Agregar una nueva consulta a EmployeesTableAdapter

Figura 2: Agregar una nueva consulta a EmployeesTableAdapter (haga clic para ver la imagen de tamaño completo)

Elija agregar una instrucción SQL que devuelva filas. Cuando llegue a la pantalla Especificar una SELECT instrucción, ya se cargará la instrucción predeterminada SELECT para el EmployeesTableAdapter. Simplemente agregue la WHERE cláusula : WHERE DATEPART(m, HireDate) = @Month. DATEPART es una función T-SQL que devuelve una parte de fecha determinada de un datetime tipo; en este caso, se usa DATEPART para devolver el mes de la HireDate columna.

Devuelve solo esas filas en las que la columna HireDate es menor o igual al parámetro @HiredBeforeDate" />

Figura 3: Devolver solo las filas en las que la HireDate columna es menor o igual que el @HiredBeforeDate parámetro (haga clic para ver la imagen de tamaño completo)

Por último, cambie los nombres de método FillBy y GetDataBy a FillByHiredDateMonth y GetEmployeesByHiredDateMonth, respectivamente.

Elegir nombres de método más adecuados que FillBy y GetDataBy

Figura 4: Elegir más nombres de método adecuados que FillBy y GetDataBy (Haga clic para ver la imagen de tamaño completo)

Haga clic en Finalizar para completar el asistente y volver a la superficie de diseño del conjunto de datos. EmployeesTableAdapter Ahora debería incluir un nuevo conjunto de métodos para acceder a los empleados contratados en un mes especificado.

Los nuevos métodos aparecen en la superficie de diseño del conjunto de datos

Figura 5: Los nuevos métodos aparecen en la superficie de diseño del conjunto de datos (haga clic para ver la imagen de tamaño completo)

Paso 2: Agregar elGetEmployeesByHiredDateMonth(month)método a la capa lógica de negocios

Dado que la arquitectura de la aplicación usa una capa independiente para la lógica de negocios y la lógica de acceso a datos, es necesario agregar un método a nuestro BLL que llame a la DAL para recuperar los empleados contratados antes de una fecha especificada. Abra el EmployeesBLL.vb archivo y agregue el método siguiente:

<System.ComponentModel.DataObjectMethodAttribute _
    (System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
    As Northwind.EmployeesDataTable
    Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function

Al igual que con nuestros otros métodos en esta clase, GetEmployeesByHiredDateMonth(month) simplemente invoca DAL y devuelve los resultados.

Paso 3: mostrar a los empleados cuyo aniversario de contratación es este mes

Nuestro último paso para este ejemplo es mostrar a los empleados cuyo aniversario de contratación es este mes. Empiece agregando una clase GridView a la ProgrammaticParams.aspx página de la BasicReporting carpeta y agregue un nuevo ObjectDataSource como origen de datos. Configure ObjectDataSource para usar la clase EmployeesBLL con el SelectMethod para establecerse en GetEmployeesByHiredDateMonth(month).

Usar la clase EmployeesBLL

Figura 6: Usa la clase (EmployeesBLLhaz clic para ver la imagen a tamaño completo)

Seleccione En el método GetEmployeesByHiredDateMonth(month)

Figura 7: Seleccionar en el GetEmployeesByHiredDateMonth(month) método (haga clic para ver la imagen de tamaño completo)

La pantalla final nos pide que proporcionemos el month origen del valor del parámetro. Dado que estableceremos este valor mediante programación, deje la fuente del parámetro configurada en la opción Ninguno por defecto y haga clic en Finalizar.

Deje el conjunto de orígenes de parámetros en Ninguno.

Figura 8: Deje el parámetro Source Set to None (Haga clic para ver la imagen de tamaño completo)

Esto creará un Parameter objeto en la colección ObjectDataSource SelectParameters que no tiene un valor especificado.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
    <SelectParameters>
        <asp:Parameter Name="month" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Para establecer este valor mediante programación, es necesario crear un controlador de eventos para el evento ObjectDataSource Selecting . Para ello, vaya a la vista Diseño y haga doble clic en ObjectDataSource. Como alternativa, seleccione ObjectDataSource, vaya a la ventana Propiedades y haga clic en el icono de rayo. A continuación, haga doble clic en el cuadro de texto situado junto al Selecting evento o escriba el nombre del controlador de eventos que desea usar. Como tercera opción, puede crear el controlador de eventos seleccionando el ObjectDataSource y su evento Selecting desde las dos listas desplegables en la parte superior de la clase de código subyacente de la página.

Haga clic en el icono rayo de la ventana Propiedades para enumerar los eventos de un control web.

Figura 9: Haga clic en el icono rayo en la ventana Propiedades para enumerar los eventos de un control web

Los tres enfoques agregan un nuevo controlador de eventos para el evento ObjectDataSource Selecting a la clase de código subyacente de la página. En este controlador de eventos, podemos leer y escribir en los valores de parámetro utilizando e.InputParameters(parameterName), donde parameterName es el valor del atributo Name en la etiqueta <asp:Parameter> (la colección InputParameters también se puede indexar ordinalmente, como en e.InputParameters(index)). Para establecer el month parámetro en el mes actual, agregue lo siguiente al controlador de Selecting eventos:

Protected Sub ObjectDataSource1_Selecting _
    (sender As Object, e As ObjectDataSourceSelectingEventArgs) _
        Handles ObjectDataSource1.Selecting
    e.InputParameters("month") = DateTime.Now.Month
End Sub

Al visitar esta página a través de un explorador podemos ver que solo un empleado fue contratado este mes (marzo) Laura Callahan, que ha estado con la empresa desde 1994.

Se muestran los empleados cuyos aniversarios son este mes

Figura 10: Aquellos empleados cuyos aniversarios se muestran este mes (haga clic para ver la imagen de tamaño completo)

Resumen

Aunque los valores de los parámetros de ObjectDataSource normalmente se pueden establecer mediante declaración, sin necesidad de una línea de código, es fácil establecer los valores de parámetro mediante programación. Todo lo que necesitamos hacer es crear un controlador de eventos para el evento ObjectDataSource Selecting , que se desencadena antes de invocar el método del objeto subyacente y establecer manualmente los valores de uno o varios parámetros a través de la InputParameters colección.

En este tutorial se concluye la sección Informes básicos. El siguiente tutorial inicia la sección "Escenarios de Filtrado y Master-Details", en la que veremos técnicas para permitir que el visitante filtre los datos y explore desde un informe maestro hacia un informe detallado.

¡Feliz programación!

Acerca del autor

Scott Mitchell, autor de siete libros de ASP/ASP.NET y fundador de 4GuysFromRolla.com, ha estado trabajando con tecnologías web de Microsoft desde 1998. Scott trabaja como consultor independiente, entrenador y escritor. Su último libro es Sams Teach Yourself ASP.NET 2.0 en 24 horas. Se puede contactar con él en mitchell@4GuysFromRolla.com.

Agradecimientos especiales a

Esta serie de tutoriales contó con la revisión de muchos revisores que fueron de gran ayuda. El revisor principal de este tutorial fue Hilton Giesenow. ¿Le interesa revisar mis próximos artículos de MSDN? Si es así, mándame un mensaje a mitchell@4GuysFromRolla.com.