从asp.net的Repeater控件中获取编辑的数据

时间:2019-02-26 16:30:28

标签: c# asp.net .net webforms asprepeater

我有一个列表

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进行更改,并且我认为中继器将使用更新后的数据自动修改数据源,但那没有发生。有人可以告诉我如何从提交页面的中继器中获取编辑后的值。

谢谢

1 个答案:

答案 0 :(得分:1)

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