2014-03-24 13 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