2009-06-02 5 views
0

Ich werde eine Ereigniskalenderseite entwickeln, die eine Liste von Ereignissen für 12 Monate ab dem aktuellen Datum anzeigt (es wird nur gelesen). Es ist einfach, die Daten aus der DB mit einem SP zu holen, der das Anfangsdatum und die Anzahl der Monate usw. übergibt, aber ich muss die Informationen nach Monat gruppieren, wenn sie auf der Seite angezeigt werden. z.B. :Liste der Ereignisse in einem GridView/Repeater/ListView anzeigen

 

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

Ich habe andere Beiträge gesehen, wo die Leute über Verschachtelung innerhalb Gridviews Wiederholer und umgekehrt sprechen, aber sind nicht sicher, wie ich die Gruppierung für Monat mit dieser Methode erreichen würde.

Antwort

2

Binden Sie Ihren Repeater an etwas, das die Monate aufzählt. Legen Sie eine Rasteransicht in die Objektvorlage des Repeaters. Im ItemDataBound-Ereignis des Repeaters binden Sie die Gridview an etwas, das alle Ereignisse für diesen Monat aufzählt. Sie können den Monat vom RepeaterItemEventArgs.Item.DataItem-Objekt abrufen, das das Element enthält, das an das Repeaterelement gebunden ist.

<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: Aktualisiert zu zeigen, wie der Bereich von Monaten erzeugt wird.

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

Im Grunde ein Gridview ist eine Tabelle, können mit Hilfe von Tabellen innerhalb Wiederholer ganz gut, Sie dies in Verbindung mit DataBinder.Eval wie in Betracht ziehen sollten: für jedes Ereignis

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

diese Obliviously würde eine Tabelle erstellen. Sie könnten auch den Tisch im starten und im FooterTemplate beenden.

Jetzt müssen Sie nur noch die Daten entsprechend zurückgeben.

Viel Glück.

+0

Dies erfüllt jedoch nicht die Notwendigkeit, Ereignisse nach Monaten zu gruppieren? Wenn es im Juni zwei Veranstaltungen gibt, möchte ich die Überschrift "Juni 2009" nicht mehr als einmal anzeigen. –

+0

Nested Repeater würde durch die Lösung. Grundsätzlich ein Repeater im ItemTemplate des ersten, der den OnItemDataBound des ersten Repeaters übersteuert. See: http://www.dotnetspider.com/resources/744-Using-Nested-Repeater-Controls.aspx http://www.codeproject.com/KB/aspnet/AspNetNestedRepeaters.aspx http: // www.oidnish.com/articles/ShowArticle.aspx?code=AspNetNestedRepeaters In Ordnung, beachten Sie die CreateChildView-Methode. Viel Glück! – maxbeaudoin

Verwandte Themen