Compartir a través de


Cómo: Habilitar el filtrado para el control SqlDataSource

Actualización: noviembre 2007

El control SqlDataSource permite filtrar (ordenar o seleccionar) los resultados de una consulta sin necesidad de volver a ejecutar la consulta. Al agregar la función de filtrado a un control SqlDataSource, puede modificar los datos que muestra el control SqlDataSource después de que se ha ejecutado una consulta sin volver a la base de datos.

En este tema se muestra cómo se habilita el filtrado para un control SqlDataSource. Los controles enlazados a datos que están enlazados al control SqlDataSource, como GridView, mostrarán sólo los resultados filtrados.

Para utilizar el filtrado, debe establecer el control SqlDataSource para que devuelva la información en un conjunto de datos y almacene en memoria caché sus resultados. Puede especificar una expresión de filtro que se aplique como una propiedad RowFilter al objeto DataView que subyace el control SqlDataSource.

El filtro puede incluir parámetros que se basan en los valores de otro control, cookies, variables de sesión o cadenas de consulta. Por ejemplo, si un control DropDownList contiene nombres de ciudades, puede utilizar la ciudad seleccionada en el control DropDownList como un parámetro de filtrado.

Nota:

No es lo mismo crear una expresión de filtro con parámetros que crear una propiedad SelectCommand parametrizada y especificar los valores de la propiedad SelectParameters. Un filtro parametrizado aplica vistas diferentes de los datos a un conjunto de datos almacenado en memoria caché. Un comando de selección parametrizado realiza una consulta en el origen de datos.

Para habilitar el filtrado para un control SqlDataSource

  1. Cree un control SqlDataSource con una cadena de conexión válida y seleccione una instrucción. Para obtener más información, vea Cómo: Conectar con una base de datos de SQL Server mediante el control SqlDataSource (Visual Studio).

  2. Establezca la propiedad DataSourceMode del control SqlDataSource en DataSet.

  3. Establezca la propiedad EnableCaching del control SqlDataSource en true.

    Los datos devueltos por la consulta deben almacenarse en memoria caché para que admitan el filtrado.

  4. Establezca la propiedad CacheDuration del control SqlDataSource en el número de segundos que desea que se almacenen los datos en memoria caché. El número que seleccione dependerá de su aplicación.

  5. Establezca la propiedad FilterExpression del control en una expresión que especifique los datos que se van a devolver, como en el ejemplo siguiente:

    country = 'Germany'
    

    Para obtener información sobre la sintaxis de las expresiones de filtro, vea RowFilter.

    El control SqlDataSource con la función de filtrado habilitada tendrá un aspecto similar a:

    <asp:SqlDataSource 
        ID="SqlDataSource1" 
        DataSourceMode="DataSet"
        EnableCaching="true"
        Runat="server" 
        SelectCommand="Select * From Customers"
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        FilterExpression="country = 'Germany'">
    </asp:SqlDataSource>
    

    Cuando el comando de selección se ejecuta en una base de datos, los controles que están enlazados a este control SqlDataSource mostrarán únicamente los resultados filtrados.

Filtrar con parámetros

A menudo, deseará filtrar los resultados de una consulta en función de los valores que sólo se conocen en tiempo de ejecución. Puede crear expresiones de filtro que incluyan marcadores de posición de parámetro y, a continuación, definir los parámetros de filtro para rellenar los marcadores de posición. Los parámetros de filtro pueden recibir sus valores de un control, de una cadena de consulta, de una cookie, de una variable de sesión, de una propiedad de perfil o del valor de la propiedad Form.

Para filtrar un control SqlDataSource mediante parámetros

  1. Establezca la propiedad FilterExpression del control SqlDataSource en una expresión que incluya un marcador de posición para el valor de parámetro del filtro. Los marcadores de posición utilizan la sintaxis {n}, donde n indica el orden secuencial del parámetro.

    En los ejemplos siguientes se muestran expresiones de filtro parametrizadas. El segundo ejemplo incluye varios marcadores de posición de parámetro.

    FilterExpression="category = '{0}'"
    FilterExpression="country = '{0}' AND city = '{1}'"
    
  2. Cree un elemento FilterParameters como elemento secundario del elemento SqlDataSource. En cada marcador de posición de parámetro de filtro, agregue un elemento de uno de los tipos siguientes:

    En el ejemplo siguiente se muestra cómo se crea un parámetro de filtro que recibe su valor de un control DropDownList:

    <FilterParameters>
      <asp:ControlParameter
       Name="CategoryList" ControlID="DropDownList1" 
       PropertyValue="SelectedValue" />
    </FilterParameters>
    
    Nota:

    Se requiere la propiedad Name del parámetro. Sin embargo, los parámetros coinciden con los marcadores de posición en orden secuencial, no por nombre.

    En el ejemplo siguiente se muestra cómo realiza el filtrado un control SqlDataSource completo parametrizado:

    <asp:SqlDataSource 
      ID="SqlDataSource1" 
      EnableCaching="true"
      DataSourceMode="DataSet"
      Runat="server" 
      SelectCommand="Select * from Customers"
      ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString1 %>"
      FilterExpression="country = '{0}'">
      <FilterParameters>    <asp:ControlParameter      Name="countryparam"      ControlID="DropDownList1"      PropertyName="SelectedValue" />  </FilterParameters>
    </asp:SqlDataSource>
    

Vea también

Conceptos

Almacenar datos en memoria caché utilizando controles de origen de datos