【问题标题】:how to return listitem that has been removed?如何返回已删除的列表项?
【发布时间】:2011-06-15 17:01:07
【问题描述】:

我有一个带有多个选项的复选框列表。选择的选项从第二个复选框列表中删除。这在下面的代码中工作正常。问题是当用户更改复选框列表 1 中的选定选项时,第二个复选框列表仍然删除了原始选项。我怎样才能改变这个?注意:下拉列表可帮助用户继续使用表单。

页面.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

【问题讨论】:

    标签: .net checkboxlist


    【解决方案1】:

    最简单的解决方法是在CheckBoxList2中设置EnableViewState="false"

    但我担心这会给你带来其他麻烦。如果是这样,您需要在回发中保留 CheckBoxList2 中的完整项目列表,或者至少保留与 CheckBoxList1 共享值的那些项目(并且可以删除)。如果这些共享项的标签也相同,您可以使用 CheckBoxList1 在 CheckBoxList2 中重新创建共享项,然后再删除选中的项。这样你就不需要持久化额外的数据了。

    但我不会把这件事弄得太复杂。清除 CheckBoxList2、检索和添加所有项目以及删除 CheckBoxList1 中选中的项目可能是最好的方法。此外,您可能希望存储并重新应用 CheckBoxList2 中项目的selected 状态。

    【讨论】:

    • 谢谢,我现在正在检索、添加和删除后面代码中的列表项,并且工作正常。
    【解决方案2】:

    在我看来,您需要保留 checkboxlist2 中项目列表的完整版本,以便在 checkboxlist1 的选择发生变化时清除它并将所有项目添加到 checkboxlist2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 2011-06-01
      • 1970-01-01
      • 2017-07-10
      • 2018-07-09
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多