Partager via


Comment : activer le filtrage pour le contrôle SqlDataSource

Mise à jour : novembre 2007

Le contrôle SqlDataSource vous permet de filtrer (trier ou sélectionner) les résultats d'une requête sans réexécuter cette dernière. En ajoutant un filtrage à un contrôle SqlDataSource, vous pouvez modifier les données rendues disponibles par le contrôle SqlDataSource après exécution d'une requête, sans retourner à la base de données.

Cette rubrique indique comment activer le filtrage pour un contrôle SqlDataSource. Les contrôles liés aux données qui sont liés au contrôle SqlDataSource, tel qu'un contrôle GridView, afficheront uniquement les résultats filtrés.

Pour utiliser le filtrage, vous devez définir le contrôle SqlDataSource pour retourner les informations d'un groupe de données et mettre en cache ses résultats. Vous pouvez alors spécifier une expression de filtre qui est appliquée comme une propriété RowFilter à l'objet DataView sous-jacent au contrôle SqlDataSource.

Le filtre peut inclure des paramètres basés sur les valeurs d'un autre contrôle, des cookies, des variables de session ou des chaînes de requête. Par exemple, si un contrôle DropDownList contient des noms de villes, vous pouvez utiliser la ville sélectionnée dans le contrôle DropDownList comme paramètre de filtrage.

Remarque :

La création d'une expression de filtre avec des paramètres ne revient pas au même que créer une propriété SelectCommand paramétrée et spécifier des valeurs de propriété SelectParameters. Un filtre paramétré applique des vues différentes des données à un groupe de données mis en cache. Une instruction de sélection paramétrée exécute une requête sur la source de données.

Pour activer le filtrage pour un contrôle SqlDataSource

  1. Créez un contrôle SqlDataSource avec une chaîne de connexion et une instruction de sélection valides. Pour plus d'informations, consultez Comment : se connecter à une base de données SQL Server à l'aide du contrôle SqlDataSource (Visual Studio).

  2. Affectez à la propriété DataSourceMode du contrôle SqlDataSource la valeur DataSet.

  3. Affectez à la propriété EnableCaching du contrôle SqlDataSource la valeur true.

    Les données retournées par la requête doivent être mises en cache pour que le filtrage soit pris en charge.

  4. Affectez à la propriété CacheDuration du contrôle SqlDataSource le nombre de secondes pendant lesquelles vous souhaitez mettre les données en cache. Le nombre que vous choisissez dépend de votre application.

  5. Affectez à la propriété FilterExpression du contrôle une expression spécifiant les données à retourner, comme dans l'exemple suivant :

    country = 'Germany'
    

    Pour plus d'informations sur la syntaxe des expressions de filtre, consultez RowFilter.

    Le contrôle SqlDataSource avec filtrage actif aura l'aspect suivant :

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

    Lorsque l'instruction de sélection est exécutée sur une base de données, les contrôles qui sont liés à ce contrôle SqlDataSource n'affichent que des résultats filtrés.

Filtrer avec des paramètres

Il est souvent utile de filtrer les résultats d'une requête en fonction des valeurs qui sont connues uniquement au moment de l'exécution. Vous pouvez créer des expressions de filtre qui incluent des espaces réservés pour les paramètres, puis définir des paramètres de filtre pour remplir ces espaces. Les paramètres de filtre peuvent tirer leurs valeurs de contrôles, d'une chaîne de requête, d'un cookie, d'une variable de session, d'une propriété de profil ou d'une valeur de propriété Form.

Pour filtrer un contrôle SqlDataSource à l'aide de paramètres

  1. Affectez à la propriété FilterExpression dans le contrôle SqlDataSource une expression qui inclut un espace réservé pour la valeur du paramètre de filtre. Les espaces réservés obéissent à la syntaxe {n}, où n indique l'ordre séquentiel du paramètre.

    Les exemples suivants présentent des expressions de filtre paramétrées. Le deuxième inclut plusieurs espaces réservés de paramètre.

    FilterExpression="category = '{0}'"
    FilterExpression="country = '{0}' AND city = '{1}'"
    
  2. Créez un élément FilterParameters en tant qu'enfant de votre élément SqlDataSource. Pour chaque espace réservé de paramètre de filtre, ajoutez un élément de l'un des types suivants :

    L'exemple suivant indique comment créer un paramètre de filtre qui tire sa valeur d'un contrôle DropDownList :

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

    La propriété Name du paramètre est obligatoire. Toutefois, les paramètres sont mis en correspondance avec les espaces réservés dans l'ordre séquentiel, pas par nom.

    L'exemple suivant présente un contrôle SqlDataSource complet avec un filtre paramétré :

    <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>
    

Voir aussi

Concepts

Mise en cache de données à l'aide de contrôles de source de données