我有一个复选框列表,有几个选项。选择的选项将从第二个复选框列表中删除。这在以下代码中工作正常。问题是当用户更改复选框列表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
答案 0 :(得分:1)
最简单的解决方案是在CheckBoxList2中设置EnableViewState="false"
。
但我担心这可能会给你带来其他麻烦。如果是这样,您需要在回发中保留CheckBoxList2中的完整项目列表,或至少与CheckBoxList1共享值的项目(并且可以删除)。如果这些共享项的标签也相同,则可以在删除选中的项之前使用CheckBoxList1在CheckBoxList2中重新创建共享项。这样您就不需要保留其他数据了。
但我不会让这件事太复杂。清除CheckBoxList2,检索并添加所有项目,并删除CheckBoxList1中检查的项目可能是最好的方法。此外,您可能希望在CheckBoxList2中存储并重新应用项目的selected
状态。
答案 1 :(得分:0)
听起来我需要保留checkboxlist2中项目列表的完整版本,这样您就可以清除它,并在选择checkboxlist1时更改所有项目到checkboxlist2。