Compartir a través de


Filtrar datos utilizando controles de origen de datos

Actualización: noviembre 2007

Los controles de origen de datos proporcionan varios servicios de datos que facilitan el modo de agregar características avanzadas a las aplicaciones. Esto incluye datos de filtrado basados en los criterios de búsqueda que especifique. El filtrado es especialmente recomendado cuando se trabaja con datos almacenados en caché porque puede proporcionar capacidades de búsqueda sin tener que volver a ejecutar las consultas o los métodos de llamada para leer los datos.

Para filtrar datos, se debe configurar un control de origen de datos de estas maneras:

Al utilizar el control XmlDataSource, puede filtrar datos mediante las consultas de XPath. Para obtener más información, vea Filtrar datos mediante el control XmlDataSource.

Establecer la expresión del filtro

Especifique el filtro que se va a aplicar a los datos devueltos por un control ObjectDataSource, SqlDataSource o AccessDataSource estableciendo la propiedad FilterExpression del control de origen de datos. La sintaxis para la expresión del filtro está basada en la sintaxis de la propiedad Expression de la clase DataColumn. La expresión del filtro se aplica cuando se llama al método Select del control de origen de datos.

Proporcionar parámetros de filtro

Puede proporcionar una expresión del filtro parametrizada para un control ObjectDataSource, SqlDataSource o AccessDataSource, que le permite proporcionar en tiempo de ejecución valores de filtro sin escribir ningún código que establezca explícitamente la propiedad FilterExpression. Especifique parámetros de expresión del filtro mediante la colección FilterParameters del control de origen de datos. Los parámetros pueden recuperar datos de los controles, objeto QueryString, estado de sesión, propiedades del perfil de usuario, etc. Para obtener información sobre los tipos de parámetros que se pueden utilizar en la colección FilterParameters, vea Utilizar parámetros con controles de origen de datos.

En la expresión del filtro, cree marcadores de posición que corresponden a los elementos en la colección FilterParameters del control de origen de datos. Los marcadores de posición están numerados y 0 representa el primer parámetro de la colección. Especifique un marcador de posición en la expresión del filtro colocando el número del parámetro del filtro entre caracteres '{' y '}', tal como se muestra en el ejemplo siguiente:

Country = '{0}' AND LastName LIKE '{1}'
Nota de seguridad:

Como los valores de la colección FilterParameters se sustituyen en la cadena FilterExpression sin codificación, debe validar todos los valores de parámetros del filtro antes de aplicarlo. Puede utilizar el evento Filtering del control de origen de datos para obtener acceso y validar los valores de parámetros del filtro antes de aplicarlo.

El ejemplo siguiente muestra un control SqlDataSource denominado EmployeeDetailsSqlDataSource que incluye los parámetros del filtro. Los valores de parámetros utilizados en la propiedad FilterExpression se rellenan en tiempo de ejecución con los valores de propiedad de los controles en otra parte de la 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>

Vea también

Otros recursos

Controles de servidor web de orígenes de datos