显示在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
中完成表格。
现在,所有你需要的是相应地返回数据。
祝你好运。
这并不按月满足需要群体性事件有关系吗?即如果6月份有2次事件,我不想多次显示“2009年6月”的标题。 – 2009-06-04 14:47:33