다음을 통해 공유


선언적 매개 변수(C#)

작성자 스콧 미첼

PDF 다운로드

이 자습서에서는 하드 코딩된 값으로 설정된 매개 변수를 사용하여 DetailsView 컨트롤에 표시할 데이터를 선택하는 방법을 설명합니다.

소개

마지막 자습서에서는 클래스에서 GetProducts() 메서드를 호출한 ObjectDataSource 컨트롤에 바인딩된 GridView, DetailsView 및 FormView 컨트롤을 사용하여 데이터를 표시하는 방법을 살펴보았습니다ProductsBLL. 이 메서드는 강력한 형식 지정된 DataTable을 반환하며, 이 테이블은 Northwind 데이터베이스의 Products 테이블의 모든 레코드로 채워져 있습니다. 클래스에는 ProductsBLL 제품의 하위 집합만 반환하는 추가 메서드(, GetProductByProductID(productID)GetProductsByCategoryID(categoryID))가 포함되어 있습니다GetProductsBySupplierID(supplierID). 이러한 세 가지 메서드는 반환된 제품 정보를 필터링하는 방법을 나타내는 입력 매개 변수를 예상합니다.

ObjectDataSource를 사용하여 입력 매개 변수를 예상하는 메서드를 호출할 수 있지만 이렇게 하려면 이러한 매개 변수 값의 출처를 지정해야 합니다. 매개 변수 값은 하드 코딩되거나 쿼리 문자열 값, 세션 변수, 페이지의 웹 컨트롤 속성 값 등을 비롯한 다양한 동적 원본에서 가져올 수 있습니다.

이 자습서에서는 먼저 하드 코딩된 값으로 설정된 매개 변수를 사용하는 방법을 설명해 보겠습니다. 특히, Chef Anton의 Gumbo Mix, 즉 ProductID 5로 표시되는 특정 제품에 대한 정보를 보여주는 DetailsView를 페이지에 추가하는 방법을 살펴보겠습니다. 다음으로, 웹 컨트롤을 기반으로 매개 변수 값을 설정하는 방법을 살펴보겠습니다. 특히 TextBox를 사용하여 사용자가 국가/지역에 입력할 수 있도록 하고, 그 후에는 단추를 클릭하여 해당 국가/지역에 상주하는 공급업체 목록을 볼 수 있습니다.

하드 코딩된 매개 변수 값 사용

첫 번째 예제에서는, BasicReporting 폴더에 있는 DeclarativeParams.aspx 페이지에 DetailsView 컨트롤을 추가합니다. DetailsView의 스마트 태그에서 드롭다운 목록에서 새 데이터 원본<을 선택하고 >ObjectDataSource를 추가하도록 선택합니다.

페이지에 ObjectDataSource 추가

그림 1: 페이지에 ObjectDataSource 추가(전체 크기 이미지를 보려면 클릭)

그러면 ObjectDataSource 컨트롤의 데이터 원본 선택 마법사가 자동으로 시작됩니다. 마법사의 ProductsBLL 첫 번째 화면에서 클래스를 선택합니다.

ProductsBLL 클래스 선택

그림 2: 클래스 선택 ProductsBLL (전체 크기 이미지를 보려면 클릭)

특정 제품에 대한 정보를 표시하려고 하기 때문에 이 방법을 사용 GetProductByProductID(productID) 하려고 합니다.

GetProductByProductID(productID) 메서드 선택

그림 3: 메서드 선택 GetProductByProductID(productID) (전체 크기 이미지를 보려면 클릭)

선택한 메서드에 매개 변수가 포함되어 있으므로 마법사에 대한 화면이 하나 더 있습니다. 여기서 매개 변수에 사용할 값을 정의하라는 메시지가 표시됩니다. 왼쪽 목록에는 선택한 메서드에 대한 모든 매개 변수가 표시됩니다. 유일한 GetProductByProductID(productID)productID입니다. 오른쪽에서 선택한 매개 변수의 값을 지정할 수 있습니다. 매개 변수 원본 드롭다운 목록은 매개 변수 값에 대해 가능한 다양한 원본을 열거합니다. 매개 변수에 대해 하드 코딩된 값 5 productID 를 지정하려면 매개 변수 원본을 None으로 두고 DefaultValue 텍스트 상자에 5를 입력합니다.

productID 매개 변수에 하드 코딩된 매개 변수 값 5가 사용됩니다.

그림 4: 매개 변수에 하드 코딩된 매개 변수 값 5가 productID 사용됩니다(전체 크기 이미지를 보려면 클릭).

데이터 원본 구성 마법사를 완료한 후, ObjectDataSource 컨트롤의 선언적 태그는 SelectMethod 속성에 정의된 메서드가 예상하는 각 입력 매개변수에 대한 Parameter 개체를 SelectParameters 컬렉션에 포함하고 있습니다. 이 예제에서 사용하는 메서드에는 단일 입력 매개 변수 parameterID만 예상되므로 여기에 항목이 하나만 있습니다. 컬렉션에는 System.Web.UI.WebControls 네임스페이스의 Parameter 클래스에서 파생되는 모든 클래스가 포함될 수 있습니다. 하드 코딩된 매개 변수 값의 경우 기본 Parameter 클래스가 사용되지만 다른 매개 변수 원본 옵션의 경우 파생 Parameter 클래스가 사용됩니다. 필요한 경우 사용자 지정 매개 변수 형식직접 만들 수도 있습니다.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
    <SelectParameters>
        <asp:Parameter DefaultValue="5" Name="productID"
         Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

참고

사용자 고유의 컴퓨터에서 팔로우하는 경우 이 시점에서 보게 될 선언적 마크업에는 InsertMethod, UpdateMethod, DeleteMethod 속성들의 값이 포함될 수 있으며, DeleteParameters도 포함될 수 있습니다. ObjectDataSource의 데이터 원본 선택 마법사는 삽입, 업데이트 및 삭제에 사용할 메서드 ProductBLL 를 자동으로 지정하므로 명시적으로 삭제하지 않는 한 위의 태그에 포함됩니다.

이 페이지를 방문할 때 데이터 웹 컨트롤은 ObjectDataSource의 Select 메서드를 호출합니다. 이 메서드는 입력 매개 변수에 대해 하드 코딩된 값 5를 사용하여 클래스 ProductsBLL 의 메서드를 GetProductByProductID(productID) 호출 productID 합니다. 이 메서드는 Anton 셰프의 검보 믹스(ProductID이(가) 5인 제품)에 대한 정보가 포함된 단일 행을 포함하는 강력한 형식의 ProductDataTable 개체를 반환합니다.

안톤 셰프의 검보 믹스에 대한 정보가 표시됩니다.

그림 5: 안톤 셰프의 검보 믹스에 대한 정보가 표시됩니다(전체 크기 이미지를 보려면 클릭).

매개 변수 값을 웹 컨트롤의 속성 값으로 설정

ObjectDataSource의 매개 변수 값은 페이지의 웹 컨트롤 값에 따라 설정할 수도 있습니다. 이를 설명하기 위해 사용자가 지정한 국가/지역에 있는 모든 공급업체를 나열하는 GridView를 만들어 보겠습니다. 이 작업을 수행하려면 먼저 사용자가 국가/국가 이름을 입력할 수 있는 페이지에 TextBox를 추가합니다. 이 TextBox 컨트롤의 ID 속성을 .로 CountryName설정합니다. 단추 웹 컨트롤도 추가합니다.

ID CountryName을 사용하여 페이지에 TextBox 추가

그림 6: 페이지에 IDCountryName TextBox 추가(전체 크기 이미지를 보려면 클릭)

다음으로, 페이지에 GridView를 추가하고 스마트 태그에서 새 ObjectDataSource를 추가하도록 선택합니다. 공급업체 정보를 표시하려면 마법사의 첫 번째 화면에서 클래스를 선택합니다 SuppliersBLL . 두 번째 화면에서 메서드를 GetSuppliersByCountry(country) 선택합니다.

GetSuppliersByCountry(country) 메서드 선택

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

메서드에 GetSuppliersByCountry(country) 입력 매개 변수가 있으므로 마법사에 매개 변수 값을 선택하는 최종 화면이 다시 한 번 포함됩니다. 이번에는 매개 변수 소스를 Control로 설정합니다. 그러면 ControlID 드롭다운 목록이 페이지의 컨트롤 이름으로 채워집니다. CountryName 목록에서 컨트롤을 선택합니다. 페이지를 처음 방문하면 TextBox가 CountryName 비어 있으므로 결과가 반환되지 않고 아무것도 표시되지 않습니다. 기본적으로 일부 결과를 표시하려면 DefaultValue 텍스트 상자를 적절하게 설정합니다.

매개 변수 값을 CountryName 컨트롤 값으로 설정

그림 8: 매개 변수 값을 컨트롤 값으로 CountryName 설정(전체 크기 이미지를 보려면 클릭)

ObjectDataSource의 선언적 태그는 표준 개체 대신 ControlParameterParameter사용하는 첫 번째 예제와 약간 다릅니다. ControlParameter에는 웹 컨트롤의 ID을(를) 지정하고 매개 변수(PropertyName)에 사용할 속성 값을 설정하는 추가 속성이 있습니다. 데이터 원본 구성 마법사는 TextBox에 대해 매개변수 값으로 Text 속성을 사용하는 것이 적절하다고 판단할 만큼 똑똑했습니다. 그러나 웹 컨트롤과 다른 속성 값을 사용하려는 경우 여기에서 값을 변경하거나 마법사에서 "고급 속성 표시" 링크를 클릭하여 변경할 PropertyName 수 있습니다.

<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
    SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
    <SelectParameters>
        <asp:ControlParameter ControlID="CountryName"
          Name="country" PropertyName="Text"
            Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

처음으로 페이지를 방문할 때 TextBox가 CountryName 비어 있습니다. ObjectDataSource의 Select 메서드는 여전히 GridView에 의해 호출되지만, null 값이 GetSuppliersByCountry(country) 메서드로 전달됩니다. TableAdapter는 null을(를) 데이터베이스 NULL 값으로 변환합니다. 그러나 GetSuppliersByCountry(country) 메서드에서 사용하는 쿼리는 NULL 값을 @CategoryID 매개 변수에 지정할 때 값을 반환하지 않도록 작성되었습니다. 즉, 공급업체는 반환되지 않습니다.

그러나 방문자가 국가에 들어와서 공급자 표시 단추를 클릭하여 포스트백을 실행하면 ObjectDataSource의 Select 메서드가 다시 쿼리되어 TextBox 컨트롤의 Text 값을 매개 변수로 country 전달합니다.

캐나다의 공급업체가 표시됩니다.

그림 9: 캐나다의 공급업체가 표시됩니다(전체 크기 이미지를 보려면 클릭).

기본적으로 모든 공급업체 표시

페이지를 처음 볼 때 공급자를 표시하지 않는 대신, 먼저 모든 공급업체를 표시하여 사용자가 TextBox에 국가/지역 이름을 입력해서 목록을 축소할 수 있도록 하는 것이 좋습니다. TextBox가 비어 있을 때, SuppliersBLL 클래스의 GetSuppliersByCountry(country) 메서드는 입력 매개변수로 null 값을 가진 country을 전달받습니다. 그런 다음 이 null 값은 DAL의 GetSupplierByCountry(country) 메서드로 전달됩니다. 여기서 다음 쿼리에서 매개 변수의 NULL 데이터베이스 @Country 값으로 변환됩니다.

SELECT     SupplierID, CompanyName, Address, City, Country, Phone
FROM         Suppliers
WHERE Country = @Country

표현식 Country = NULLNULL 값이 Country 열에 있는 레코드인 경우에도 항상 False를 반환하므로, 레코드가 반환되지 않습니다.

국가 TextBox가 비어 있을 때 모든 공급자를 반환하도록, BLL의 메서드를 보강하여 국가 매개 변수가 비어 있을 때는 GetSuppliers() 메서드를 호출하고, 그렇지 않으면 DAL의 GetSuppliersByCountry(country) 메서드를 호출하도록 할 수 있습니다. 이는 국가 매개 변수가 포함될 때 국가가 지정되지 않은 경우 모든 공급업체를 반환하고 공급자의 적절한 하위 집합을 반환하는 효과가 있습니다.

클래스의 GetSuppliersByCountry(country) 메서드를 SuppliersBLL 다음으로 변경합니다.

public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
    if (string.IsNullOrEmpty(country))
        return GetSuppliers();
    else
        return Adapter.GetSuppliersByCountry(country);
}

