首页 > 解决方案 > 从asp.net中的Repeater控件获取编辑数据

问题描述

我有一个清单

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>

现在我正在通过编辑文本框 datepicker 进行更改,我在想中继器会使用更新的数据自动修改数据源,但这并没有发生。有人可以告诉我如何在页面提交时从转发器中捕获编辑后的值。

谢谢

标签: c#asp.net.netwebformsasprepeater

解决方案


您必须在回发时从中继器中检索数据。为此,您需要使用 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 期间检索它。


推荐阅读