다음을 통해 공유


ObjectDataSource의 매개 변수 값을 프로그래밍 방식으로 설정(VB)

작성자: 스콧 미첼

PDF 다운로드

이 자습서에서는 단일 입력 매개 변수를 수락하고 데이터를 반환하는 메서드를 DAL 및 BLL에 추가하는 방법을 살펴보겠습니다. 이 예제에서는 프로그래밍 방식으로 이 매개 변수를 설정합니다.

소개

이전 자습서에서 보았듯이 ObjectDataSource의 메서드에 매개 변수 값을 선언적으로 전달하는 데 다양한 옵션을 사용할 수 있습니다. 매개 변수 값이 하드 코딩되거나 페이지의 웹 컨트롤에서 제공되거나 데이터 원본 Parameter 개체에서 읽을 수 있는 다른 소스에 있는 경우 해당 값은 코드 줄을 작성하지 않고 입력 매개 변수에 바인딩될 수 있습니다.

그러나 매개 변수 값이 기본 제공 데이터 원본 개체 중 하나에서 아직 고려되지 않은 일부 원본 Parameter 에서 오는 경우가 있을 수 있습니다. 사이트에서 사용자 계정을 지원하는 경우 현재 로그인한 방문자의 사용자 ID에 따라 매개 변수를 설정할 수 있습니다. 또는 ObjectDataSource의 기본 개체 메서드로 보내기 전에 매개 변수 값을 사용자 지정해야 할 수도 있습니다.

ObjectDataSource의 Select 메서드가 호출될 때마다 ObjectDataSource는 먼저 Selecting 이벤트를 발생합니다. 그런 다음 ObjectDataSource의 기본 개체 메서드가 호출됩니다. ObjectDataSource의 Selected 이벤트가 완료되면 발생합니다(그림 1은 이 이벤트 시퀀스를 보여 줍니다). ObjectDataSource의 기본 개체 메서드에 전달된 매개 변수 값은 이벤트에 대한 Selecting 이벤트 처리기에서 설정하거나 사용자 지정할 수 있습니다.

ObjectDataSource의 선택 및 선택 이벤트는 기본 개체의 메서드가 호출되기 전과 후에 발생합니다.

그림 1: ObjectDataSource의 Selected 기본 Selecting 개체 메서드가 호출되기 전과 후에 발생하는 이벤트입니다(전체 크기 이미지를 보려면 클릭).

이 자습서에서는 관례적으로 DAL과 BLL에 메서드를 추가하여 단일 입력 매개변수 Month을 받아 Integer 형식으로 처리하고, 지정된 EmployeesDataTable에 고용 기념일이 있는 직원의 정보를 담은 Month 객체를 반환하는 방법을 살펴보겠습니다. 이 예제에서는 현재 월을 기반으로 프로그래밍 방식으로 이 매개 변수를 설정하여 "이번 달 직원 1주년"의 목록을 보여 줍니다.

시작해 봅시다!

1단계: 메서드 추가EmployeesTableAdapter

첫 번째 예제에서는 지정된 달에 특정 사건이 발생한 직원을 검색하는 수단을 추가해야 합니다. 아키텍처에 따라 이 기능을 제공하려면 먼저 적절한 SQL 문에 매핑되는 EmployeesTableAdapter 메서드를 만들어야 합니다. 이렇게 하려면 먼저 Northwind 형식 데이터 세트를 열어야 합니다. 레이블을 마우스 오른쪽 단추로 EmployeesTableAdapter 클릭하고 쿼리 추가를 선택합니다.

EmployeesTableAdapter에 새 쿼리 추가

그림 2: 새 쿼리를 EmployeesTableAdapter 추가합니다(전체 크기 이미지를 보려면 클릭).

행을 반환하는 SQL 문을 추가하도록 선택합니다. 문 SELECT 지정 화면에 도달하면, SELECT의 기본 EmployeesTableAdapter 문장이 이미 로드됩니다. WHERE을/를 WHERE DATEPART(m, HireDate) = @Month 절에 간단히 추가하세요. DATEPART는 형식의 datetime 특정 날짜 부분을 반환하는 T-SQL 함수입니다. 이 경우 열의 DATEPART 월을 반환하는 데 사용합니다HireDate.

HireDate 열이 @HiredBeforeDate 파라미터 보다 작거나 같은 행만 반환합니다.

그림 3: 열이 HireDate 매개 변수보다 작거나 같은 @HiredBeforeDate 행만 반환합니다(전체 크기 이미지를 보려면 클릭).

마지막으로, 메서드 이름 FillByGetDataBy로, 메서드 이름 FillByHiredDateMonthGetEmployeesByHiredDateMonth로 각각 변경합니다.

