C#显示完整数据表而不是仅显示搜索输入

时间:2011-11-03 02:38:03

标签: c# sql-server visual-studio sql-server-2005 visual-studio-2005

我使用的是VS2005 C#和SQL Server 2005。

目前,我可以使用来自表的sql语句SELECT *中的数据源来显示数据。

现在我已经在我的桌子上实现了一个搜索功能,它将显示用户输入的搜索结果。

但是,我无法设置数据表的默认显示,以便在默认情况下或在搜索文本框为空时列出所有数据。

我正在遵循本指南:http://www.asp.net/data-access/tutorials/displaying-data-with-the-objectdatasource-cs我基本上停留在最后一部分,他为他的数据表listng添加了if-else语句,我不知道在哪里改变我的:(

以下是代码和屏幕截图:

RPList.aspx.cs:

<%@ Page Language="C#" MasterPageFile="~/MainPage.master" AutoEventWireup="true" CodeFile="RPList.aspx.cs" Inherits="SimpleDisplay" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
    Role: <asp:TextBox ID="RPbyRoleTB" runat="server"></asp:TextBox>
    <asp:Button ID="RPbyRoleBtn" runat="server" Text="Show Roles & Processes" />
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:<connection> %>" SelectCommand="SELECT * FROM [RolesProcess] WHERE ([Role] = @Role)">
        <SelectParameters>
            <asp:ControlParameter ControlID="RPbyRoleTB" Name="Role" PropertyName="Text" Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>

<script language="javascript" type="text/javascript">
// <!CDATA[

// ]]>
</script>

    <asp:GridView ID="GridView1" runat="server" AllowSorting="True" DataSourceID="SqlDataSource1">
    </asp:GridView>
</asp:Content>

enter image description here enter image description here enter image description here

我需要做什么才能在我的页面加载或搜索框为空时,默认显示完整的数据表?


正如Politia所建议的,我已经尝试将我的查询更改为SELECT [columns] FROM RolesProcess WHERE(Role = @Role)OR(LEN(@Role)= 0),但是,正如我所评论的,它没有似乎像我想的那样顺利工作。以下是截图。

enter image description here enter image description here


更改sql查询后的页面代码:

<%@ Page Language="C#" MasterPageFile="~/MainPage.master" AutoEventWireup="true" CodeFile="RPList.aspx.cs" Inherits="SimpleDisplay" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SODConnectionString %>" SelectCommand="SELECT [columns] FROM RolesProcess WHERE (Role = @Role) OR (LEN(@Role) = 0) OR (@Role IS NULL)">
        <SelectParameters>
            <asp:ControlParameter ControlID="TextBox1" Name="Role" PropertyName="Text" Type="String" DefaultValue="" />
        </SelectParameters>
    </asp:SqlDataSource>
    <asp:TextBox ID="TextBox1"  runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" Text="Button" />
<script language="javascript" type="text/javascript">
// <!CDATA[

// ]]>
</script>

    <asp:GridView ID="GridView1" runat="server" AllowSorting="True" DataSourceID="SqlDataSource1">
    </asp:GridView>
</asp:Content>

查询在配置期间全部有效。现在,当我加载页面时,表格不会出现,即使我搜索“空白”值,表格也不会显示任何数据。

加载时页面的图像,即使我点击按钮,也没有显示任何内容。 enter image description here

1 个答案:

答案 0 :(得分:1)

这就是为什么我主要推荐使用ObjectDataSource和你自己的自定义适配器,它可以包含这个逻辑并且更容易测试。

尽管如此,使用此方法,您必须在查询中反映您的情绪。您可以将参数的默认值设置为%like:

<asp:ControlParameter ControlID="RPbyRoleTB" Name="Role" PropertyName="Text" DefaultValue="%" Type="String" />

或更新您的查询以反映空字符串和/或空值。

SELECT *
FROM table
WHERE Role = @role
OR LEN(@role) = 0