이 변경으로 DeclarativeParams.aspx 페이지에는 처음 방문할 때(또는 CountryName TextBox가 비어 있을 때) 모든 공급업체가 표시됩니다.

이제 모든 공급업체가 기본적으로 표시됩니다.

그림 10: 이제 모든 공급업체가 기본적으로 표시됩니다(전체 크기 이미지를 보려면 클릭).

요약

입력 매개 변수와 함께 메서드를 사용하려면 ObjectDataSource SelectParameters 컬렉션의 매개 변수 값을 지정해야 합니다. 매개 변수 형식이 다르면 매개 변수 값을 다른 원본에서 가져올 수 있습니다. 기본 매개 변수 형식은 하드 코딩된 값을 사용하지만, 쿼리 문자열, 세션 변수, 쿠키 및 페이지의 웹 컨트롤에서 사용자가 입력한 값에서도 쉽게(코드 줄 없이) 매개 변수 값을 가져올 수 있습니다.

이 자습서에서 살펴본 예제에서는 선언적 매개 변수 값을 사용하는 방법을 설명했습니다. 그러나 현재 날짜 및 시간과 같이 사용할 수 없는 매개 변수 원본을 사용해야 하거나 사이트에서 방문자의 사용자 ID인 멤버 자격을 사용하는 경우가 있을 수 있습니다. 이러한 시나리오의 경우 ObjectDataSource가 기본 개체의 메서드를 호출하기 전에 프로그래밍 방식으로 매개 변수 값을 설정할 수 있습니다. 이 작업을 수행하는 방법은 다음 자습서에서 확인할 수 있습니다.

행복한 프로그래밍!

작성자 정보

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

특별히 감사드립니다

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