FillBy 및 GetDataBy보다 더 적절한 메서드 이름 선택

그림 4: FillByGetDataBy 보다 적절한 메서드 이름 선택 (전체 크기의 이미지를 보려면 클릭)

마침을 클릭하여 마법사를 완료하고 DataSet의 디자인 화면으로 돌아갑니다. EmployeesTableAdapter 이제 지정된 달에 고용된 직원에 액세스하기 위한 새로운 방법 집합이 포함되어야 합니다.

데이터 세트의 디자인 화면에 새 메서드가 나타납니다.

그림 5: 데이터 세트의 디자인 화면에 새 메서드가 나타납니다(전체 크기 이미지를 보려면 클릭).

2단계: 비즈니스 논리 계층에 메서드 추가GetEmployeesByHiredDateMonth(month)

애플리케이션 아키텍처는 비즈니스 논리 및 데이터 액세스 논리에 별도의 계층을 사용하므로 지정된 날짜 이전에 고용된 직원을 검색하기 위해 DAL을 호출하는 메서드를 BLL에 추가해야 합니다. 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단계: 고용 기념일이 이번 달인 직원 표시

이 예제의 마지막 단계는 채용 기념일이 이번 달인 직원을 표시하는 것입니다. 먼저 폴더의 ProgrammaticParams.aspx 페이지에 GridView를 BasicReporting 추가하고 새 ObjectDataSource를 데이터 원본으로 추가합니다. EmployeesBLL 클래스를 사용하도록 ObjectDataSource를 구성하고 SelectMethod을(를) GetEmployeesByHiredDateMonth(month)로 설정합니다.

EmployeesBLL 클래스 사용

그림 6: 클래스 사용 EmployeesBLL (전체 크기 이미지를 보려면 클릭)

GetEmployeesByHiredDateMonth(month) 메서드에서 선택

그림 7: 메서드에서 GetEmployeesByHiredDateMonth(month) 선택(전체 크기 이미지를 보려면 클릭)

마지막 화면에서는 매개 변수 값의 소스를 제공하도록 month 요청합니다. 프로그래밍 방식으로 이 값을 설정하므로 매개 변수 원본을 기본 없음 옵션으로 두고 마침을 클릭합니다.

매개 변수 원본을 없음으로 설정

그림 8: 매개 변수 원본을 없음으로 설정(전체 크기 이미지를 보려면 클릭)

이렇게 하면 ObjectDataSource 컬렉션 Parameter 에 지정된 값이 없는 개체가 생성 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년부터 회사와 함께 한 이달(3월) 로라 칼라한(Laura Callahan)의 직원 한 명만 고용된 것을 볼 수 있습니다.

이번 달에 기념일이 표시된 직원

그림 10: 이번 달 기념일이 표시된 직원(전체 크기 이미지를 보려면 클릭)

요약

ObjectDataSource의 매개 변수 값은 일반적으로 선언적으로 설정할 수 있지만 코드 줄을 요구하지 않으면서 프로그래밍 방식으로 매개 변수 값을 쉽게 설정할 수 있습니다. 기본 개체의 Selecting 메서드가 호출되기 전에 발생하는 ObjectDataSource 이벤트에 대한 이벤트 처리기를 만들고 컬렉션을 통해 InputParameters 하나 이상의 매개 변수에 대한 값을 수동으로 설정하기만 하면 됩니다.

이 자습서에서는 기본 보고 섹션을 마무리합니다. 다음 자습서에서는 필터링 및 Master-Details 시나리오 섹션을 시작합니다. 이 섹션에서는 방문자가 데이터를 필터링하고 마스터 보고서에서 세부 정보 보고서로 드릴다운할 수 있도록 하는 기술을 살펴보겠습니다.

행복한 프로그래밍!

작성자 정보

7개의 ASP/ASP.NET 책의 저자이자 4GuysFromRolla.com 창립자인 Scott Mitchell은 1998년부터 Microsoft 웹 기술을 연구해 왔습니다. Scott은 독립 컨설턴트, 트레이너 및 작가로 일합니다. 그의 최신 책은 Sams Teach Yourself ASP.NET 2.0 in 24 Hours입니다. 그에게 mitchell@4GuysFromRolla.com으로 연락할 수 있습니다.

특별히 감사드립니다.

이 자습서 시리즈는 많은 유용한 검토자가 검토했습니다. 이 자습서의 수석 검토자는 Hilton Giesenow였습니다. 예정된 MSDN 문서를 검토하는 데 관심이 있으신가요? 그렇다면 mitchell@4GuysFromRolla.com으로 메시지를 보내 주세요.