2010-11-10 28 views
0

我在页面中有一个SqlDataSource,根据1或2个查询字符串和/或过滤器文本框,它将显示不同的结果。SqlDataSource问题上有多个可能的FilterExpression

这是我的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个查询字符串并且已输入到文本框中,则它们可以一次处于“活动状态”,或者它们可以不存在,当然也可以不包含任何内容。

回答

0

过滤器旨在以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 '%'[email protected]+'%')"> 
    <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标签

相关问题