1

以下内容正常工作,并根据在我的文本框中输入的文本过滤我的网格视图。

当没有文本输入到我的文本框中时,我没有得到任何结果,也无法理解为什么。

我的问题

当文本框中没有输入文本时,如何让网格视图显示所有表格行?

微软SQL

@Search nvarchar(50)

SELECT  [table].[column]
FROM    [table]
WHERE   [table].[column] LIKE '%' + @Search + '%' OR COALESCE(@Search,'') = ''

标记

<asp:TextBox ID="txtSearch" RunAt="Server" Text=""/>

<asp:SqlDataSource ID="sqlSearch" RunAt="Server" SelectCommand="spSearch" SelectCommandType="StoredProcedure">
  <SelectParameters>
    <asp:ControlParameter Type="String" Name="Search" ControlID="txtSearch" PropertyName="Text"/>
  </SelectParameters> 
</asp:SqlDataSource>

网格视图的结果

我已经尝试并测试了在这里找到的许多方法,但是当字符串为空时,所有方法都返回 0 结果。

4

2 回答 2

2

查看CancelSelectOnnullParameter-默认情况下,当Select参数的值为null时,这会防止select命令被调用。将其设置为 后false,即使文本框为空,仍会调用 select SP,例如

<asp:SqlDataSource ID="sqlSearch" RunAt="Server" 
    CancelSelectOnNullParameter="false" ...>
</asp:SqlDataSource>

SqlDataSource 在这里对我来说似乎有点误导,因为 TextBox.Text 在它为空而不是 null 时返回 String.Empty,因此我不希望为 TextBox 处理 CancelSelectOnNullParameter,但似乎我们必须这样做。

于 2013-05-15T13:38:51.733 回答
0

您可能有一个 if 块来检查 @search 参数是否为空,而不是合并,如下所示。

if @search is not empty 
  SELECT  [table].[column]
  FROM    [table]
  WHERE   [table].[column] LIKE '%' + @Search + '%' OR COALESCE(@Search,'') = ''
else
  SELECT  [table].[column]
  FROM    [table]
  WHERE   [table].[column]
于 2013-05-15T12:15:59.170 回答