Condividi tramite


Procedura: attivare la funzionalità di filtro per il controllo SqlDataSource

Aggiornamento: novembre 2007

Il controllo SqlDataSource consente di filtrare (ordinare o selezionare) i risultati di una query senza eseguire nuovamente la query. Aggiungendo la funzionalità di filtro a un controllo SqlDataSource è possibile modificare i tipi di dati resi disponibili da tale controllo dopo l'esecuzione di una query, senza dover tornare al database.

In questo argomento viene illustrato come attivare la funzionalità di filtro per un controllo SqlDataSource. I controlli associati al controllo SqlDataSource, ad esempio GridView, visualizzeranno solo i risultati filtrati.

Per utilizzare i filtri, è necessario impostare il controllo SqlDataSource in modo da restituire informazioni in un dataset e memorizzare i risultati nella cache. È quindi possibile specificare un'espressione di filtro che viene applicata come proprietà RowFilter dell'oggetto DataView sottostante al controllo SqlDataSource.

Il filtro può includere parametri che sono basati sui valori di un altro controllo, su cookie, variabili di sessione o stringhe di query. Se ad esempio un controllo DropDownList contiene nomi di città, come parametro di filtro è possibile utilizzare la città selezionata in DropDownList.

Nota:

Creare un'espressione di filtro con parametri non equivale a creare una proprietà SelectCommand con parametri e a specificare i valori della proprietà SelectParameters. Un filtro con parametri applica diverse visualizzazioni dei dati in un dataset memorizzato nella cache. Un comando Select con parametri esegue una query sull'origine dati.

Per attivare la funzionalità di filtro per un controllo SqlDataSource

  1. Creare un controllo SqlDataSource con una stringa di connessione e un'istruzione Select valide. Per ulteriori informazioni, vedere Procedura: connettersi a un database SQL Server utilizzando il controllo SqlDataSource (Visual Studio).

  2. Impostare la proprietà DataSourceMode del controllo SqlDataSource su DataSet.

  3. Impostare la proprietà EnableCaching del controllo SqlDataSource su true.

    Per il supporto della funzionalità di filtro, i dati restituiti dalla query devono essere memorizzati nella cache.

  4. Impostare la proprietà CacheDuration del controllo SqlDataSource sul numero di secondi in cui i dati devono essere mantenuti nella cache. Il valore di questa proprietà dipende dall'applicazione.

  5. Impostare la proprietà FilterExpression del controllo su un'espressione che specifichi i dati da restituire, come illustrato nel seguente esempio:

    country = 'Germany'
    

    Per informazioni sulla sintassi delle espressioni di filtro, vedere RowFilter.

    Il controllo SqlDataSource con la funzionalità di filtro attivata sarà simile al seguente:

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

    Quando il comando Select viene eseguito su un database, i controlli associati a questo controllo SqlDataSource visualizzeranno solo i risultati filtrati.

Applicazione di filtri con parametri

Spesso è necessario filtrare i risultati di una query in base a valori noti solo in fase di esecuzione. È possibile creare espressioni di filtro che includono segnaposto di parametro e quindi definire parametri di filtro per l'inserimento dei dati nei segnaposto. I valori dei parametri di filtro possono essere ottenuti dai controlli, da una stringa di query, un cookie, una variabile di sessione, una proprietà di profilo o un valore della proprietà Form.

Per filtrare un controllo SqlDataSource mediante l'utilizzo di parametri

  1. Impostare la proprietà FilterExpression nel controllo SqlDataSource su un'espressione che includa un segnaposto per il valore del parametro di filtro. Per i segnaposto viene utilizzata la sintassi {n}, dove n indica l'ordine sequenziale del parametro.

    Negli esempi riportati di seguito vengono illustrate delle espressioni di filtro con parametri. Il secondo esempio include più segnaposto di parametro.

    FilterExpression="category = '{0}'"
    FilterExpression="country = '{0}' AND city = '{1}'"
    
  2. Creare un elemento FilterParameters come figlio dell'elemento SqlDataSource. Per ciascun segnaposto di parametro aggiungere un elemento scegliendo tra uno dei seguenti tipi:

    Nell'esempio riportato di seguito viene illustrato come creare un parametro di filtro il cui valore viene ottenuto da un controllo DropDownList:

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

    La proprietà Name per il parametro è obbligatoria. Tuttavia, i parametri vengono associati ai segnaposto in ordine sequenziale, non in base al nome.

    Nell'esempio riportato di seguito viene illustrato un controllo SqlDataSource completo per il quale è impostato un filtro con un parametro:

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

Vedere anche

Concetti

Memorizzazione di dati nella cache mediante controlli origine dati