簡體   English   中英

使用OnItemDataBound時如何獲取轉發器中的上一行?

[英]How do I get the previous row in a repeater when using OnItemDataBound?

我有一個轉發器,它創建一個按日期完成排序的任務列表。

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

        }

也許你可以使用並檢查是lastItem?

e.Item.ItemIndex

實現此目的的一種簡單方法是在頁面類上使用私有屬性。 你可以像private DateTime currentWeek.一樣創建一個屬性private DateTime currentWeek. 並且您可以在頁面加載中啟動此屬性,就像在使用weekCommencing的方法的開頭一樣。

您可以檢查的每行數據綁定是否與currentWeek變量在同一周內,如果不是,則設置標簽文本並將currentWeek設置為此行周。

protected void Page_Load(object sender, EventArgs e)
{
    currentWeek = new DateTime(1970, 1, 1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM