ObjectDataSourceView.FilterExpression Свойство

Определение

Получает или задает выражение фильтрации, которое применяется при вызове метода бизнес-объектов или объектов данных, заданного свойством SelectMethod.

public string FilterExpression { get; set; }

Значение свойства

String

Строка, представляющая выражение фильтрации, которое применяется при извлечении данных с помощью метода бизнес-объектов, заданного свойством SelectMethod.

Исключения

Значение свойства FilterExpression задано, а метод Select(DataSourceSelectArguments) не возвращает значение DataSet.

Примеры

Этот раздел содержит два примера кода. В первом примере кода показано, как отображать отфильтрованные данные с помощью ObjectDataSource элемента управления для извлечения данных из бизнес-объекта среднего уровня и GridView элемента управления для отображения результатов. Второй пример кода содержит пример бизнес-объекта среднего уровня, который используется в первом примере кода.

В следующем примере кода показано, как отображать отфильтрованные данные с помощью ObjectDataSource элемента управления для извлечения данных из бизнес-объекта среднего уровня и GridView элемента управления для отображения результатов. Элемент ObjectDataSource управления может фильтровать данные только в том случае, если метод, который извлекает данные в виде DataSet объекта. По этой причине SelectMethod свойство определяет метод бизнес-объекта, который извлекает данные как .DataSet

Пример кода состоит из TextBoxэлемента управления, GridView ObjectDataSource элемента управления и кнопки "Отправить ". По умолчанию TextBox он заполняется именем одного из сотрудников Northwind Traders. Отображает GridView сведения о сотруднике, идентифицируемом по имени в .TextBox Чтобы получить данные о другом сотруднике TextBox, введите полное имя сотрудника и нажмите кнопку "Отправить ".

Свойство FilterExpression задает выражение, используемое для фильтрации данных, полученных свойством SelectMethod . В нем используются заполнители параметров, которые вычисляются с параметрами, содержащимися в FilterParameters коллекции. В этом примере заполнитель параметра ограничен одними кавычками, так как тип параметра является строковым типом, который может содержать пробелы. Если тип параметра является числовым или типом даты, ограничивающие кавычки не требуются.

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

В следующем примере кода представлен пример бизнес-объекта среднего уровня, который используется в предыдущем примере кода. Пример кода состоит из двух основных классов:

  • Класс EmployeeLogic , который является классом, который инкапсулирует бизнес-логику.

  • Класс NorthwindEmployee , который является классом модели, который содержит только основные функциональные возможности, необходимые для загрузки и сохранения данных из уровня данных.

Для простоты EmployeeLogic класс создает статический набор данных, а не извлекая данные из уровня данных. Это также полезно для этого примера, так как пример используется для предоставления полного имени сотрудника Northwind Traders для демонстрации фильтрации.

Для полного рабочего примера необходимо скомпилировать и использовать эти классы с предоставленными веб-формы примерами кода страницы.

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

Комментарии

Элемент ObjectDataSource управления поддерживает фильтрацию данных только в том случае, если Select метод возвращает DataSetDataViewобъект или DataTable объект.

Синтаксис, используемый для FilterExpression свойства, является выражением строкового стиля форматирования. Синтаксис выражения фильтра является тем же синтаксисом, который принимается свойством RowFilter , так как выражение фильтра применяется к RowFilter свойству DataView объекта, возвращаемого при выполнении Select метода. (Дополнительные сведения см. в разделе Expression.) При добавлении параметров в коллекцию FilterParameters можно также включить заполнители строк форматирования, например "{0}", в выражение для замены значений параметров. Заполнители заменяются в соответствии с индексом параметра в FilterParameters коллекции.

Параметры можно включить в FilterExpression. Если тип параметра является строковым или символьным типом, заключите параметр в одинарные кавычки. Кавычки не требуются, если параметр является числовым типом. Коллекция FilterParameters содержит параметры, вычисляемые для заполнителей, найденных в .FilterExpression

Значение FilterExpression свойства хранится в состоянии представления.

Важно!

Рекомендуется проверить любое значение параметра фильтра, полученное от клиента. Среда выполнения просто заменяет значение параметра в выражение фильтра и применяет его к объекту DataView , возвращаемого Select методом. Если свойство используется FilterExpression в качестве меры безопасности для ограничения количества возвращаемых элементов, необходимо проверить значения параметров перед фильтрацией.

Применяется к

См. также раздел