2011-05-05 29 views
0

我有以下checkboxlist。當選擇「無」時,我需要取消選中其餘列表項。我怎麼做?由於取消選中checkboxlist如果選擇了一個listitem

<asp:CheckBoxList ID="CheckBoxList1" RepeatDirection="Horizontal" runat="server"> 
    <asp:ListItem Value="1">French</asp:ListItem> 
    <asp:ListItem Value="2">Spanish</asp:ListItem> 
    <asp:ListItem Value="3">Italian</asp:ListItem> 
    <asp:ListItem Value="4">German</asp:ListItem> 
    <asp:ListItem Value="5">Portuguese</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="Other">Other</asp:ListItem> 
    <asp:ListItem Value="None">None</asp:ListItem> 
    </asp:CheckBoxList> 

UPDATE: 翻譯下面的答案vb.net由達林季米特洛夫

Public Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T 
    target = value 
    Return value 
    End Function 

    Protected Sub CheckBoxList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBoxList1.SelectedIndexChanged 
    Dim listItems = CheckBoxList1.Items.Cast(Of ListItem)() 
      Dim isNoneSelected = listItems.Any(Function(x) x.Value = "None" AndAlso x.Selected = True) 
     If isNoneSelected Then 
        listItems.Where(Function(x) x.Value <> "None").ToList().ForEach(Function(x) InlineAssignHelper(x.Selected, False)) 
     End If 
    End Sub 

回答

1

有兩種可能性:

  1. 服務器端:認購OnSelectedIndexChanged事件並啓用AutoPostBack:

    <asp:CheckBoxList ID="CheckBoxList1" RepeatDirection="Horizontal" runat="server" AutoPostBack="true" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged"> 
        <asp:ListItem Value="1">French</asp:ListItem> 
        <asp:ListItem Value="2">Spanish</asp:ListItem> 
        <asp:ListItem Value="3">Italian</asp:ListItem> 
        <asp:ListItem Value="4">German</asp:ListItem> 
        <asp:ListItem Value="5">Portuguese</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="Other">Other</asp:ListItem> 
        <asp:ListItem Value="None">None</asp:ListItem> 
    </asp:CheckBoxList> 
    

    ,並在後面的代碼:

    protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        var listItems = CheckBoxList1.Items.Cast<ListItem>(); 
        var isNoneSelected = listItems.Any(x => x.Value == "None" && x.Selected == true); 
        if (isNoneSelected) 
        { 
         listItems.Where(x => x.Value != "None").ToList().ForEach(x => x.Selected = false); 
        } 
    } 
    
  2. 客戶端:使用JavaScript,當用戶點擊無複選框來檢測,並取消其他人。

+0

嗨,非常感謝。我有問題翻譯成vb.net。你能給一些方向嗎?非常感謝。 – netNewbi3 2011-05-05 12:14:48

+0

@ netNewbi3,有在線C# - > VB.NET轉換工具:http://www.developerfusion.com/tools/convert/csharp-to-vb/您可以嘗試將代碼隱藏轉換爲VB.NET。 – 2011-05-05 12:20:23

+0

謝謝,我使用這些。但是這次他們沒有工作。謝謝。 – netNewbi3 2011-05-05 12:22:35

1
<asp:CheckBoxList ID="CheckBoxList1" RepeatDirection="Horizontal" runat="server" AutoPostBack="true" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged"> 
    <asp:ListItem Value="1">French</asp:ListItem> 
      <asp:ListItem Value="2">Spanish</asp:ListItem> 
      <asp:ListItem Value="3">Italian</asp:ListItem> 
      <asp:ListItem Value="4">German</asp:ListItem> 
      <asp:ListItem Value="5">Portuguese</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="Other">Other</asp:ListItem> 
    </asp:CheckBoxList> 
    <table> 
     <tr> 
      <td> 
       <asp:CheckBox ID="chkNone" Text="None" runat="server" AutoPostBack="True" OnCheckedChanged="chkNone_CheckedChanged" /> 
      </td> 
     </tr> 
    </table> 

從列表中刪除了「無」選項 這樣我們可以取消 「無」,如果用戶決定 進行語言選擇。

/// <summary> 
    /// clear the list 
    /// and checked "none" as SelectedIndexChanged resets it 
    /// </summary> 
    protected void chkNone_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBoxList1.ClearSelection(); 
     chkNone.Checked = true; 
    } 

    /// <summary> 
    /// If a user makes a selection clear the "none" checkbox 
    /// </summary> 
    protected void cklWatchMoveVideosIf_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     chkNone.Checked = false; 
    } 

的CheckBoxList的和checkboxOther可以添加到一個UpdatePanel到 防止完全回發,這使得這個更加順暢。

相關問題