Condividi tramite


Filtraggio di dati mediante controlli di origine dati

Aggiornamento: novembre 2007

I controlli origine dati offrono diversi servizi di dati che semplificano l'integrazione di funzionalità avanzate nelle applicazioni, incluso il filtraggio dei dati in base ai criteri di ricerca specificati. L'applicazione di un filtro risulta particolarmente utile quando si utilizzano dati memorizzati nella cache, in quanto consente l'utilizzo di funzionalità di ricerca senza che sia necessario rieseguire query o chiamare metodi per la lettura dei dati.

Per filtrare i dati, è necessario configurare un controllo origine dati come indicato di seguito:

Quando si utilizza il controllo XmlDataSource, è possibile filtrare i dati mediante query XPath. Per ulteriori informazioni, vedere Filtraggio dei dati mediante il controllo XmlDataSource.

Impostazione dell'espressione di filtro

Per specificare il filtro da applicare ai dati restituiti da un controllo ObjectDataSource, SqlDataSource o AccessDataSource è necessario impostare la proprietà FilterExpression del controllo origine dati. La sintassi relativa all'espressione di filtro si basa sulla sintassi della proprietà Expression della classe DataColumn. L'espressione di filtro viene applicata quando viene chiamato il metodo Select dell'origine dati.

Specifica dei parametri di filtro

È possibile specificare un'espressione di filtro con parametri per un controllo ObjectDataSource, SqlDataSource o AccessDataSource. Questo consente di fornire valori di filtro in fase di esecuzione senza che sia necessario scrivere codice per l'impostazione esplicita della proprietà FilterExpression. Specificare i parametri dell'espressione di filtro utilizzando l'insieme FilterParameters del controllo origine dati. I parametri possono recuperare i dati dai controlli, l'oggetto QueryString, lo stato della sessione, le proprietà del profilo utente e così via. Per informazioni sui tipi di parametri utilizzabili nell'insieme FilterParameters, vedere Utilizzo di parametri con controlli origine dati.

Nell'espressione di filtro vengono creati segnaposto corrispondenti agli elementi dell'insieme FilterParameters del controllo origine dati. I segnaposto sono numerati, e lo 0 rappresenta il primo parametro dell'insieme. Per specificare un segnaposto nell'espressione di filtro, è necessario racchiudere il numero del parametro di filtro tra i caratteri '{' e '}', come illustrato nell'esempio riportato di seguito:

Country = '{0}' AND LastName LIKE '{1}'
Nota sulla sicurezza:

Poiché i valori dell'insieme FilterParameters vengono sostituiti nella stringa FilterExpression senza codifica, è opportuno convalidare tutti i valori dei parametri di filtro prima di applicare un filtro. Per accedere ai valori dei parametri di filtro e convalidarli prima di applicare il filtro, è possibile utilizzare l'evento Filtering del controllo origine dati.

Nell'esempio di codice riportato di seguito viene illustrato un controllo SqlDataSource denominato EmployeeDetailsSqlDataSource in cui sono inclusi parametri di filtro. In fase di esecuzione i valori di parametro utilizzati nella proprietà FilterExpression vengono sostituiti con i valori delle proprietà dei controlli posizionati in altri punti della pagina.

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

Vedere anche

Altre risorse

Controlli server Web dell'origine dati