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

작성자 : Scott Mitchell

PDF 다운로드

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

소개

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

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

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

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

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

이 자습서에서는 DAL 및 BLL에 형식 int 의 단일 입력 매개 변수 Month를 수락하고 지정된 Month에 고용 기념일이 있는 직원으로 채워진 개체를 반환 EmployeesDataTable 하는 메서드를 추가하는 방법을 살펴보겠습니다. 이 예제에서는 "이번 달 직원 1주년" 목록을 보여 주는 현재 월을 기반으로 프로그래밍 방식으로 이 매개 변수를 설정합니다.

그럼 시작하겠습니다.

1단계: 에 메서드 추가EmployeesTableAdapter

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

EmployeesTableAdapter에 새 쿼리 추가

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

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

HireDate 열이 <span class=@HiredBeforeDate Parameter" /> 보다 작거나 같은 행만 반환합니다.

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

마지막으로 및 메서드 이름을 각각 및 GetDataByGetEmployeesByHiredDateMonthFillByHiredDateMonth 변경 FillBy 합니다.

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

그림 4: 보다 적절한 방법 이름 FillBy 선택 및 GetDataBy (전체 크기 이미지를 보려면 클릭)

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

새 메서드가 데이터 세트의 디자인 화면에 표시됩니다.

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

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

애플리케이션 아키텍처는 비즈니스 논리 및 데이터 액세스 논리에 별도의 계층을 사용하므로 지정된 날짜 이전에 고용된 직원을 검색하기 위해 DAL을 호출하는 메서드를 BLL에 추가해야 합니다. EmployeesBLL.cs 파일을 열고 다음 메서드를 추가합니다.

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
    return Adapter.GetEmployeesByHiredDateMonth(month);
}

이 클래스 GetEmployeesByHiredDateMonth(month) 의 다른 메서드와 마찬가지로 DAL을 호출하고 결과를 반환하기만 하면됩니다.

3단계: 채용 기념일이 이번 달인 직원 표시

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

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 있는 텍스트 상자를 두 번 클릭하거나 사용하려는 이벤트 처리기의 이름을 입력합니다.

속성 창에서 Lightning Bolt 아이콘을 클릭하여 웹 컨트롤의 이벤트를 나열합니다.

그림 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년부터 회사와 함께 해온 이달(3월) 로라 캘러핸(Laura Callahan) 직원 한 명만 고용된 것을 볼 수 있습니다.

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

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

요약

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

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

행복한 프로그래밍!

저자 정보

7개의 ASP/ASP.NET 책의 저자이자 4GuysFromRolla.com 창립자인 Scott Mitchell은 1998년부터 Microsoft 웹 기술로 작업해 왔습니다. Scott은 독립 컨설턴트, 트레이너 및 작가로 일합니다. 그의 최신 책은 샘스 티치 유어셀프 ASP.NET 24시간 만에 2.0입니다. 그는 에서mitchell@4GuysFromRolla.com 또는 에서 찾을 http://ScottOnWriting.NET수있는 자신의 블로그를 통해 도달 할 수 있습니다.

특별 감사

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