【问题标题】:ShowHeaderWhenEmpty, EmptyDataText, and EmptyDataTemplate not working in gridviewShowHeaderWhenEmpty、EmptyDataText 和 EmptyDataTemplate 在 gridview 中不起作用
【发布时间】:2016-06-14 21:19:33
【问题描述】:

Gridview 在返回数据时会正确填充,但是 ShowHeaderWhenEmptyEmptyDataTextEmptyDataTemplate 都不起作用,即使没有返回记录也是如此。我已经阅读了有关 CSSFriendly 的其他解决方案以及 CSSFriendly 禁用控件的一些冲突,但这似乎并没有解决问题。

这是我的ASP gridview

<asp:GridView runat="server" class="table table-striped table-hover" ID="gvPendingRequestsEP" GridLines="None" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="submitted_by" HeaderText="submitted by" />
        <asp:BoundField DataField="date_submitted" HeaderText="date submitted" />
        <asp:BoundField DataField="card_number" HeaderText="Card Number" />
        <asp:BoundField DataField="beginning_date" HeaderText="Date" />
        <asp:BoundField DataField="beginning_time" HeaderText="time" />
        <asp:BoundField DataField="total_time" HeaderText="hours" />
        <asp:BoundField DataField="in_place_rank" HeaderText="Time/ Pay" />
        <asp:BoundField DataField="status_id" HeaderText="Status" />
        <asp:TemplateField>
            <HeaderTemplate>
                edit
            </HeaderTemplate>
            <ItemTemplate>
                <a href="EPRequest.aspx?id=<%#Eval("card_number") %>">edit</a>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

这是我的代码隐藏

protected void PopulateCardManagers(object sender, EventArgs e)
{
    string connstring = ConfigurationManager.ConnectionStrings["TimeHubDBCS"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(connstring))
        {
            SqlCommand cmdFillEP = new SqlCommand();
            cmdFillEP = new SqlCommand("spSelectPendingRequestsEP", conn);
            cmdFillEP.CommandType = System.Data.CommandType.StoredProcedure;
            cmdFillEP.Parameters.Add("@UserId", SqlDbType.VarChar).Value = lblUserLoggedIn.Text;

            DataSet dsRequests = new DataSet();
            DataTable dtEPCards;

            dsRequests.Tables.Add("dtEPCards");
            dtEPCards = dsRequests.Tables[0];

            SqlDataAdapter daPendingRequestsEP = new SqlDataAdapter();
            daPendingRequestsEP.SelectCommand = cmdFillEP;

            conn.Open();

            try
            {
                daPendingRequestsEP.Fill(dtEPCards);

                gvPendingRequestsEP.DataSource = dtEPCards;
                gvPendingRequestsEP.DataBind();
            }
            catch (Exception ex)
            {
                PopupTitle = "error populating EP Card Manager: ";
                message = ex.Message;
                ClientScript.RegisterStartupScript(this.GetType(), "Popup", "ShowPopup('" + message + ex.Message + "');", true);
            }

        }
}

提前致谢

【问题讨论】:

  • 您确定没有发生异常吗?尝试在您的异常块中执行 Response.Write,因为它可能会抑制空模板的显示。
  • 当您设置 ShowHeaderWhenEmpty 并且没有显示任何内容时,即使您的代码将您的网格绑定到数据源,这可能意味着您的数据源为空。您可以通过故意将空数据表加载到网格中来避免这种情况
  • @CosmosBanda,看起来这就是问题所在。我添加了一个 if/else 块来测试数据表是否为空,如果是,则将一个空数据表绑定到网格视图。如果您想在下面添加答案,我会将答案归功于您,否则我将自己写并回答。谢谢!

标签: c# asp.net gridview


【解决方案1】:

要使ShowHeaderWhenEmpty 工作,您必须向gridview 控件提供非空数据源。因此,如果您当前的代码提供 null,解决此问题的一种方法是创建一个空的 datatable 并将其绑定到您的 gridview

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多