Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве мы рассмотрим добавление метода в DAL и BLL, который принимает один входной параметр и возвращает данные. В этом примере этот параметр будет задан программным способом.
Введение
Как мы видели в предыдущем руководстве, ряд параметров доступны для декларативного передачи значений параметров методам ObjectDataSource. Если значение параметра жестко закодировано, поступает из веб-элемента управления на странице или находится в любом другом источнике, доступном для чтения объектом источника Parameter
данных, например, это значение может быть привязано к входным параметру без написания строки кода.
Однако может возникнуть время, когда значение параметра поступает из какого-то источника, который еще не учитывается одним из встроенных объектов источника Parameter
данных. Если на нашем сайте поддерживаются учетные записи пользователей, возможно, потребуется задать параметр на основе текущего вошедшего в систему идентификатора пользователя. Кроме того, может потребоваться настроить значение параметра, прежде чем отправлять его вместе с методом базового объекта ObjectDataSource.
Всякий раз, когда метод Select
вызывается в ObjectDataSource, сначала происходит событие Selecting. Затем вызывается метод базового объекта ObjectDataSource. После того как завершится событие Selected ObjectDataSource, произойдет его запуск (рис. 1 иллюстрирует эту последовательность событий). Значения параметров, передаваемые в метод базового объекта ObjectDataSource, можно задать или настроить в обработчике событий для Selecting
события.
Рис. 1. События Selected
и Selecting
объекта ObjectDataSource происходят до и после вызова метода его базового объекта (щелкните, чтобы просмотреть полноразмерное изображение)
В этом руководстве мы рассмотрим добавление метода в DAL и BLL, который принимает один входной параметр Month
типа int
и возвращает объект EmployeesDataTable
, заполненный теми сотрудниками, у которых годовщина найма в указанном Month
. Наш пример будет устанавливать этот параметр программным образом на основе текущего месяца, отображающего список "Сотрудники, отмечающие годовщины в этом месяце".
Давайте приступим!
Шаг 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
(щелкните, чтобы просмотреть изображение полного размера)
Нажмите кнопку "Готово", чтобы завершить работу мастера и вернуться на поверхность проектирования Набора данных. Теперь EmployeesTableAdapter
следует включить новый набор методов для доступа к сотрудникам, нанятых в течение указанного месяца.
Рис. 5. Новые методы отображаются в области конструктора набора данных (щелкните, чтобы просмотреть изображение полного размера)
Шаг 2. Добавление метода наGetEmployeesByHiredDateMonth(month)
уровень бизнес-логики
Поскольку архитектура нашего приложения использует отдельный слой для бизнес-логики и логики доступа к данным, нам необходимо добавить метод в наш BLL, который обращается к DAL, чтобы получить список сотрудников, нанятых до указанной даты.
EmployeesBLL.cs
Откройте файл и добавьте следующий метод:
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
return Adapter.GetEmployeesByHiredDateMonth(month);
}
Как и в случае с другими методами этого класса, GetEmployeesByHiredDateMonth(month)
просто вызывается в DAL и возвращает результаты.
Шаг 3. Отображение сотрудников с годовщиной найма в этом месяце
Наш последний шаг для этого примера заключается в отображении тех сотрудников, чьи годовщины найма в этом месяце. Начните с добавления GridView на ProgrammaticParams.aspx
страницу в папке BasicReporting
и добавления нового объекта ObjectDataSource в качестве источника данных. Настройте ObjectDataSource для использования класса EmployeesBLL
с параметром SelectMethod
, установленным на GetEmployeesByHiredDateMonth(month)
.
Рис. 6. Использование EmployeesBLL
класса (щелкните, чтобы просмотреть изображение полного размера)
Рис. 7. Выберите из GetEmployeesByHiredDateMonth(month)
метода (Щелкните, чтобы просмотреть изображение полного размера)
Последний экран просит указать month
источник значения параметра. Поскольку мы установим это значение программно, оставьте источник параметра установленным на опцию по умолчанию None и нажмите кнопку "Готово".
Рис. 8. Оставьте для источника параметров значение None (щелкните, чтобы просмотреть изображение полного размера)
При этом будет создан Parameter
объект в коллекции ObjectDataSource SelectParameters
, которая не имеет указанного значения.
<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
событием или введите имя обработчика событий, который вы хотите использовать.
Рис. 9. Щелкните значок молнии в окне свойств, чтобы получить список событий веб-элемента управления
Оба подхода добавляют новый обработчик событий для события ObjectDataSource Selecting
в класс кода страницы. В этом обработчике событий можно считывать и записывать значения параметров, используя значение e.InputParameters[parameterName]
атрибута parameterName
в Name
теге (<asp:Parameter>
коллекция также может индексироваться порядково, как в InputParameters
). Чтобы задать month
параметр текущему месяцу, добавьте следующее в Selecting
обработчик событий:
protected void ObjectDataSource1_Selecting
(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["month"] = DateTime.Now.Month;
}
При посещении этой страницы через браузер мы видим, что только один сотрудник был нанят в этом месяце (март) Лора Каллахан, который был с компанией с 1994 года.
Рис. 10. Сотрудники, у которых годовщина в этом месяце, отображены (Нажмите, чтобы просмотреть изображение в полном размере)
Сводка
Хотя значения параметров ObjectDataSource обычно можно задать декларативно, не требуя строки кода, легко задать значения параметров программным способом. Все, что необходимо сделать, — создать обработчик событий для события ObjectDataSource Selecting
, который запускается перед вызовом метода базового объекта и вручную задает значения для одного или нескольких параметров через коллекцию InputParameters
.
Это руководство завершает раздел "Основы отчетности". Следующий учебник запускает раздел "Фильтрация и Master-Details сценарии", в котором мы рассмотрим методы фильтрации данных и детализации из основного отчета в подробный отчет.
Счастливое программирование!
Сведения о авторе
Скотт Митчелл, автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с технологиями Microsoft Web с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга — Sams Teach Yourself ASP.NET 2.0 за 24 часа. С ним можно связаться по адресу mitchell@4GuysFromRolla.com.
Особое спасибо кому
Эта серия учебников была проверена многими полезными рецензентами. Ведущий рецензент этого руководства — Хилтон Гизеноу. Хотите просмотреть мои предстоящие статьи MSDN? Если да, напишите мне на mitchell@4GuysFromRolla.com.