我有一個checkboxlist從XML文件中獲取數據。如果用戶在複選框列表中選擇一個項目,我只想顯示該項目並隱藏其他所有內容。在這之下,我想添加可點擊的文本以讓用戶選擇其他內容。因此,如果使用點擊該文本,則用戶將再次看到複選框列表,並且選擇第一項。如何隱藏複選框列表中的未選項目?
基本上看起來像這樣。 那麼我們如何做到這一點?
非常感謝。
要求使用vb.net/和checkboxlist控件,因爲我們將從數據庫動態綁定數據庫。
我有一個checkboxlist從XML文件中獲取數據。如果用戶在複選框列表中選擇一個項目,我只想顯示該項目並隱藏其他所有內容。在這之下,我想添加可點擊的文本以讓用戶選擇其他內容。因此,如果使用點擊該文本,則用戶將再次看到複選框列表,並且選擇第一項。如何隱藏複選框列表中的未選項目?
基本上看起來像這樣。 那麼我們如何做到這一點?
非常感謝。
要求使用vb.net/和checkboxlist控件,因爲我們將從數據庫動態綁定數據庫。
這是一種方法。使用兩個面板作爲兩個不同CheckBoxLists的容器。第一個顯示你的「FROM」 - 項目和後者你的「TO」 - 項目。
第二個面板最初是隱式的。除CheckBoxList外,它還包含一個LinkButton來觸發取消選擇。
On 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
謝謝蒂姆,我真的很想做。我有幾個錯誤,但我修復了它們。謝謝。 – lawphotog
@Laurence:很高興聽到它的作品。但是上面的代碼很好地獨立運行,這些錯誤可能是通過將其集成到其他代碼中引起的。 –
你好,我有這個編譯,我使用XML數據源所以不是一個迫切的問題,但爲了獲得更多的知識,這是很好的知道和非常感謝,你把它放在第一位。 **編譯器錯誤消息:BC30456:'列'不是'datatable'的成員。第24行:tbl.Columns.Add(新的DataColumn(「Year」))**我導入了System.Data命名空間。 Thankssss。 – lawphotog
我肯定會推薦做th完全是用jQuery。它光滑快速。
HTML
西港島線這個你<asp:CheckboxList />
生成,您不必擔心使用它,它只是在這裏以供參考。
<table id="checkboxWrapper">
<tr>
<td><input id="check1" type="checkbox" name="check1" value="Item 1" /></td>
<td><label for="check1">2010/2009</label></td>
</tr>
<tr>
<td><input id="check2" type="checkbox" name="check2" value="Item 2" /></td>
<td><label for="check2">2009/2008</label><td>
</tr>
<tr>
<td><input id="check3" type="checkbox" name="check3" value="Item 3" /></td>
<td><label for="check3">2008/2007</label></td>
</tr>
<tr>
<td><input id="check4" type="checkbox" name="check4" value="Item 4" /></td>
<td><label for="check4">2007/2006</label></td>
</tr>
</table>
<div id="CheckboxListInscructionPlaceholder" style="display:none;">
<a id="ChangeSelection" href="#">Change Selection</a>
</div>
</div>
的Javascript
這是什麼,你會爲了讓你需要什麼添加到您的腳本。
$('#checkboxWrapper td > :checkbox').change(function() {
// hide the checkboxes that are not Checked
$('#checkboxWrapper td > input:not(:checked)').hide()
// hide the labels that correspond to the unchecked checkboxes
$('#checkboxWrapper td > label[for!="' + $(this).attr('id') + '"]').hide();
// show the "Change Selection" link
$('#CheckboxListInscructionPlaceholder').attr({
style: 'display:block;'
});
});
$('#ChangeSelection').click(function() {
// uncheck all of the checkboxes
$("#checkboxWrapper td > input").prop("checked", false);
// show all of the checkboxes
$('#checkboxWrapper td > input').show();
// show all of the labels
$('#checkboxWrapper td > label').show();
// hide the "Change Selection" link
$('#CheckboxListInscructionPlaceholder').attr({
style: 'display:none;'
});
});
我沒有測試過上asp:Checkboxlist
,但這應該,因爲我沒有使用任何硬編碼id
的工作。
非常感謝蔡斯,對我來說這真是一個很好的例子。能夠在客戶端做到這一點非常方便。但我們更喜歡在服務器端做到這一點。但非常感謝,很多..真是一個很好的工作例子。 – lawphotog
我會盡全力用jQuery。更少的服務器開銷,不需要任何回發。 –
對於沒有javascript支持的用戶,他們會看到整個複選框列表,您只需執行服務器端驗證,以確保它們不會檢查多個選項。 –