我正在使用GridView,我要求用户能够使用2个控件进行过滤。只需过滤行的类型 - 有一个名为action的列,用户在下拉框中选择数据库中的一个不同值,gridview只显示action列中具有该值的行。它本身就是完美的。
但我还添加了一个文本框,用户可以在其中键入“itemID”或“parentID”的ID。即使使用之前的控件,这也能正常工作。
问题是,当文本框为空(即显示所有ID)时,下拉框不起作用。如果我选择一个值并单击“提交”,则它不会执行任何操作。现在,如果我按ID过滤,然后从下拉框中选择一个值,它就可以完美运行。
这是我的过滤器表达式和数据源的参数:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="cleared for privacy"
SelectCommand="SELECT * FROM [Audit] WHERE ([source] = @source)" FilterExpression="action like '{0}%' and (itemID like '{1}' or parentID like '{1}')">
<SelectParameters>
<asp:Parameter DefaultValue="LOGISTICS" Name="source" Type="String" />
</SelectParameters>
<FilterParameters>
<asp:ControlParameter Name="action" ControlID="DropDownList1" PropertyName="SelectedValue" />
<asp:ControlParameter Name="legorinvid" ControlID="txtFilter" PropertyName="Text" />
</FilterParameters>
</asp:SqlDataSource>
答案 0 :(得分:1)
在我的例子中,替换SQL过滤器表达式
LIKE '{1}%'
LIKE '{1}'
有所作为。
前者无效,后者无效。
答案 1 :(得分:0)
您是否尝试在控制参数上设置ConvertEmptyStringToNull="false"
字段?