Программная установка значений параметров ObjectDataSource (C#)

Скотт Митчелл

Загрузить PDF-файл

В этом руководстве мы рассмотрим добавление метода в DAL и BLL, который принимает один входной параметр и возвращает данные. В примере этот параметр задается программным способом.

Введение

Как мы видели в предыдущем руководстве, доступен ряд параметров для декларативной передачи значений параметров в методы ObjectDataSource. Если значение параметра жестко задано, поступает из веб-элемента управления на странице или находится в любом другом источнике, доступном для чтения объектом источника Parameter данных, например, это значение можно привязать к входным параметру без написания строки кода.

Однако бывают случаи, когда значение параметра поступает из источника, который еще не учитывается одним из встроенных объектов источника Parameter данных. Если наш сайт поддерживает учетные записи пользователей, может потребоваться задать параметр на основе идентификатора пользователя вошедшего в систему посетителя. Или нам может потребоваться настроить значение параметра перед его отправкой в метод базового объекта ObjectDataSource.

Всякий раз, когда вызывается метод ObjectDataSource Select , ObjectDataSource сначала вызывает событие Selecting. Затем вызывается метод базового объекта ObjectDataSource. После завершения срабатывает событие Selected объекта ObjectDataSource (на рисунке 1 показана эта последовательность событий). Значения параметров, передаваемые в метод базового объекта ObjectDataSource, можно задать или настроить в обработчике событий для Selecting события.

Выбранные и выбранные события Объекта ObjectDataSource срабочи до и после вызова метода базового объекта

Рис. 1. Вызывается метод ObjectDataSource Selected и Selecting события до и после вызова метода базового объекта (щелкните для просмотра полноразмерного изображения)

В этом руководстве мы рассмотрим добавление метода в DAL и BLL, который принимает один входной параметр Monthтипа и возвращает EmployeesDataTable объект, заполненный теми сотрудниками, которые имеют свой юбилей найма в указанном Monthint . В нашем примере этот параметр задается программным способом на основе текущего месяца и отображается список "Годовщины сотрудников в этом месяце".

Приступим к работе!

Шаг 1. Добавление метода вEmployeesTableAdapter

В нашем первом примере необходимо добавить средство для получения тех сотрудников, которые HireDate произошли в указанном месяце. Чтобы обеспечить эту функциональность в соответствии с нашей архитектурой, необходимо сначала создать метод в EmployeesTableAdapter , который сопоставляется с правильной инструкцией SQL. Для этого начните с открытия набора типизированных данных Northwind. Щелкните правой EmployeesTableAdapter кнопкой мыши метку и выберите Добавить запрос.

Добавление нового запроса в EmployeesTableAdapter

Рис. 2. Добавление нового запроса в EmployeesTableAdapter (щелкните для просмотра полноразмерного изображения)

Выберите , чтобы добавить инструкцию SQL, которая возвращает строки. Когда вы достигнете экрана Указать SELECT инструкцию, инструкция по умолчанию SELECT для EmployeesTableAdapter будет уже загружена. Просто добавьте в WHERE предложение : WHERE DATEPART(m, HireDate) = @Month. DATEPART — это функция T-SQL, которая возвращает определенную часть datetime даты типа. В этом случае мы используем для DATEPART возврата месяца столбца HireDate .

Возвращает только те строки, в которых столбец HireDate меньше или равен параметру <span class=@HiredBeforeDate " />

Рис. 3. Возврат только тех строк, в которых HireDate столбец меньше или равен параметру @HiredBeforeDate (щелкните для просмотра полноразмерного изображения)

Наконец, измените FillBy имена методов и GetDataBy на FillByHiredDateMonth и GetEmployeesByHiredDateMonthсоответственно.

Выберите более подходящие имена методов, чем FillBy и GetDataBy

Рис. 4. Выбор более подходящих имен методов, чем FillBy и GetDataBy (щелкните, чтобы просмотреть изображение в полном размере)

Нажмите кнопку Готово, чтобы завершить работу мастера и вернуться в область конструктора DataSet. Теперь 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 класс с заданным значением GetEmployeesByHiredDateMonth(month)SelectMethod .

Использование класса EmployeesBLL

Рис. 6. Использование EmployeesBLL класса (щелкните для просмотра полноразмерного изображения)

Выберите из метода GetEmployeesByHiredDateMonth(month)

Рис. 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 или введите имя обработчика событий, который вы хотите использовать.

Щелкните значок Молнии в окне свойств, чтобы получить список событий веб-элемента управления.

Рис. 9. Щелкните значок Молнии в окне свойств, чтобы получить список событий веб-элемента управления

Оба подхода добавляют новый обработчик событий для события ObjectDataSource Selecting в класс кода программной части страницы. В этом обработчике событий мы можем считывать и записывать значения параметров с помощью e.InputParameters[parameterName], где parameterName — это значение Name атрибута в <asp:Parameter> теге InputParameters (коллекция также может быть проиндексирована по порядковой схеме, как в e.InputParameters[index]). Чтобы задать month для параметра значение текущего месяца, добавьте в обработчик событий следующее Selecting :

protected void ObjectDataSource1_Selecting
    (object sender, ObjectDataSourceSelectingEventArgs e)
{
    e.InputParameters["month"] = DateTime.Now.Month;
}

При посещении этой страницы через браузер мы видим, что только один сотрудник был нанят в этом месяце (март) Лора Каллахан, которая была в компании с 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.