ASP.NET - SQLDataSource - FilterExpression - 空字符串问题

时间:2010-01-19 17:37:42

标签: .net asp.net gridview filter sqldatasource

在这个测试应用程序中,我正在通过两个ControlParameters进行过滤。正如您在第一个代码块中看到的,两个参数的默认值均为%。这段代码效果很好。但是,在第二个代码块中,请注意消除了默认值。只要文本框的文本都不为空,第二个代码块就可以工作。出于某种原因,当.NET评估过滤器表达式并在表达式中插入“”时,它似乎会出错并且不会过滤我的结果。

我可以通过为每个ControlParameter设置defaultvalue =“”来验证此行为。

显然我找到了一种解决方法,但我想知道为什么在提供空字符串时FilterExpression会崩溃。

有什么想法吗?

代码区块1:

    <asp:SqlDataSource ID="Customer_Data" runat="server" 
        ConnectionString='<%$ ConnectionStrings:connectionString %>'
        SelectCommand="SELECT Station, StoreFront, CustomerID as CustID FROM vStations" 
        ProviderName="System.Data.SqlClient" 
        FilterExpression="StoreFront LIKE '%{0}%' and CustID LIKE '{1}%'" 
        EnableCaching="True"
        CacheDuration="60">

        <FilterParameters>
            <asp:ControlParameter ControlID="TextBox1" PropertyName="Text" DefaultValue="%" />
            <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" DefaultValue="%" />            
        </FilterParameters>
    </asp:SqlDataSource>

代码区块2:

    <asp:SqlDataSource ID="Customer_Data" runat="server" 
        ConnectionString='<%$ ConnectionStrings:connectionString %>'
        SelectCommand="SELECT Station, StoreFront, CustomerID as CustID FROM vStations" 
        ProviderName="System.Data.SqlClient" 
        FilterExpression="StoreFront LIKE '%{0}%' and CustID LIKE '{1}%'" 
        EnableCaching="True"
        CacheDuration="60">

        <FilterParameters>
            <asp:ControlParameter ControlID="TextBox1" PropertyName="Text"  />
            <asp:ControlParameter ControlID="TextBox2" PropertyName="Text"  />
        </FilterParameters>
    </asp:SqlDataSource>

1 个答案:

答案 0 :(得分:3)

尝试将两个ConvertEmptyStringToNull的{​​{1}}属性设置为false。默认情况下它们是<asp:ControlParameter>,而我猜测空值会丢掉它们。