显示GridView / Repeater / ListView中的事件列表

时间:2009-06-02 10:49:57

标签: asp.net gridview listview repeater

我将开发一个事件日历页面,它将显示当前日期12个月的事件列表(它将是只读的)。使用SP传递开始日期和月数等来从数据库中获取数据非常容易,但我需要在页面中显示信息时按月分组。 例如:


================================
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
--------------------------------

我见过其他帖子,人们谈论在Repeater中嵌入GridViews,反之亦然,但我不确定如何使用这种方法按月完成分组。

2 个答案:

答案 0 :(得分:2)

将你的转发器绑定到枚举月份的东西上。 将网格视图放在转发器的项模板中。 在转发器的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();
    }
}

答案 1 :(得分:0)

基本上GridView是一个表,使用Repeater中的表做得很好,你应该结合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>

不经意的是,这将为每个事件创建一个表。您也可以在<HeaderTemplate>中启动该表,然后在FooterTemplate中完成。

现在您只需要相应地返回数据。

祝你好运。