Элементы управления CheckBox в повторителе не поддерживают состояние - PullRequest
1 голос
/ 10 ноября 2010

Смутился по этому поводу. У меня сложилось впечатление, что если вы добавите серверные элементы управления в ItemTemplate ретранслятора, то идентификаторы, назначенные этим элементам управления, будут сохраняться в течение всех обратных передач, и состояние будет поддерживаться. Но, похоже, этого не происходит. Вот мой ItemTemplate:

<asp:HiddenField ID="hidPending" runat="server" value="<%# DataBinder.Eval(Container.DataItem, "Id")%>" />
<td class="leftpadd"><uc:restrictedtext ID="uclblCategory" runat="server" Width="125" /></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "SelectedOptions")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "Price.IncludingTax", "{0:C}")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "ExtrasCost", "{0:C}")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "Quantity", "{0:000}")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><asp:CheckBox ID="chkPendingItems" runat="server" /></td> 

Который прекрасно заполняет. Я хочу, чтобы пользователь мог выбирать определенные элементы из повторителя, используя флажок, и «обрабатывать» их (т.е. выполнять некоторые операции с данными над этими элементами) при нажатии кнопки, которая находится за пределами повторителя. Вот мой код нажатия кнопки:

Private Sub lnkPendingProcessSelected_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkPendingProcessSelected.Click
    For Each rItem As RepeaterItem In rptPendingItems.Items
        If rItem.ItemType = ListItemType.Item Or rItem.ItemType = ListItemType.AlternatingItem Then
            Dim chk As CheckBox = DirectCast(rItem.FindControl("chkPendingItems"), CheckBox)
            If chk.Checked Then
                Dim orderItemId As Integer
                Dim hid As HiddenField = DirectCast(rItem.FindControl("hidPending"), HiddenField)
                orderItemId = CInt(hid.Value)
                My.Application.ManagerFactory.OrderManagerInstance.ChangeOrderItemStatus(orderItemId, Concrete.Cms.DataTransferObjects.OrderItemStatus.Processing)
            End If
        End If
    Next
End Sub

Но если вы пройдете через это, флажки будут найдены и назначены правильно, но их атрибут Checked всегда имеет значение False. У кого-нибудь есть предложения относительно того, почему государство не поддерживается и что я могу с этим сделать?

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

Судя по комментарию CyberDude, вы, вероятно, сбрасываете значения при привязке данных. Если возможно, попробуйте использовать IsPostback только для привязки данных при первой загрузке страницы.

if(!IsPostBack)
{
    rptPendingItems.DataBind();
}

(Извините, это C #, а не VB, но суть должна быть такой же)

Если это невозможно или не работает, вам, вероятно, придется вручную устанавливать и устанавливать все эти значения флажков и сохранять их в соответствии с вашим набором данных или в сеансе или суммировании.

0 голосов
/ 15 марта 2013

У меня был повторитель внутри пользовательского элемента управления на странице с другими пользовательскими элементами управления, которые вызывают обратную передачу.В некоторых случаях я хотел выполнить повторную привязку при обратной передаче, поэтому я создал свойство bool (IsDirty) на странице, которое я мог установить в значение true, когда я хотел повторно привязать данные при обратной передаче.Затем в моей page_load я проверял, если (! IsPostBack || IsDirty) перед привязкой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...