Программная установка значений параметров ObjectDataSource (VB)
В этом руководстве мы рассмотрим добавление метода в DAL и BLL, который принимает один входной параметр и возвращает данные. В примере этот параметр задается программным способом.
Введение
Как мы видели в предыдущем руководстве, доступен ряд параметров для декларативной передачи значений параметров в методы ObjectDataSource. Если значение параметра жестко задано, поступает из веб-элемента управления на странице или находится в любом другом источнике, доступном для чтения объектом источника Parameter
данных, например, это значение можно привязать к входным параметру без написания строки кода.
Однако бывают случаи, когда значение параметра поступает из источника, который еще не учитывается одним из встроенных объектов источника Parameter
данных. Если наш сайт поддерживает учетные записи пользователей, может потребоваться задать параметр на основе идентификатора пользователя вошедшего в систему посетителя. Или нам может потребоваться настроить значение параметра перед его отправкой в метод базового объекта ObjectDataSource.
Всякий раз, когда вызывается метод ObjectDataSource Select
, ObjectDataSource сначала вызывает событие Selecting. Затем вызывается метод базового объекта ObjectDataSource. После завершения срабатывает событие Selected объекта ObjectDataSource (на рисунке 1 показана эта последовательность событий). Значения параметров, передаваемые в метод базового объекта ObjectDataSource, можно задать или настроить в обработчике событий для Selecting
события.
Рис. 1. Вызывается метод ObjectDataSource Selected
и Selecting
события до и после вызова метода базового объекта (щелкните для просмотра полноразмерного изображения)
В этом руководстве мы рассмотрим добавление метода в DAL и BLL, который принимает один входной параметр Month
типа и возвращает EmployeesDataTable
объект, заполненный теми сотрудниками, которые имеют свой юбилей найма в указанном Month
Integer
. В нашем примере этот параметр задается программным способом на основе текущего месяца и отображается список "Годовщины сотрудников в этом месяце".
Приступим к работе!
Шаг 1. Добавление метода вEmployeesTableAdapter
В нашем первом примере необходимо добавить средство для получения тех сотрудников, которые HireDate
произошли в указанном месяце. Чтобы обеспечить эту функциональность в соответствии с нашей архитектурой, необходимо сначала создать метод в EmployeesTableAdapter
, который сопоставляется с правильной инструкцией SQL. Для этого начните с открытия набора типизированных данных Northwind. Щелкните правой EmployeesTableAdapter
кнопкой мыши метку и выберите Добавить запрос.
Рис. 2. Добавление нового запроса в EmployeesTableAdapter
(щелкните для просмотра полноразмерного изображения)
Выберите , чтобы добавить инструкцию SQL, которая возвращает строки. Когда вы достигнете экрана Указать SELECT
инструкцию, инструкция по умолчанию SELECT
для EmployeesTableAdapter
будет уже загружена. Просто добавьте в WHERE
предложение : WHERE DATEPART(m, HireDate) = @Month
. DATEPART — это функция T-SQL, которая возвращает определенную часть datetime
даты типа. В этом случае мы используем для DATEPART
возврата месяца столбца HireDate
.
Рис. 3. Возврат только тех строк, в которых HireDate
столбец меньше или равен параметру @HiredBeforeDate
(щелкните для просмотра полноразмерного изображения)
Наконец, измените FillBy
имена методов и GetDataBy
на FillByHiredDateMonth
и GetEmployeesByHiredDateMonth
соответственно.
Рис. 4. Выбор более подходящих имен методов, чем FillBy
и GetDataBy
(щелкните, чтобы просмотреть изображение в полном размере)
Нажмите кнопку Готово, чтобы завершить работу мастера и вернуться в область конструктора DataSet. Теперь EmployeesTableAdapter
должен включать новый набор методов доступа к сотрудникам, нанятых в течение указанного месяца.
Рис. 5. Новые методы отображаются в области конструктора набора данных (щелкните для просмотра полноразмерного изображения)
Шаг 2. Добавление метода наGetEmployeesByHiredDateMonth(month)
уровень бизнес-логики
Так как в нашей архитектуре приложений используется отдельный уровень для бизнес-логики и логики доступа к данным, необходимо добавить в BLL метод, который вызывает DAL для получения сотрудников, нанятых до указанной даты. EmployeesBLL.vb
Откройте файл и добавьте следующий метод:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
Как и в случае с другими методами в этом классе, GetEmployeesByHiredDateMonth(month)
просто вызывает в DAL и возвращает результаты.
Шаг 3. Отображение сотрудников, у которых годовщина найма в этом месяце
Последний шаг в этом примере — отображение тех сотрудников, у которых годовщина найма — в этом месяце. Начните с добавления GridView на страницу ProgrammaticParams.aspx
в папке BasicReporting
и добавьте новый объект ObjectDataSource в качестве источника данных. Настройте ObjectDataSource, чтобы использовать EmployeesBLL
класс с заданным значением GetEmployeesByHiredDateMonth(month)
SelectMethod
.
Рис. 6. Использование EmployeesBLL
класса (щелкните для просмотра полноразмерного изображения)
Рис. 7. Выбор из GetEmployeesByHiredDateMonth(month)
метода (щелкните для просмотра полноразмерного изображения)
На последнем экране появится запрос на month
указание источника значения параметра. Так как мы зададим это значение программным способом, оставьте для параметра Источник параметров значение по умолчанию Нет и нажмите кнопку Готово.
Рис. 8. Для параметра Источник оставьте значение Нет (щелкните для просмотра полноразмерного изображения)
При этом в коллекции ObjectDataSource SelectParameters
будет создан Parameter
объект, который не имеет указанного значения.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Чтобы задать это значение программным способом, необходимо создать обработчик событий для события ObjectDataSource Selecting
. Для этого перейдите в представление Конструктор и дважды щелкните ObjectDataSource. Кроме того, выберите ObjectDataSource, перейдите к окно свойств и щелкните значок молнии. Затем дважды щелкните текстовое поле рядом с событием Selecting
или введите имя обработчика событий, который вы хотите использовать. В качестве третьего варианта можно создать обработчик событий, выбрав ObjectDataSource и его Selecting
событие из двух раскрывающихся списков в верхней части класса кода программной части страницы.
Рис. 9. Щелкните значок Молнии в окне свойств, чтобы получить список событий веб-элемента управления
Все три подхода добавляют новый обработчик событий для события ObjectDataSource Selecting
в класс кода программной части страницы. В этом обработчике событий мы можем считывать и записывать значения параметров с помощью e.InputParameters(parameterName)
, где parameterName
— это значение Name
атрибута в <asp:Parameter>
теге InputParameters
(коллекция также может быть проиндексирована по порядковой схеме, как в e.InputParameters(index)
). Чтобы задать month
для параметра значение текущего месяца, добавьте в обработчик событий следующее Selecting
:
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
При посещении этой страницы через браузер мы видим, что только один сотрудник был нанят в этом месяце (март) Лора Каллахан, которая была в компании с 1994 года.
Рис. 10. Сотрудники, чьи юбилеи в этом месяце показаны (щелкните, чтобы просмотреть изображение в полном размере)
Сводка
Хотя значения параметров ObjectDataSource обычно можно задать декларативно, не требуя строки кода, легко задать значения параметров программным способом. Все, что нам нужно сделать, это создать обработчик событий для события ObjectDataSource Selecting
, который срабатывает перед вызовом метода базового объекта, и вручную задать значения для одного или нескольких параметров через коллекцию InputParameters
.
Этот учебник завершает раздел Базовые отчеты. Следующий учебник запускает раздел Сценарии фильтрации и Master-Details, в котором мы рассмотрим методы фильтрации данных и детализации из master отчета в подробный отчет.
Счастливого программирования!
Об авторе
Скотт Митчелл( Scott Mitchell), автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с веб-технологиями Майкрософт с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга Sams Teach Yourself ASP.NET 2.0 в 24 часах. Он может быть доступен в mitchell@4GuysFromRolla.com. или через его блог, который можно найти по адресу http://ScottOnWriting.NET.
Особая благодарность
Эта серия учебников была рассмотрена многими полезными рецензентами. Ведущим рецензентом этого руководства был Хилтон Гизеноу. Хотите просмотреть предстоящие статьи MSDN? Если да, опустите мне строку на mitchell@4GuysFromRolla.com.