Множество возможных выражений FilterExpression для SqlDataSource - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть SqlDataSource на странице, которая будет отображать разные результаты в зависимости от 1 или 2 строк запроса и / или текстового поля фильтра.

Вот мой SqlDataSource и фильтры:

  <asp:SqlDataSource ID="sdsAudits" runat="server" 
        ConnectionString="<%$ ConnectionStrings:constring %>" 
        SelectCommand="SELECT * FROM [Audit]" FilterExpression="source = {0} AND customer = {1} AND (itemID like '%{2}%' OR parentID like '%{2}%')">
        <FilterParameters>
        <asp:QueryStringParameter Name="source" QueryStringField="source" />
        <asp:QueryStringParameter Name="customer" QueryStringField="customer" />
        <asp:ControlParameter Name="txtFilter" ControlID="txtFilter" PropertyName="Text" />
        </FilterParameters>

Но по какой-то причине фильтрация для любого из 3 возможных фильтров не работает. Я попытался удалить 2 фильтра строки запроса и оставить только фильтр текстового поля, и тогда он работал нормально - так что я предполагаю, что мое выражение фильтра неверно?

Есть идеи, ребята? Помните, что все 3 фильтра могут быть «активными» одновременно, если у них есть 2 строки запроса и они введены в текстовое поле, или они могут вообще не быть, или, конечно, между ними.

1 Ответ

0 голосов
/ 10 ноября 2010

Фильтр предназначен для работы в режиме DataSet - данные извлекаются в память, а затем фильтруются. Не очень эффективно - намного лучше использовать параметры в самой команде выбора, например:

<asp:SqlDataSource ID="sdsAudits" runat="server" 
    ConnectionString="<%$ ConnectionStrings:constring %>" 
    SelectCommand="SELECT * FROM [Audit] where source = @source AND customer = @customer AND (itemID like '%' + @txtFilter + '%' OR parentID like '%'+@txtFilter+'%')">
    <SelectParameters>
      <asp:QueryStringParameter Name="source" QueryStringField="source" />
      <asp:QueryStringParameter Name="customer" QueryStringField="customer" />
      <asp:ControlParameter Name="txtFilter" ControlID="txtFilter" PropertyName="Text" />
    </SelectParameters>
</asp:SqlDataSource>

или просто добавьте

  DataSourceMode="DataSet"

в ваш тег SqlDataSource

...