선언적 매개 변수(C#)

작성자 : Scott Mitchell

PDF 다운로드

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

소개

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

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

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

Hard-Coded 매개 변수 값 사용

첫 번째 예제에서는 먼저 DetailsView 컨트롤을 폴더의 DeclarativeParams.aspx 페이지에 추가합니다 BasicReporting . 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 매개 변수에 Hard-Coded 매개 변수 값 5가 사용됩니다.

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

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

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

참고

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

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

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

그림 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의 선언적 태그는 표준 Parameter 개체 대신 ControlParameter를 사용하는 첫 번째 예제와 약간 다릅니다. 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는 를 데이터베이스 값(DBNull.Value)으로 변환 null 하지만 메서드에서 GetSuppliersByCountry(country) 사용하는 쿼리는 매개 변수에 대해 @CategoryID 값을 지정할 때 NULL 값을 반환하지 않도록 작성됩니다.NULL 즉, 공급자가 반환되지 않습니다.

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

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

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

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

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

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

Country = NULL 은 열에 값이 있는 Country 레코드에 대해서도 항상 False를 NULL 반환하므로 레코드가 반환되지 않습니다.

국가 TextBox가 비어 있을 때 모든 공급자를 반환하려면 BLL의 메서드를 보강 GetSuppliersByCountry(country) 하여 해당 국가 매개 변수가 인 null 경우 메서드를 호출 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 페이지에는 처음 방문했을 때(또는 TextBox가 비어 있을 때마다) 모든 공급업체가 CountryName 표시됩니다.

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

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

요약

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

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

행복한 프로그래밍!

저자 정보

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.