簡體   English   中英

從asp.net中的Repeater控件獲取編輯過的數據

[英]Getting edited data from Repeater control in asp.net

我有一個清單

List<DashboardFinancialDates> financialDates = new List<DashboardFinancialDates>();

我將此列表綁定到轉發器作為數據源

FinancialDates.DataSource = financialDates;
                FinancialDates.DataBind();

這是我的中繼器控件

   <asp:Repeater ID="FinancialDates" runat="server">
                                            <HeaderTemplate>
                                                <table class="DashboardConfigTable">
                                                    <thead>
                                                        <tr>
                                                            <th>Month</th>
                                                            <th>Start Date</th>
                                                            <th>End Date</th>
                                                        </tr>
                                                    </thead>
                                                    <tbody>
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <tr>
                                                    <td> <%# Eval("Month") %></td>
                                                    <td><input type="text" class="datepicker" value="<%# Eval("StartDate")%>" /></td>
                                                    <td><input type="text" class="datepicker" value="<%# Eval("EndDate")%>" /></td>
                                                </tr>
                                            </ItemTemplate>
                                            <FooterTemplate>
                                                </tbody>
    </table>
                                            </FooterTemplate>
                                        </asp:Repeater>

現在我正在通過編輯文本框日期選擇器進行更改,我認為中繼器會使用更新的數據自動修改數據源,但這並沒有發生。 有人可以告訴我如何在頁面提交時從轉發器中捕獲編輯后的值。

謝謝

您必須在回發時從中繼器中檢索數據。 為此,您需要使用 ASP.NET 控件來顯示和編輯標記中的數據:

<ItemTemplate>
    <tr>
        <td>
            <asp:Label ID="lbl" runat="server" Text='<%# Eval("Month") %>'></asp:Label></td>
        <td>
            <asp:TextBox ID="txtDateFrom" runat="server" CssClass="datepicker" Text='<%# Eval("StartDate")%>' /></td>
        <td>
            <asp:TextBox ID="txtDateTo" runat="server" CssClass="datepicker" Text='<%# Eval("EndDate")%>' /></td>
    </tr>
</ItemTemplate>

回發后,您可以像這樣檢索數據:

private IEnumerable<Tuple<string, DateTime, DateTime>> GetUpdatedItems()
{
    var lst = new List<Tuple<string, DateTime, DateTime>>();
    var items = rpt.Items
        .OfType<RepeaterItem>()
        .Where(x => x.ItemType == ListItemType.Item
                    || x.ItemType == ListItemType.AlternatingItem);
    foreach (var item in items)
    {
        var month = ((Label)item.FindControl("lbl")).Text;
        var dateFromStr = ((TextBox)item.FindControl("txtDateFrom")).Text;
        var dateToStr = ((TextBox)item.FindControl("txtDateTo")).Text;
        var dateFrom = DateTime.Parse(dateFromStr);
        var dateTo = DateTime.Parse(dateToStr);
        lst.Add(Tuple.Create(month, dateFrom, dateTo));
    }
    return lst.ToArray();
}

該代碼遍歷 Repeater 項並檢索控件的值。

如果您需要項目的 id,您可以將 HiddenField 添加到 ItemTemplate 並在 PostBack 期間檢索它。

暫無
暫無

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

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