0

現在の日付から12か月間のイベントのリストを表示するイベントカレンダーページを開発します(読み取り専用になります)。SPが開始日や月数などを渡してDBからデータを取得するのは簡単ですが、ページに表示される情報を月ごとにグループ化する必要があります。例:

================================
2009年6月
================================
イベント1
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

リピーターを月を列挙するものにバインドします。リピーターのアイテムテンプレートにグリッドビューを配置します。リピーターの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();
    }
}
于 2009-06-02T11:08:51.080 に答える
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ます。

これで、必要なのはそれに応じてデータを返すことだけです。

幸運を。

于 2009-06-02T19:47:39.610 に答える