2014-03-24 11 views
0

我为一个相当大的网站铺设模板网页,许多页面将使用GridView控件。当然,我会将EVENTUALLY绑定到数据源。但现在,当我布置模板页面时,我只想要一个空网格来显示 - 我只需要看到列标题和一个空行。asp:Gridview的烦恼如何显示网格

不幸的是,这种控制似乎想保持完全不可见,除非它实际上绑定到数据源。再次,这将最终发生。但是现在,我正在尝试为最终用户的审批铺设大量页面,我只需要在应该出现的页面上显示frickin的空网格。事实上,我们将要从中提取数据的数据库正在开发中并且可能会发生变化,所以现在绑定到数据是恕我直言,这是浪费时间。我只想模板一堆页面!

当我搜索这个主题处理已经绑定到数据源的网格时,所有的StackOverflow命中 - 在这种情况下没有任何帮助。我正在尝试下面的内容。我试图甚至有可能通过这种控制?

<asp:GridView ID="grdReportList" runat="server" AllowPaging="True" 
     AllowSorting="True" AutoGenerateColumns="False"> 
     <Columns> 
      <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" 
       SortExpression="Name" /> 
      <asp:BoundField DataField="Description" HeaderText="Description" 
       SortExpression="Description" /> 
      <asp:BoundField DataField="Type" HeaderText="Type" 
       SortExpression="Type" /> 
      <asp:BoundField DataField="Inactive" HeaderText="Inactive" 
       SortExpression="Inactive" /> 
     </Columns> 
    </asp:GridView> 

回答

0

这应有助于:GridView.EmptyDataTemplate

编辑:只注意到这些GridView控件属性未设置

ShowHeader=True (this is default) 
ShowFooter=True (set if you want footer) 
ShowHeaderWhenEmpty=True (Ahaaaaa!) 

编辑:绑定,头部只有GridView的例子:

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" ShowFooter="True" ShowHeaderWhenEmpty="True" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:BoundField DataField="Header A" HeaderText="Header A" ReadOnly="True" SortExpression="Header A"></asp:BoundField> 
     <asp:BoundField DataField="Header B" HeaderText="Header B" ReadOnly="True" SortExpression="Header B" DataFormatString="{0:F2}"></asp:BoundField> 
     <asp:BoundField DataField="Header C" HeaderText="Header C" ReadOnly="True" SortExpression="Header C"></asp:BoundField> 
     <asp:BoundField DataField="Header D" HeaderText="Header D" ReadOnly="True" SortExpression="Header D" DataFormatString="{0:MM/dd/yyyy}"></asp:BoundField> 
    </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="Select null as [Header A], 1234 as [Header B],'C' as [Header C], cast('1/1/2014' as datetime) as [Header D]" ConnectionString='<%$ ConnectionStrings:CMSConnectionString %>'> 
</asp:SqlDataSource> 

Gridview需要一个数据源,即使该数据源指向什么也没有。上面有一个到有效数据库的连接字符串,但它严格地从select语句中提取数据(注意缺少FROM子句),它提供了标题文本和一行假数据。如你所见,我返回一些类型的值并在绑定的字段控件中格式化。但是,请注意,如果刷新网格并启用了AutoGenerateColumns,则Gridview将替换这些字段,因此将失去所有格式。因此,一旦你的网格填充了标题和数据,只要你喜欢,在格式化之前在gridview上下文菜单中禁用AutoGenerateColumns选项。

根据需要进行修改以填充网格。清洗,冲洗,重复所有网格。

这可能很容易成为您的App_Data目录中的本地数据源。这可能是你想要做的快速原型设计所需要的。

+0

感谢您的回复。这是一个很好的权宜之计解决方案。它可以让我显示SOMETHING,但图像或文本在这里不会有帮助。我需要显示一个空的网格,其中包含所有正确的列标题。这些是用于最终用户批准的模板,他们将希望在网页上看到网格。我以前在WinForms应用程序中使用过相应的控件,它绝对不会以这种方式运行,所以我很困惑这种行为。为什么只是因为没有数据而保持INVISIBLE? – markaaronky

+0

也许作为带宽优化?我假设你有ShowHeader,ShowFooter和ShowHeaderWhenEmpty控件属性设置为true? – fnostro

+0

fnostro,你的阿哈!这一刻似乎是肯定的答案,但没有什么喜悦:-(我本来没有将ShowHeaderWhenEmpty设置为true,所以我这样做了,并且是积极的,它会起作用,但是没有,另外增加了其他两个是安全的(永远不知道什么时候微软可能会决定改变默认值),我想我将不得不放弃GridView,转而使用其他一些网格控件。我讨厌这样做,但考虑到我不得不为这个项目设计模板的页数,我真的需要现在显示带有正确列名的空网格,这就是全部。绑定数据不是一个选项 – markaaronky