데이터 소스 컨트롤을 사용하여 데이터 필터링
업데이트: 2007년 11월
데이터 소스 컨트롤에서 제공하는 다양한 데이터 서비스를 사용하여 응용 프로그램에 고급 기능을 쉽게 추가할 수 있습니다. 예를 들면 사용자가 지정하는 검색 조건에 따라 데이터를 필터링할 수 있습니다. 필터링을 사용하면 데이터를 읽기 위해 쿼리를 다시 실행하거나 메서드를 호출하지 않고도 검색 기능을 제공할 수 있으므로 캐시된 데이터로 작업하는 경우에 특히 유용합니다.
데이터를 필터링하려면 다음과 같은 방법을 사용하여 데이터 소스 컨트롤을 구성해야 합니다.
SqlDataSource 또는 AccessDataSource 컨트롤의 경우 DataSourceMode 속성을 DataSet으로 설정해야 합니다.
ObjectDataSource 컨트롤의 경우 내부 소스 개체에서 DataSet 또는 DataTable 개체를 반환해야 합니다.
XmlDataSource 컨트롤을 사용하는 경우 XPath 쿼리를 사용하여 데이터를 필터링할 수 있습니다. 자세한 내용은 XmlDataSource 컨트롤을 사용하여 데이터 필터링을 참조하십시오.
필터 식 설정
데이터 소스 컨트롤의 FilterExpression 속성을 설정하여 ObjectDataSource, SqlDataSource 또는 AccessDataSource 컨트롤에서 반환된 데이터에 적용할 필터를 지정합니다. 필터 식의 구문은 DataColumn 클래스의 Expression 속성 구문을 기반으로 합니다. 데이터 소스 컨트롤의 Select 메서드가 호출되면 필터 식이 적용됩니다.
필터 매개 변수 제공
매개 변수가 있는 필터 식을 ObjectDataSource, SqlDataSource 또는 AccessDataSource 컨트롤에 제공할 수 있습니다. 이 필터 식을 사용하면 코드를 작성하여 FilterExpression 속성을 명시적으로 설정하지 않고도 런타임에 필터 값을 제공할 수 있습니다. 데이터 소스 컨트롤의 FilterParameters 컬렉션을 사용하여 필터 식 매개 변수를 지정합니다. 이러한 매개 변수는 컨트롤, QueryString 개체, 세션 상태, 사용자 프로필 속성 등으로부터 데이터를 검색할 수 있습니다. FilterParameters 컬렉션에서 사용할 수 있는 매개 변수의 형식에 대한 내용은 데이터 소스 컨트롤에 매개 변수 사용을 참조하십시오.
필터 식을 사용하여 데이터 소스 컨트롤에 대한 FilterParameters 컬렉션의 항목에 해당하는 자리 표시자를 만듭니다. 자리 표시자에는 번호가 지정되고 0은 컬렉션의 첫 번째 매개 변수를 나타냅니다. 다음 예제와 같이 '{' 및 '}' 문자에 필터 매개 변수의 개수를 추가하여 필터 식에 자리 표시자를 지정합니다.
Country = '{0}' AND LastName LIKE '{1}'
보안 정보: |
---|
FilterParameters 컬렉션의 값은 별도의 인코딩 없이 FilterExpression 문자열로 대체되므로 필터를 적용하기 전에 모든 필터 매개 변수 값의 유효성을 검사해야 합니다. 필터를 적용하기 전에 데이터 소스 컨트롤의 Filtering 이벤트를 사용하여 필터 매개 변수 값에 액세스한 다음 유효성을 검사할 수 있습니다. |
다음 예제에서는 필터 매개 변수가 포함된 EmployeeDetailsSqlDataSource라는 SqlDataSource 컨트롤을 보여 줍니다. FilterExpression 속성에 사용되는 매개 변수 값은 페이지에 있는 컨트롤의 속성 값으로 런타임에 채워집니다.
<%@ Page language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>Northwind Employees</title>
</head>
<body>
<form id="form1" >
<h3>Northwind Employees</h3>
<table cellspacing="10">
<tr>
<td valign="top">
<table border="0">
<tr>
<td valign="top">Country</td>
<td><asp:DropDownList id="CountryListBox" AppendDataBoundItems="True"
DataSourceID="CountrySqlDataSource"
DataTextField="Country" DataValueField="Country" >
<asp:ListItem Selected="True" Value="" >(Show All)</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>Last Name</td>
<td><asp:TextBox id="LastNameTextBox" Text="*" /></td>
</tr>
<tr>
<td></td>
<td><asp:Button id="FilterButton" Text="Filter Results" /></td>
</tr>
</table>
</td>
<td valign="top">
<asp:GridView ID="EmployeesGridView"
DataSourceID="EmployeeDetailsSqlDataSource"
AutoGenerateColumns="false"
AllowSorting="True"
DataKeyNames="EmployeeID"
Gridlines="Both"
RunAt="server">
<HeaderStyle backcolor="Navy"
forecolor="White"/>
<RowStyle backcolor="White"/>
<AlternatingRowStyle backcolor="LightGray"/>
<EditRowStyle backcolor="LightCyan"/>
<Columns>
<asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" ReadOnly="true"/>
<asp:BoundField DataField="FirstName" HeaderText="First Name"/>
<asp:BoundField DataField="LastName" HeaderText="Last Name"/>
<asp:BoundField DataField="Country" HeaderText="Country"/>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
<asp:SqlDataSource ID="CountrySqlDataSource"
SelectCommand="SELECT DISTINCT Country FROM Employees"
EnableCaching="True"
CacheDuration="60"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
RunAt="server" />
<asp:SqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName, Country FROM Employees"
EnableCaching="True"
CacheDuration="60"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
FilterExpression="Country LIKE '{0}' AND LastName LIKE '{1}'"
RunAt="server">
<FilterParameters>
<asp:ControlParameter ControlID="CountryListBox" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="LastNameTextBox" PropertyName="Text" />
</FilterParameters>
</asp:SqlDataSource>
</form>
</body>
</html>
<%@ Page language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>Northwind Employees</title>
</head>
<body>
<form id="form1" >
<h3>Northwind Employees</h3>
<table cellspacing="10">
<tr>
<td valign="top">
<table border="0">
<tr>
<td valign="top">Country</td>
<td><asp:DropDownList id="CountryListBox" AppendDataBoundItems="True"
DataSourceID="CountrySqlDataSource"
DataTextField="Country" DataValueField="Country" >
<asp:ListItem Selected="True" Value="" >(Show All)</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td>Last Name</td>
<td><asp:TextBox id="LastNameTextBox" Text="*" /></td>
</tr>
<tr>
<td></td>
<td><asp:Button id="FilterButton" Text="Filter Results" /></td>
</tr>
</table>
</td>
<td valign="top">
<asp:GridView ID="EmployeesGridView"
DataSourceID="EmployeeDetailsSqlDataSource"
AutoGenerateColumns="false"
AllowSorting="true"
DataKeyNames="EmployeeID"
Gridlines="Both"
RunAt="server">
<HeaderStyle backcolor="Navy"
forecolor="White"/>
<RowStyle backcolor="White"/>
<AlternatingRowStyle backcolor="LightGray"/>
<EditRowStyle backcolor="LightCyan"/>
<Columns>
<asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" ReadOnly="true"/>
<asp:BoundField DataField="FirstName" HeaderText="First Name"/>
<asp:BoundField DataField="LastName" HeaderText="Last Name"/>
<asp:BoundField DataField="Country" HeaderText="Country"/>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
<asp:SqlDataSource ID="CountrySqlDataSource"
SelectCommand="SELECT DISTINCT Country FROM Employees"
EnableCaching="True"
CacheDuration="60"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
RunAt="server" />
<asp:SqlDataSource ID="EmployeeDetailsSqlDataSource"
SelectCommand="SELECT EmployeeID, LastName, FirstName, Country FROM Employees"
EnableCaching="True"
CacheDuration="60"
ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
FilterExpression="Country LIKE '{0}' AND LastName LIKE '{1}'"
RunAt="server">
<FilterParameters>
<asp:ControlParameter ControlID="CountryListBox" PropertyName="SelectedValue" />
<asp:ControlParameter ControlID="LastNameTextBox" PropertyName="Text" />
</FilterParameters>
</asp:SqlDataSource>
</form>
</body>
</html>