как вернуть listitem, который был удален? - PullRequest
0 голосов
/ 15 июня 2011

У меня есть флажок с несколькими вариантами.Выбранный вариант (ы) удален из второго списка флажков.Это прекрасно работает в приведенном ниже коде.Проблема в том, что когда пользователь изменяет выбранную опцию в контрольном списке 1, во втором контрольном списке все еще удаляется исходная опция.Как я могу изменить это?Примечание: выпадающий список помогает пользователю продолжить работу с формой.

page.aspx

   <asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="true">           <asp:ListItem Value="3">Italian</asp:ListItem>
    <asp:ListItem Value="6">Chinese</asp:ListItem>
    <asp:ListItem Value="7">Japanese</asp:ListItem>
    <asp:ListItem Value="8">Russian</asp:ListItem>
    <asp:ListItem Value="9">Arabic</asp:ListItem>
    <asp:ListItem Value="10">Hebrew</asp:ListItem>
    <asp:ListItem Value="11">Persian</asp:ListItem>
    <asp:ListItem Value="12">Turkish</asp:ListItem>
    </asp:CheckBoxList>

...

       <asp:DropDownList ID="DropDownList1" Width="100px" runat="server"  AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
  <asp:ListItem Value="">Select</asp:ListItem>
  <asp:ListItem Value="Yes">Yes</asp:ListItem>
  <asp:ListItem Value="No">No</asp:ListItem>
   </asp:DropDownList>   

page.aspx.vb

   Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged

    Dim li2 As ListItem
    Dim values As String = ""

    For i As Integer = 0 To CheckBoxList1.Items.Count - 1
        If CheckBoxList1.Items(i).Selected Then
            values += CheckBoxList1.Items(i).Value + ","
        End If
    Next

    values = values.TrimEnd(","c)
    Dim ints As String() = values.ToString.Split(",")
    Dim y As Integer

    If DropDownList1.SelectedValue = "Yes" Then
    For y = 0 To UBound(ints)
            li2 = CheckBoxList2.Items.FindByValue(ints(y))
            If Not IsNothing(li2) Then
                CheckBoxList2.Items.Remove(li2)
            End If
      Next
  end if

  End Sub

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Самое простое решение - установить EnableViewState="false" в CheckBoxList2.

Но я боюсь, что это может вызвать другие проблемы.Если это так, вам нужно будет сохранить полный список элементов в CheckBoxList2 между постбеками или хотя бы те элементы, которые имеют общие значения с CheckBoxList1 (и могут быть удалены).Если метки этих общих элементов также одинаковы, вы можете использовать CheckBoxList1 для воссоздания общих элементов в CheckBoxList2 перед удалением отмеченных элементов.Таким образом, вам не нужно будет сохранять дополнительные данные.

Но я бы не сделал эту вещь слишком сложной.Очистка CheckBoxList2, получение и добавление всех элементов, а также удаление отмеченных в CheckBoxList1, может быть лучшим способом.Кроме того, вы можете сохранить и повторно применить состояние selected элементов в CheckBoxList2.

0 голосов
/ 15 июня 2011

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

...