GridView为空

时间:2011-04-08 14:18:23

标签: c# asp.net

我有一个带有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();
}

4 个答案:

答案 0 :(得分:1)

用户是保留关键字,您尝试过:

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

答案 1 :(得分:1)

来自the MSDN documentation for the SqlDataSource control

  

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

也许你在页面生命周期中设置SelectCommand太晚了?在设置SelectCommand后调用grdUsers.DataBind()吗?