これは片道です。 2つの異なるCheckBoxListsのコンテナとして2つのパネルを使用します。最初はあなたの "FROM" - 項目と後者の "TO" - 項目を表示します。
第2のパネルは最初は非表示である。 CheckBoxListとは別に、選択解除をトリガーするLinkButtonが含まれています。
オンBtnSelect
- 最初のチェックボックスリストから2番目のチェックボックスリストに選択した項目を追加し、パネルを表示します。 On 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
私はすべてjQueryでそれを行います。サーバーのオーバーヘッドが大幅に軽減され、ポストバックは不要です。 –
javascriptをサポートしていない人は、チェックボックスのリスト全体が表示されます。複数のチェックボックスをチェックしないようにするには、サーバー側の検証を行うだけです。 –