Показать список событий в GridView / Repeater / ListView - PullRequest
0 голосов
/ 02 июня 2009

Я собираюсь разработать страницу календаря событий, которая будет отображать список событий за 12 месяцев с текущей даты (он будет доступен только для чтения). Достаточно просто получить данные из БД, в которых SP указывает дату начала, количество месяцев и т. Д., Но мне нужно сгруппировать информацию по месяцам, когда она отображается на странице. например :


================================
<b>June 2009</b>
================================
Event 1
1 June 2009 to 2 June 2009
<i>Event info</i>
--------------------------------
Event 2
20 June 2009 to 21 June 2009
<i>Event info</i>
================================
<b>July 2009</b>
================================
Event 3
1 July 2009 to 2 July 2009
<i>Event info</i>
--------------------------------

<i>...some more months/events here...</i>

================================
<b>May 2010</b>
================================
Event 99
10 May 2010 to 11 May 2010
<i>Event info</i>
--------------------------------

Я видел другие посты, где люди говорят о вложении GridViews в Repeaters и наоборот, но не уверен, как бы я смог добиться группировки по месяцам, используя этот метод.

Ответы [ 2 ]

2 голосов
/ 02 июня 2009

Свяжите свой ретранслятор с тем, что перечисляет месяцы. Поместите вид сетки в шаблон элемента повторителя. В событии ItemDataBound повторителя связывают вид сетки с чем-то, что перечисляет все события за этот месяц. Вы можете получить месяц из объекта 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();
    }
}
0 голосов
/ 02 июня 2009

В основном 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.

Теперь все, что вам нужно, это вернуть данные соответственно.

Удачи.

...