GridView - 在空数据源上显示标题

Jos*_*son 74 asp.net gridview header

在C#中,即使数据源为空,我仍然会显示gridview的标题.

我不是自动生成列,因为它们都是预定义的.

目前我正在做的是以下内容.

从存储过程中获取DataTable,然后设置gridview的DataSource,然后调用DataBind().

当我有数据时,这工作正常,但是当没有返回任何行时,我只得到一个空白点,网格应该是.

编辑:感谢所有.NET 4+属性.我在.NET 3.5天里问过这个问题.现在这更容易了.:)

zac*_*ydl 129

ASP.Net 4.0添加了boolean ShowHeaderWhenEmpty属性.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.showheaderwhenempty.aspx


<asp:GridView runat="server" ID="GridView1" ShowHeaderWhenEmpty="true" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField HeaderText="First Name" DataField="FirstName" />
        <asp:BoundField HeaderText="Last Name" DataField="LastName" />
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

注意:除非使用null以外的其他内容调用DataBind(),否则不会显示标题.

GridView1.DataSource = New List(Of String)
GridView1.DataBind()
Run Code Online (Sandbox Code Playgroud)

  • 确保至少对数据绑定,ShowHeadersWhenEmpty至少需要一个空列表数据绑定. (14认同)
  • @Tenerezza提到的内容很重要,请在答案中加入.这样可以节省一些时间. (2认同)

Jos*_*son 34

发布后我确实提出了一种有效的方法.但是,我觉得这不是解决这个问题的最佳方法.有关更好的建议吗?

//Check to see if we get rows back, if we do just bind.

if (dtFunding.Rows.Count != 0)
{
    grdFunding.DataSource = dtFunding;
    grdFunding.DataBind();
}
else
{
  //Other wise add a emtpy "New Row" to the datatable and then hide it after binding.

     dtFunding.Rows.Add(dtFunding.NewRow());
     grdFunding.DataSource = dtFunding;
     grdFunding.DataBind();
     grdFunding.Rows[0].Visible = false;
}
Run Code Online (Sandbox Code Playgroud)


Str*_*ior 5

我刚刚解决了这个问题,这些解决方案都不适用于我.我无法使用该EmptyDataTemplate属性,因为我是GridView使用自定义字段动态创建的,这些字段在标题中提供过滤器.我无法使用发布的almny示例,因为我使用ObjectDataSource的是s而不是DataSetDataTable.但是,我发现这个答案发布在另一个StackOverflow问题上,该问题链接到这个优雅的解决方案,我能够为我的特定情况工作.它涉及重写CreateChildControls的方法GridView创造条件,已创建了有过实际数据相同的标题行.我认为值得发布在这里,其他人可能会在类似的修复程序中找到它.