Практическое руководство. Включение фильтрации в элементе управления SqlDataSource

Visual Studio 2010

Обновлен: Ноябрь 2007

Элемент управления SqlDataSource предоставляет возможность фильтровать (сортировать или выбирать) результаты запроса без повторного выполнения этого запроса. Добавив фильтрацию в элемент управления SqlDataSource, можно изменять доступность данных с помощью элемента управления SqlDataSource после выполнения запроса, без возврата в базу данных.

В этом разделе показывается способ включения фильтрации для элемента управления SqlDataSource. Элементы управления с привязкой к данным, привязанные к элементу управления SqlDataSource, например элемент управления GridView, будут показывать только отфильтрованные результаты.

Чтобы воспользоваться фильтрацией, необходимо задать в элементе управления SqlDataSource возвращение информации в набор данных и кэширование результатов. Затем можно указать фильтрующее выражение, которое применяется как свойство RowFilter к объекту DataView, который является базовым для элемента управления SqlDataSource.

Фильтр может включать параметры, основывающиеся на значениях другого элемента управления, файлах Cookies, переменных сеанса или строках запроса. Например, если элемент управления DropDownList содержит названия городов, то можно использовать город, выбранный в элементе управления DropDownList, в качестве параметра фильтрации.

59bfya48.alert_note(ru-ru,VS.100).gifПримечание.

Создание фильтрующего выражения с параметрами — это не то же самое, что создание параметризованного свойства SelectCommand и задание значений свойства SelectParameters. Параметризованный фильтр применяет различные представления данных к кэшированному набору данных. Параметризованная команда выбора выполняет запрос в отношении источника данных.

Включение фильтрации в элементе управления SqlDataSource

  1. Создайте элемент управления SqlDataSource с правильной строкой подключения и оператором SELECT. Дополнительные сведения см. в разделе Практическое руководство. Подключение к базе данных SQL Server с использованием элемента управления SqlDataSource.

  2. Установите для свойства DataSourceMode элемента управления SqlDataSource значение DataSet.

  3. Установите свойство EnableCaching элемента управления SqlDataSource в значение «true».

    Для поддержки фильтрации данные, извлекаемые запросом, должны кэшироваться.

  4. Установите в качестве значения свойства CacheDuration элемента управления SqlDataSource количество секунд для кэширования данных. Выбор количества секунд зависит от приложения.

  5. Установите в качестве значения свойства FilterExpression этого элемента управления выражение, задающее возвращаемые данные, как в следующем примере:

    country = 'Germany'
    

    Дополнительные сведения о синтаксисе фильтрующего выражения см. в описании свойства RowFilter.

    Элемент управления SqlDataSource с включенной фильтрацией будет выглядеть следующим образом:

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

    При выполнении команды SELECT в базе данных элементы управления, привязанные к данному элементу управления SqlDataSource, будут отображать только отфильтрованные результаты.

Часто бывает необходимо фильтровать результаты запроса в зависимости от значений, становящихся известными только во время выполнения. Можно создавать фильтрующие выражения с местозаполнителями параметров, а затем определять параметры фильтрации для заполнения этих местозаполнителей. Параметры фильтрации могут получать значения из элементов управления, файлов Cookie, переменных сеанса, свойств профиля или из значения свойства Form.

Фильтрация в элементе управления SqlDataSource с помощью параметров

  1. Установите в качестве значения свойства FilterExpression элемента управления SqlDataSource выражение, в котором имеется местозаполнитель для значения параметра фильтрации. Местозаполнитель использует синтаксис {n}, где n указывает позицию в последовательности этого параметра.

    В следующем примере показаны параметризованные выражения фильтрации. Во втором примере в выражение включено несколько местозаполнителей параметров.

    FilterExpression="category = '{0}'"
    FilterExpression="country = '{0}' AND city = '{1}'"
    
  2. Создайте элемент FilterParameters как дочерний от элемента SqlDataSource. Для каждого местозаполнителя параметра фильтрации добавьте элемент одного из следующих типов:

    В следующем примере показано, как создать параметр фильтрации, получающий свое значение из элемента управления DropDownList:

    <FilterParameters>
      <asp:ControlParameter
       Name="CategoryList" ControlID="DropDownList1" 
       PropertyValue="SelectedValue" />
    </FilterParameters>
    
    59bfya48.alert_note(ru-ru,VS.100).gifПримечание.

    Для этого параметра необходимо свойство Name. Тем не менее соответствие параметров и местозаполнителей устанавливается согласно позиции в последовательности, а не имени.

    В следующем примере показано, как элемент управления SqlDataSource заполняется с помощью параметризованного фильтра:

    <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>
    
Показ: