ObjectDataSource.FilterExpression Proprietà

Definizione

Ottiene o imposta un'espressione di filtro applicata quando il metodo specificato dalla proprietà SelectMethod viene chiamato.

C#
public string FilterExpression { get; set; }

Valore della proprietà

Stringa che rappresenta un'espressione di filtro applicata quando i dati vengono recuperati utilizzando il metodo o la funzione identificati dalla proprietà SelectMethod

Eccezioni

La proprietà FilterExpression è stata impostata e il metodo Select() non restituisce un oggetto DataSet o DataTable.

Esempio

Nell'esempio di codice seguente viene illustrato come visualizzare i dati filtrati usando un ObjectDataSource controllo per recuperare dati da un oggetto business di livello intermedio e un GridView controllo per visualizzare i risultati. Il ObjectDataSource controllo può filtrare i dati solo quando il metodo che recupera i dati lo recupera come DataSet oggetto o DataTable . Per questo motivo, la SelectMethod proprietà identifica un metodo oggetto business che recupera i dati come .DataSet

L'esempio di codice è costituito da un TextBox controllo, un GridView controllo, il ObjectDataSource controllo e un pulsante Invia . Per impostazione predefinita, viene TextBox popolato con il nome di uno dei dipendenti di Northwind Traders. Visualizza GridView informazioni sul dipendente identificato dal nome in TextBox. Per recuperare i dati su un altro dipendente, immettere il nome completo del dipendente in TextBoxe quindi fare clic sul pulsante Invia .

La FilterExpression proprietà specifica un'espressione utilizzata per filtrare i dati recuperati dal metodo specificato dalla SelectMethod proprietà . Usa segnaposto dei parametri che vengono valutati ai parametri contenuti nella FilterParameters raccolta. In questo esempio il segnaposto del parametro è delimitato da virgolette singole perché il tipo del parametro è un tipo stringa che potrebbe contenere spazi. Se il tipo del parametro è un tipo numerico o di data, le virgolette di delimitazione non sono obbligatorie.

Importante

L'esempio include una casella di testo che accetta l'input dell'utente e rappresenta quindi una potenziale minaccia alla sicurezza. Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML. Per altre informazioni, vedere Cenni preliminari sugli attacchi tramite script.

