2016-06-27 3 views
0

aspxページには、次のようにcheckBoxリストがあります。 chklstOptionsは、ユーザーがRepOptionAまたはRepOptionBを選択できるようにする必要があり、両方のチェックボックスを同時に選択しないでください。asp.netの別のリスト項目に基づいて、checkBoxlist内の特定のリスト項目だけをチェック/チェック解除する方法

たとえば、RepOptionAが既にチェックされているときにRepOptionBを選択するたびに、RepOptionAをオフにしてRepOptionBをチェックする必要があります。さらに、ユーザーはOptionA、OptionB、OptionCなどの他のオプションを制約なしでチェック/選択解除することができます。誰かがこれまでのところ、この

<asp:CheckBoxList ID="chklstOptions" runat="server" RepeatColumns="2" RepeatDirection="Horizontal" Enabled="false" OnSelectedIndexChanged="chklstOptions_SelectedIndexChanged" OnTextChanged="chklstOptions_SelectedIndexChanged" AutoPostBack="True"> 
    <asp:ListItem Text="OptionA" Value="OptionA" ></asp:ListItem> 
    <asp:ListItem Text="OptionB" Value="OptionB" ></asp:ListItem> 
    <asp:ListItem Text="OptionC" Value="OptionC" ></asp:ListItem> 
    <asp:ListItem Text="RepOptionA" Value="RepOptionA" ></asp:ListItem> 
    <asp:ListItem Text="RepOptionB" Value="RepOptionB" ></asp:ListItem> 
    </asp:CheckBoxList> 

を実装する方法を提案することができ、私は役に立たないのである以下のコードを、試してみました

protected void chklstOptions_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    foreach (ListItem Item in chklstOptions.Items) 
    { 
     if (Item.Selected) 
     { 
      if (Item.Text == "RepOptionB") 
      { 
       if (chklstOptions.Items.FindByText("RepOptionA").Selected == true) 
           chklstOptions.Items.FindByText("RepOptionA").Selected = false; 
          chklstOptions.Items.FindByText("RepOptionB").Selected = true; 
        } 
        if (Item.Text == "RepOptionA") 
        { 
          if (chklstOptions.Items.FindByText("RepOptionB").Selected == true) 
           chklstOptions.Items.FindByText("RepOptionB").Selected = false; 
          chklstOptions.Items.FindByText("RepOptionA").Selected = true; 
        }    
       } 
     } 
} 
+0

そんなことをするとどうなりますか? – Legends

+0

上記のコードでselectedIndexChangedイベントで、RepOptionAが選択され、ユーザーがRepOptionBを選択すると、RepOptionAはチェックされたままです。 RepOptionAのチェックを外し、この場合RepOptionBをチェックする必要があります。 –

+0

解決策はCheckboxListsに作成することです。 1つはRepoptionA/B、もう1つはオプションです。そうしないと、ユーザーが他のオプションをクリックしたときに、最初に選択されたものがわからなくなります。 このようにすることができますが、実行可能ですが扱いにくいですが、最初に選択したRepOption - > AまたはBをサーバーのどこかに保存し、それに応じてAまたはBを非アクティブにする必要があります。実際には2つのチェックボックスリストが表示されます。 – Legends

答えて

0

が最後でそれを実装してみコードの下で、最後に選択されたチェックボックスのlistitem値を使用します。:-)

protected void chklstOptions_SelectedIndexChanged(object sender, EventArgs e) 
    {    
     var selectedItem = chklstOptions.SelectedItem; 
     string result = Request.Form["__EVENTTARGET"]; 
     string[] checkedBox = result.Split('$'); ; 
     int index = int.Parse(checkedBox[checkedBox.Length - 1]); 
     string latestItem = chklstOptions.Items[index].Value; 
     foreach (ListItem Item in chklstOptions.Items) 
     { 
      if (Item.Selected) 
      { 
       if (Item.Text == "RepOptionA" && latestItem == "RepOptionB") 
       {      
         chklstOptions.Items.FindByText("RepOptionA").Selected = false; 
         chklstOptions.Items.FindByText("RepOptionB").Selected = true; 
       } 
       if (Item.Text == "RepOptionB" && latestItem == "RepOptionA") 
       { 
        chklstOptions.Items.FindByText("RepOptionB").Selected = false; 
        chklstOptions.Items.FindByText("RepOptionA").Selected = true; 
       }    
      } 
     } 
    } 
1

この

protected void chklstOptions_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      foreach (ListItem lt in chklstOptions.Items) 
      { 
       if (lt.Value == "RepOptionB") 
        if (lt.Selected) 
        { 
         foreach (ListItem lm in chklstOptions.Items) 
         { 
          if (lm.Value == "RepOptionA") 
           lm.Selected = false; 
         } 
        } 
      } 
      foreach (ListItem lt in chklstOptions.Items) 
      { 
       if (lt.Value == "RepOptionA") 
        if (lt.Selected) 
        { 

         foreach (ListItem lm in chklstOptions.Items) 
         { 
          if (lm.Value == "RepOptionB") 
           lm.Selected = false; 
         } 
        } 
      } 
     } 
+0

ありがとうクリシュナ。同様の方法で解決しました。 –

関連する問題