2011-06-15 55 views
0

我有一个checkboxlist whith几个选项。所选的选项将从第二个复选框列表中删除。这在以下代码中正常工作。问题是,当用户更改复选框列表1中的选定选项时,第二个复选框列表仍保留原始选项。我该如何改变这一点?注意:下拉列表有助于用户继续使用表单。如何返回已被删除的listitem?

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 

回答

1

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

但我恐怕这可能会导致你其他麻烦。如果是这样,你需要在回传中保留CheckBoxList2中的所有项目列表,或者至少包含与CheckBoxList1共享值的项目(并且可以删除)。如果这些共享项目的标签也相同,则可以在删除选中的项目之前使用CheckBoxList1重新创建CheckBoxList2中的共享项目。这样你就不需要保存额外的数据。

但我不会让这个东西太复杂。清除CheckBoxList2,检索并添加所有项目,以及删除CheckBoxList1中检查的项目可能是最好的方法。另外,您可能想要在CheckBoxList2中存储并重新应用项目的selected状态。

+0

谢谢,我现在正在检索,添加和删除代码背后的listitems,并正常工作。 – netNewbi3 2011-06-16 11:55:09

0

这听起来像你对我需要保留完整版的checkboxlist2中的项目列表,以便您可以清除它并在选择checkboxlist1更改时将所有项目添加到checkboxlist2。