2010-11-10 66 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標籤

相關問題