显示在GridView /中继器/的ListView

问题描述:

事件,我将开发,这将显示从当前的12个月内的事件列表的事件日历页面的列表。使用开始日期和月份数等通过SP获取数据库非常容易,但是我需要按月在页面中显示信息时对信息进行分组。 例如:显示在GridView /中继器/的ListView

 

================================ 
June 2009 
================================ 
Event 1 
1 June 2009 to 2 June 2009 
Event info 
-------------------------------- 
Event 2 
20 June 2009 to 21 June 2009 
Event info 
================================ 
July 2009 
================================ 
Event 3 
1 July 2009 to 2 July 2009 
Event info 
-------------------------------- 

...some more months/events here... 

================================ 
May 2010 
================================ 
Event 99 
10 May 2010 to 11 May 2010 
Event info 
-------------------------------- 

我见过的其他职位,人们谈论内中继嵌套GridView的,反之亦然,但我不能确定我将如何使用这种方法实现按月分组。

绑定你的中继的东西,列举了几个月。 将网格视图放置在中继器的项目模板中。 在转发器的ItemDataBound事件中,将gridview绑定到枚举当月所有事件的东西。 您可以从认为被绑定到中继器项目的项目RepeaterItemEventArgs.Item.DataItem对象获取的月份。

<asp:Repeater ID="Repeater1" runat="server" 
     onitemdatabound="Repeater1_ItemDataBound"> 
    <ItemTemplate> 
     <asp:GridView ID="GridView1" runat="server"> 
     </asp:GridView> 
    </ItemTemplate> 
    </asp:Repeater> 



protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    GridView gridview = e.Item.FindControl("GridView1") as GridView; 
    gridview.DataSource = ...; 
    gridview.DataBind(); 
} 

编辑:更新,以显示如何生成个月的范围内。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     DateTime currentDate = DateTime.Now; 
     DateTime startDate = new DateTime(currentDate.Year, currentDate.Month, 1); 
     List<DateTime> dateRange = new List<DateTime>(); 
     for (int i = 0; i < 12; i++) 
      dateRange.Add(startDate.AddMonths(i)); 

     Repeater1.DataSource = dateRange; 
     Repeater1.DataBind(); 
    } 
} 

基本上一个GridView是一个表,使用中继器中的表做得很好,你应该为DataBinder.Eval这样考虑这个结合:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"> 
     <ItemTemplate> 
      <table> 
       <caption><%# Eval("MONTH") %></caption> 
       <tr> 
        <td><%# Eval("EVENT_NAME") %></td> 
       </tr> 
       <tr> 
        <td><%# Eval("DATE_BEGIN") %> to <%# Eval("DATE_END") %></td> 
       </tr> 
       <tr> 
        <td><%# Eval("EVENT_INFO") %></td> 
       </tr> 
      </table> 
     </ItemTemplate> 
    </asp:Repeater> 

东北角,这将创建一个表中的每个事件。您还可以在中启动表格并在FooterTemplate中完成表格。

现在,所有你需要的是相应地返回数据。

祝你好运。

+0

这并不按月满足需要群体性事件有关系吗?即如果6月份有2次事件,我不想多次显示“2009年6月”的标题。 – 2009-06-04 14:47:33