Поделиться через


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

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

Скачать в формате PDF

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

Введение

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

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

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

События Selected и Selecting источника данных ObjectDataSource срабатывают до и после вызова метода его базового объекта

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

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

Давайте приступим!

Шаг 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= @HiredBeforeDate Параметр" />

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

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

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

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

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

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

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

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

Рис. 7. Выберите из GetEmployeesByHiredDateMonth(month) метода (Щелкните, чтобы просмотреть изображение полного размера)

Последний экран просит указать month источник значения параметра. Поскольку мы установим это значение программно, оставьте источник параметра установленным на опцию по умолчанию None и нажмите кнопку "Готово".

Оставьте для источника параметров значение 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 событием или введите имя обработчика событий, который вы хотите использовать. В качестве третьего варианта можно создать обработчик событий, выбрав ObjectDataSource и его Selecting событие из двух раскрывающихся списков в верхней части класса кода страницы.

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

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

Все три подхода добавляют новый обработчик событий для события ObjectDataSource Selecting в класс кода страницы. В этом обработчике событий можно считывать и записывать значения параметров, используя значение e.InputParameters(parameterName) атрибута parameterName в Name теге (<asp:Parameter> коллекция также может индексироваться порядково, как в InputParameters). Чтобы задать 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 сценарии", в котором мы рассмотрим методы фильтрации данных и детализации из основного отчета в подробный отчет.

Счастливое программирование!

Сведения о авторе

Скотт Митчелл, автор семи книг ASP/ASP.NET и основатель 4GuysFromRolla.com, работает с технологиями Microsoft Web с 1998 года. Скотт работает независимым консультантом, тренером и писателем. Его последняя книга — Sams Teach Yourself ASP.NET 2.0 за 24 часа. С ним можно связаться по адресу mitchell@4GuysFromRolla.com.

Особое спасибо кому

Эта серия учебников была проверена многими полезными рецензентами. Ведущий рецензент этого руководства — Хилтон Гизеноу. Хотите просмотреть мои предстоящие статьи MSDN? Если да, напишите мне на mitchell@4GuysFromRolla.com.