Получение отредактированных данных из управления Repeater в asp.net - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть список

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>

Теперь я делаю изменения с помощью редактора даты в текстовом поле, и я думал, что ретранслятор автоматически изменит источник данных с обновленными данными, но этого не происходит.Может кто-нибудь, пожалуйста, скажите мне, как я могу получить отредактированные значения обратно из повторителя на странице отправки.

Спасибо

1 Ответ

0 голосов
/ 26 февраля 2019

Вы должны получить данные из повторителя при обратной передаче.Чтобы это работало, вам нужно использовать элементы управления 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 и извлекает значения элементов управления.

Если вам нужен идентификатор для предмета, вы можете добавить HiddenField к ItemTemplate, а также получить его во время PostBack.

...