0

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

=================================
2009 年 6 月
=================================
活动一
2009 年 6 月 1 日至 2009 年 6 月 2 日
活动信息
--------------------------------
活动 2
2009 年 6 月 20 日至 2009 年 6 月 21 日
活动信息
=================================
2009 年 7 月
=================================
活动 3
2009 年 7 月 1 日至 2009 年 7 月 2 日
活动信息
--------------------------------

...这里还有几个月/活动...

=================================
2010 年 5 月
=================================
活动 99
2010 年 5 月 10 日至 2010 年 5 月 11 日
活动信息
--------------------------------

我看过其他帖子,人们谈论在中继器中嵌套 GridView,反之亦然,但我不确定如何使用这种方法实现按月分组。

4

2 回答 2

2

Bind your repeater to something that enumerates the months. Put a grid view in the item template of the repeater. In the ItemDataBound event of the repeater bind the gridview to something that enumerates all the events for that month. You can get the month from the RepeaterItemEventArgs.Item.DataItem object that holds the item that is being bound to the repeater item.

    <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();
}

EDIT: Updated to show how the range of months is generated.

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();
    }
}
于 2009-06-02T11:08:51.080 回答
0

基本上一个 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>

不知不觉这将为每个事件创建一个表。您也可以在 中启动表格并在 中<HeaderTemplate>完成它FooterTemplate

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

祝你好运。

于 2009-06-02T19:47:39.610 回答