ASP.NET (C#)
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

    protected void ObjectDataSource1_Filtering(object sender, ObjectDataSourceFilteringEventArgs e)
    {
        if (Textbox1.Text == "")
        {
            e.ParameterValues.Clear();
            e.ParameterValues.Add("FullName", "Nancy Davolio");
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <p>Show all users with the following name.</p>

        <asp:textbox id="Textbox1" runat="server" text="Nancy Davolio" />

        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="ObjectDataSource1"
          autogeneratecolumns="False">
          <columns>
            <asp:boundfield headertext="ID" datafield="EmpID" />
            <asp:boundfield headertext="Name" datafield="FullName" />
            <asp:boundfield headertext="Street Address" datafield="Address" />
          </columns>
        </asp:gridview>

        <!-- Security Note: The ObjectDataSource uses a FormParameter,
             Security Note: which does not perform validation of input from the client. -->

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          selectmethod="GetAllEmployeesAsDataSet"
          typename="Samples.AspNet.CS.EmployeeLogic"
          filterexpression="FullName='{0}'" OnFiltering="ObjectDataSource1_Filtering">
            <filterparameters>
              <asp:formparameter name="FullName" formfield="Textbox1" defaultvalue="Nancy Davolio" />
            </filterparameters>
        </asp:objectdatasource>

        <p><asp:button id="Button1" runat="server" text="Search" /></p>

    </form>
  </body>
</html>

Nell'esempio di codice seguente viene fornito un esempio di oggetto business di livello intermedio usato dall'esempio di codice precedente. L'esempio di codice è costituito da due classi di base:

  • Classe EmployeeLogic , che è una classe che incapsula la logica di business.

  • Classe NorthwindEmployee , che è una classe di modello che contiene solo la funzionalità di base necessaria per caricare e rendere persistenti i dati dal livello dati.

Per semplicità, la EmployeeLogic classe crea un set statico di dati, anziché recuperare i dati da un livello dati. È utile anche per questo esempio, perché l'esempio si basa sull'utente per fornire il nome completo di un dipendente di Northwind Traders per illustrare il filtro. Per un esempio funzionante completo, è necessario compilare e usare queste classi con gli esempi di codice Web Form forniti.

C#
namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Data;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates 
  // the operations you can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees () {
      ArrayList data = new ArrayList();
           
      data.Add(new NorthwindEmployee(1,"Nancy","Davolio","507 - 20th Ave. E. Apt. 2A"));
      data.Add(new NorthwindEmployee(2,"Andrew","Fuller","908 W. Capital Way"));
      data.Add(new NorthwindEmployee(3,"Janet","Leverling","722 Moss Bay Blvd."));
      data.Add(new NorthwindEmployee(4,"Margaret","Peacock","4110 Old Redmond Rd."));
      data.Add(new NorthwindEmployee(5,"Steven","Buchanan","14 Garrett Hill"));
      data.Add(new NorthwindEmployee(6,"Michael","Suyama","Coventry House Miner Rd."));
      data.Add(new NorthwindEmployee(7,"Robert","King","Edgeham Hollow Winchester Way"));
      
      return data;
    }
    
    public static NorthwindEmployee GetEmployee(object anID) {
      ArrayList data = GetAllEmployees() as ArrayList;     
      int empID = Int32.Parse(anID.ToString());      
      return data[empID] as NorthwindEmployee;
    }

    // 
    // To support basic filtering, the employees cannot
    // be returned as an array of objects, rather as a 
    // DataSet of the raw data values. 
    public static DataSet GetAllEmployeesAsDataSet () {
      ICollection employees = GetAllEmployees();
      
      DataSet ds = new DataSet("Table");
      
      // Create the schema of the DataTable.
      DataTable dt = new DataTable();
      DataColumn dc;
      dc = new DataColumn("EmpID",   typeof(int));    dt.Columns.Add(dc);
      dc = new DataColumn("FullName",typeof(string)); dt.Columns.Add(dc);
      dc = new DataColumn("Address", typeof(string)); dt.Columns.Add(dc);
      
      // Add rows to the DataTable.
      DataRow row;
            
      foreach (NorthwindEmployee ne in employees) {                
        row = dt.NewRow();
        row["EmpID"]    = ne.EmpID;
        row["FullName"] = ne.FullName;
        row["Address"]  = ne.Address;
        dt.Rows.Add(row);
      } 
      // Add the complete DataTable to the DataSet.
      ds.Tables.Add(dt);
      
      return ds;
    }    
  }

  public class NorthwindEmployee {

    public NorthwindEmployee (int anID, 
                              string aFirstName,
                              string aLastName,
                              string anAddress) {
      ID = anID;
      firstName = aFirstName;
      lastName = aLastName;   
      address = anAddress;
    }

    private object ID;
    public string EmpID {
      get { return ID.ToString();  }
    }

    private string lastName;
    public string LastName {
      get { return lastName; }
      set { lastName = value; }
    }

    private string firstName;
    public string FirstName {
      get { return firstName; }
      set { firstName = value;  }
    }
    
    public string FullName {
      get { return FirstName  + " " +  LastName; }
    }
    
    private string address;
    public string Address {
      get { return address; }
      set { address = value;  }
    }    
  }
}

Commenti

Il ObjectDataSource controllo supporta il filtro dei dati solo quando il Select metodo restituisce un DataSet oggetto o DataTable .

La sintassi utilizzata per la FilterExpression proprietà è un'espressione di tipo stringa di formato. La sintassi dell'espressione di filtro è la stessa sintassi accettata dalla Expression proprietà . Se si aggiungono parametri alla FilterParameters raccolta, è anche possibile includere segnaposto stringa di formato. Ad esempio, includere "{0}" nell'espressione per sostituire i valori dei parametri. I segnaposto vengono sostituiti in base all'indice del parametro nella FilterParameters raccolta.

È possibile includere i parametri nella FilterExpression proprietà . Se il tipo del parametro è una stringa o un tipo di carattere, racchiudere il parametro tra virgolette singole. Le virgolette non sono necessarie se il parametro è un tipo numerico.

L'insieme FilterParameters contiene i parametri valutati per i segnaposto presenti nella FilterExpression proprietà .

La FilterExpression proprietà delega alla FilterExpression proprietà dell'oggetto ObjectDataSourceView associato al ObjectDataSource controllo .

Nota

È consigliabile convalidare qualsiasi valore del parametro di filtro ricevuto dal client. Il runtime sostituisce semplicemente il valore del parametro nell'espressione di filtro e lo applica all'oggetto DataSet o DataTable restituito dal Select metodo . Se si usa la FilterExpression proprietà come misura di sicurezza per limitare il numero di elementi restituiti, è necessario convalidare i valori dei parametri prima che si verifichi il filtro.

Si applica a

Prodotto Versioni
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Vedi anche