0

完了日順に並べられたタスクのリストを作成するリピーターがあります。

           <asp:Repeater ID="rptCompletedProjectTasks" OnItemDataBound="rptCompletedProjectTasks_ItemDataBound" runat="server">
               <HeaderTemplate>
                   <h3>Completed Tasks</h3> 
                    <table class="projTaskTable">
                        <tr>
                            <th style="width:100px">W/C</th>
                            <th style="width:450px">Description</th>
                            <th style="width:100px">Due</th>
                            <th style="width:100px">Completed</th>
                            <th style="width:50px">Var</th>
                        </tr>
                    </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td><asp:Label ID="lblWeek" runat="server" Text=''></asp:Label></td>
                        <td><%# Eval("description") %></td>
                        <td><%# Eval("deadline", "{0:d MMM yy}") %></td>
                        <td><asp:Label ID="lblCompleted" runat="server" Text='<%# Eval("completedDate", "{0:d MMM yy}") %>'></asp:Label></td>
                        <td><%# Eval("var") %></td>
                   </tr>
                </ItemTemplate>
               <FooterTemplate></table></FooterTemplate>
            </asp:Repeater>

完了したタスクを週ごとに視覚的にグループ化し、タスクのグループの最初の行の左側の列に週の開始日を表示し、週が変更されるまで他の列には何も表示しないようにします。すなわち

ここに画像の説明を入力してください

前のアイテムのWeekCommencing値を確認し、OnItemDataBoundを使用して前の行の値と異なる場合にのみlblWeekコントロールを更新しようとしています。

protected void rptCompletedProjectTasks_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            DateTime weekCommencing = new DateTime(1970, 1, 1);


            if ((e.Item.ItemType != ListItemType.Header) && (e.Item.ItemType != ListItemType.Footer))
            {

                Label completedDate = e.Item.FindControl("lblCompleted") as Label;
                Label lblWeekCommencing = e.Item.FindControl("lblWeek") as Label;


                DateTime completed = Convert.ToDateTime(completedDate.Text);

                if (completed != weekCommencing)
                {

                    lblWeekCommencing.Text = getWeekCommencing(completed).ToString("d MMM");

                }
                else
                {
                    lblWeekCommencing.Text = "";
                }
                weekCommencing = completed;
            }

週の開始日を取得するために使用している関数は次のとおりです。

protected DateTime getWeekCommencing(DateTime date)
        {

            int delta = DayOfWeek.Monday - date.DayOfWeek;
            DateTime monday = date.AddDays(delta);
            return monday;

        }
4

2 に答える 2

1

たぶんあなたはそれがlastItemであることを使用して確認することができますか?

e.Item.ItemIndex
于 2013-03-03T10:43:11.510 に答える
1

これを実現する簡単な方法の1つは、ページクラスでプライベートプロパティを使用することです。のようなプロパティを作成し、private DateTime currentWeek.weekCommencingを使用したメソッドの開始時と同様に、ページの読み込み時にこのプロパティを開始できます。

バインドされた各行のデータよりも、この行の日付がcurrentWeek変数と同じ週にあるかどうかを確認できます。そうでない場合は、ラベルテキストを設定し、currentWeekをこの行の週に設定します。

protected void Page_Load(object sender, EventArgs e)
{
    currentWeek = new DateTime(1970, 1, 1);
}
于 2013-03-03T10:45:39.453 に答える