2009-11-27 38 views
3

我有一個數據源,其中包含每行的日期項目。這些將被綁定到中繼器,並按日期排序。我想每個月呈現爲一個單獨的表,但有沒有辦法做到這一點,而不必從服務器端代碼動態添加多箇中繼器?ASP.Net每個組的Repeater報頭(即月)

理想情況下,我想以下幾點:

Examples Data: 

Row 1: Title 1, 01/12/2009 
Row 2: Title 1, 02/12/2009 
Row 1: Title 1, 01/01/2010 
Row 1: Title 1, 02/01/2009 

Required output: 

Dec 09 
------------------------------- 
Title | Date     | 
-------------------------------| 
Title1 | 01/12/2009   | 
-------------------------------| 
Title2 | 02/12/2010   | 
-------------------------------| 

Jan 10 
------------------------------- 
Title | Date     | 
-------------------------------| 
Title1 | 01/01/2010   | 
-------------------------------| 
Title2 | 02/01/2010   | 
-------------------------------| 

回答

5

您可以在ItemTemplate中使用PlaceHolder控件來包含重複的goup頁眉和頁腳。然後根據日期在OnItemDataBound或OnItemCreated事件處理程序中設置PlaceHolders的可見性。像這樣:

<ItemTemplate> 

<asp:PlaceHolder id="table_end" visible="<%# _newMonthStarting && (!_firstMonth) %>" runat="server"> 
    </table> 
</asp:PlaceHolder> 

<asp:PlaceHolder id="table_end" visible="<%# _newMonthStarting %>" runat="server"> 
    <div><%# _monthHeader</div> 
    <table> 
    <tr> 
     <th>Title</th>  
     <th>Date</th>  
    </tr> 
</asp:PlaceHolder> 
    <tr> 
    <td><!-- data --></td> 
    <td><!-- data --></td> 
    </tr> 
</ItemTemplate> 

<FooterTemplate> 
    </table> 
</FooterTemplate> 
+0

乾杯,這看起來像是最直接的實現方式。我希望有一些中繼器的機制,我不知道哪些會避免服務器端代碼,但這看起來不錯。 –

+0

根據我的經驗,我不得不使用'OnItemCreated'事件來確保''內容出現在當前項目模板的前面。使用「OnItemDataBound」事件會導致組標題內容延遲一行。 – JohnC

2

你的榜樣的數據和輸出不匹配,但我想我知道你要什麼,這裏。

我會努力得到1組數據綁定到主中繼器,這將是您的「12月09日」和「1月10日」數據。項目模板內部有另一箇中繼器,定義一次,並簡單地使用「OnDataBound」事件將數據加載到第二個中繼器。

它簡單,有效,易於管理。