【问题标题】:GridView is empty网格视图为空
【发布时间】:2011-04-08 14:18:23
【问题描述】:

我有一个带有 GridView 和 SqlDataSource 的页面(它有一个 MasterPage)。如果我在标记中设置 SelectCommand,则 GridView 显示正常。但是,如果我动态生成相同的 SelectCommand,则 GridView 为空。而且我知道查询已执行。 可能是什么原因? 谢谢。

<asp:SqlDataSource ID="UserSqlDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:BookList %>" DataSourceMode="DataSet" 
    ProviderName="<%$ ConnectionStrings:BookList.ProviderName %>" >
</asp:SqlDataSource>  

        <asp:GridView ID="grdUsers" runat="server" AllowPaging="True" ShowHeader="false" ShowFooter="true" 
            AutoGenerateColumns="false"
            Width="1480px" Height="100%" PageSize="50" DataSourceID="UserSqlDataSource" DataKeyNames="ID">
                <AlternatingRowStyle CssClass="alternatingrowstyle" />
                <Columns>
                     <asp:TemplateField HeaderText="User Name" SortExpression="Name">
                        <ItemTemplate>
                            <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Last Name" SortExpression="LastName">
                        <ItemTemplate>
                            <asp:Label ID="lblLastName" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>                        
                    <asp:TemplateField HeaderText="First Name" SortExpression="FirstName">
                        <ItemTemplate>
                            <asp:Label ID="lblFirstName" runat="server" Text='<%# Eval("FirstName") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Email" SortExpression="Email">
                        <ItemTemplate>
                            <asp:Label ID="lblEmail" runat="server" Text='<%# Eval("Email") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>                        

                </Columns>

            </asp:GridView>

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindUsers();
    }
}

protected void BindUsers()
{
    string strSelectClause = 
        @"SELECT ID, Name, FirstName, LastName, EMail, 
      FROM User WHERE Name NOT IN ('*All', 'Admin', 'TPS') ";

    string strQuery = strSelectClause + GenerateWhereClause() + " ORDER BY Name;";

    SqlDataSource UserSqlDataSource = GetControl(this, "UserSqlDataSource") as SqlDataSource;
    UserSqlDataSource.SelectCommand = strQuery;
    grdUsers.DataBind();
}

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    用户是保留关键字,你试过吗:

    SELECT ID, Name, FirstName, LastName, EMail, 
          FROM [User] WHERE Name NOT IN ('*All', 'Admin', 'TPS') ";
    

    【讨论】:

    • 不,这不是问题。正如我所说,如果在标记中设置了 GridView,它就会填充这个非常 SelectCommand。我成功地在 QueryBrowser 中尝试了查询。无论如何,我尝试进行此更改,但没有帮助。
    【解决方案2】:

    来自the MSDN documentation for the SqlDataSource control

    注意
    默认情况下,执行 Select 命令时,如果其中一个参数为 null,则不会返回任何数据,也不会抛出异常。您可以通过将 CancelSelectOnNullParameter 属性设置为 false 来更改此行为。

    【讨论】:

    • 谢谢乔尔。不幸的是,这也没有帮助:(
    • 将近 4 年后,这对我有所帮助。我有一个存储过程,它的 URL 可能没有所有参数。显然 CancelSelectOnNullParameter 属性妨碍了。
    【解决方案3】:

    当我从 GridView 的标记中删除 DataSourceID 并添加时,它起作用了 grdUsers.DataSource = UserSqlDataSource;在后面的代码中。 我想知道为什么它不像以前那样工作......

    【讨论】:

    • 标记为正确答案或编辑问题怎么样?
    • 点击答案旁边的勾号。 (在答案的分数下)您应该始终将答案标记为已接受(假设有一个)。
    【解决方案4】:

    也许您在页面生命周期中将 SelectCommand 设置得太晚了?设置 SelectCommand 后是否调用 grdUsers.DataBind()?

    【讨论】:

    • 是的,它在我在问题中提供的代码中。如果它在 Page_Load() 中,我不知道怎么会迟到。
    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2017-02-23
    • 2018-05-18
    • 2023-04-08
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多