Partager via


Filtrage de données à l'aide de contrôles de source de données

Mise à jour : novembre 2007

Les contrôles de source de données fournissent plusieurs services de données qui simplifient l'ajout de fonctionnalités avancées à vos applications, et notamment le filtrage de données selon des critères de recherche que vous spécifiez. Le filtrage est particulièrement utile lors de l'utilisation de données mises en cache car vous pouvez fournir des fonctionnalités de recherche sans devoir réexécuter des requêtes ou appeler des méthodes pour lire les données.

Pour filtrer des données, un contrôle de source de données doit être configuré comme suit :

Lorsque vous utilisez le contrôle XmlDataSource, vous pouvez filtrer les données à l'aide de requêtes XPath. Pour plus d'informations, consultez Filtrage de données à l'aide du contrôle XmlDataSource.

Définition de l'expression de filtre

Vous spécifiez le filtre à appliquer aux données retournées par un contrôle ObjectDataSource, SqlDataSource ou AccessDataSource en définissant la propriété FilterExpression du contrôle de source de données. La syntaxe de l'expression de filtre est basée sur la syntaxe de la propriété Expression de la classe DataColumn. L'expression de filtre est appliquée lors de l'appel à la méthode Select du contrôle de source de données.

Spécification des paramètres de filtre

Vous pouvez fournir une expression de filtre paramétrée pour un contrôle ObjectDataSource, SqlDataSource ou AccessDataSource, qui vous permet de fournir des valeurs de filtre au moment de l'exécution sans qu'il soit nécessaire d'écrire du code pour définir explicitement la propriété FilterExpression. Vous spécifiez des paramètres d'expression de filtre à l'aide de la collection FilterParameters du contrôle de source de données. Les paramètres peuvent récupérer des données des contrôles, de l'objet QueryString, de l'état de session, des propriétés de profil utilisateur, etc. Pour plus d'informations sur les types des paramètres qui peuvent être utilisés dans la collection FilterParameters, consultez Utilisation de paramètres avec des contrôles de source de données.

Dans l'expression de filtre, vous créez des espaces réservés qui correspondent à des éléments de la collection FilterParameters du contrôle de source de données. Les espaces réservés sont numérotés, 0 représentant le premier paramètre de la collection. Vous spécifiez un espace réservé dans l'expression de filtre en plaçant le numéro du paramètre de filtre entre des caractères '{' et '}', comme illustré dans l'exemple suivant :

Country = '{0}' AND LastName LIKE '{1}'
Note de sécurité :

Dans la mesure où les valeurs de la collection FilterParameters sont substituées dans la chaîne FilterExpression sans codage, vous devez valider toutes les valeurs des paramètres de filtre avant d'appliquer un filtre. Vous pouvez utiliser l'événement Filtering du contrôle de source de données pour accéder à des valeurs des paramètres de filtre et les valider avant l'application du filtre.

L'exemple suivant illustre un contrôle SqlDataSource nommé EmployeeDetailsSqlDataSource qui inclut des paramètres de filtre. Les valeurs des paramètres utilisées dans la propriété FilterExpression sont remplies au moment de l'exécution avec les valeurs des propriétés d'autres contrôles de la page.

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

Voir aussi

Autres ressources

Contrôles serveur Web de sources de données