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

现在我正在通过编辑文本框日期选择器进行更改,我认为转发器会使用更新后的数据自动修改数据源,但那没有发生。有人能告诉我如何在页面提交时从转发器中获取编辑后的值吗?

谢谢

您必须在回发时从 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 并在回发期间检索它。