Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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 Month
de 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.
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.
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.
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.
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)
.
Figura 6: Usa la clase (EmployeesBLL
haz clic para ver la imagen a tamaño completo)
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.
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.
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.
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.