我将开发一个事件日历页面,它将显示当前日期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,反之亦然,但我不确定如何使用这种方法按月完成分组。
答案 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
中完成。
现在您只需要相应地返回数据。
祝你好运。