Filtragem de dados usando controles de fonte de dados
Os controles da fonte de dados fornecem um número de serviços de dados que tornam mais fácil adicionar recursos avançados a seus aplicativos.Isso inclui a filtragem de dados com base nos critérios de pesquisa que você especificar.A filtragem é conveniente principalmente quando trabalhar com dados armazenados em cache, pois você pode fornecer recursos de pesquisa sem ter de executar novamente consultas ou chamar métodos para ler os dados.
Para filtrar dados, um controle da fonte de dados deve ser configurado das seguintes maneiras:
Para os controles SqlDataSource ou AccessDataSource, a propriedade DataSourceMode deve ser definida como DataSet.
Para o controle ObjectDataSource, o objeto de origem subjacentes deve retornar um objeto DataSet ou DataTable.
Ao usar o controle XmlDataSource, você pode filtrar dados Usando consultas XPath.Para obter mais informações, consulte Filtrando dados usando o controle XmlDataSource.
Definindo a expressão de filtro
Você especifica o filtro a ser aplicado aos dados retornados por um controle ObjectDataSource, SqlDataSource ou AccessDataSource definindo a propriedade FilterExpression do controle da fonte de dados.A sintaxe para a expressão de filtro é baseada na sintaxe da propriedade Expression da classe DataColumn.A expressão de filtro é aplicada quando o método Select do controle da fonte de dados for chamado.
Fornecendo parâmetros de filtro
Você pode fornecer uma expressão de filtro com parametrizada para um controle ObjectDataSource, SqlDataSource ou AccessDataSource, que permite que você forneça valores de filtro no tempo de execução sem escrever qualquer código para definir a propriedade FilterExpression explicitamente.Você especifica parâmetros de expressão de filtro usando a coleção FilterParameters do controle da fonte de dados.Os parâmetros podem recuperar dados dos controles, o objeto QueryString, estado de sessão, propriedades de perfil de usuário e assim por diante.Para obter informações sobre os tipos de parâmetros que podem ser usados na coleção FilterParameters, consulte Usando parâmetros com controles de fonte de dados.
Na expressão de filtro, você criar espaços reservados que correspondem aos itens na coleção FilterParameters do controle da fonte de dados.Os espaços reservados são numerados, com 0 representando o primeiro parâmetro na coleção.Você especificar um espaço reservado na expressão de filtro, colocando o número de parâmetro de filtro nos caracteres '{' e '}', conforme mostrado no exemplo o seguir:
Country = '{0}' AND LastName LIKE '{1}'
Observação de segurança: |
---|
Como valores da coleção FilterParameters são substituídos na sequência FilterExpression sem codificação, você deve validar todos os valores de parâmetro de filtro antes de aplicar um filtro.Você pode usar o evento Filtering do controle da fonte de dados para acessar e validar valores de parâmetro de filtro antes que o filtro seja aplicado. |
O exemplo a seguir mostra um controle SqlDataSource chamado EmployeeDetailsSqlDataSource que inclui parâmetros de filtro.Os valores de parâmetro usados na propriedade FilterExpression são preenchidos em tempo de execução dos valores de propriedades dos controles em qualquer outro lugar na página.
<%@ 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>