我有一个checkBoxlist,它从
XML文件中获取数据.如果用户选择checkBoxlist上的项目,我只想显示该项目并隐藏其他所有项目.在此之下,我想添加可点击的文字,让用户选择别的东西.因此,如果使用单击该文本,用户将再次看到复选框列表,并选择第一个项目.
基本上看起来像这样.
那么我们如何实现这一目标呢?
非常感谢.
解决方法
这是一种方式.使用两个Panel作为两个不同CheckBoxLists的容器.第一个显示“FROM” – 项目,后者显示“TO” – 项目.
第二个小组最初是invisivle.除了CheckBoxList之外,它还包含一个LinkButton来触发取消选择.
在BtnSelect上 – 单击,您将添加从第一个到第二个CheckBoxList的所选项目并显示它的面板.在BtnChangeSelection-单击您只需要切换两个面板的可见性并选择第一个项目.
这已经适用于多种选择.
ASPX(CSS由您决定):
<div> <asp:Panel ID="PnlChkListAcademicYear" runat="server"> <asp:CheckBoxList ID="ChkListAcademicYear" runat="server" /><br /> <asp:LinkButton ID="BtnSelect" Text="Select" runat= "server" ></asp:LinkButton> </asp:Panel> <asp:panel ID="PnlChkListAcademicYearactive" Visible="false" runat="server"> <asp:CheckBoxList ID="ChkListAcademicYearactive" Enabled="false" runat="server" /><br /> <asp:LinkButton ID="BtnChangeSelection" Text="Change selection" runat= "server" ></asp:LinkButton> </asp:panel> </div>
代码隐藏:
Private Sub BtnSelect_Click(sender As Object,e As System.EventArgs) Handles BtnSelect.Click If Me.ChkListAcademicYear.Selectedindex <> -1 Then Dim selectedItems = (From item In Me.ChkListAcademicYear.Items.Cast(Of ListItem)() Where item.Selected).ToArray Me.ChkListAcademicYearactive.Items.Clear() Me.ChkListAcademicYearactive.Items.AddRange(selectedItems) Me.PnlChkListAcademicYearactive.Visible = True Me.PnlChkListAcademicYear.Visible = False End If End Sub Private Sub BtnChangeSelection_Click(sender As Object,e As System.EventArgs) Handles BtnChangeSelection.Click Me.ChkListAcademicYear.Selectedindex = 0 Me.PnlChkListAcademicYearactive.Visible = False Me.PnlChkListAcademicYear.Visible = True End Sub
为了完整起见,这是我的示例代码的其余部分:
Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then BindCheckBoxList() End If End Sub Private Sub BindCheckBoxList() Me.ChkListAcademicYear.DataSource = GetData() Me.ChkListAcademicYear.DataTextField = "Year" Me.ChkListAcademicYear.DataBind() End Sub Private Function GetData() As DataTable Dim years = {"2010/2009","2009/2008","2008/2007","2007/2006","2006/2005","2005/2004","2004/2003"} Dim tbl = New DataTable tbl.Columns.Add(New DataColumn("Year")) For Each y In years tbl.Rows.Add(y) Next Return tbl End Function