【问题标题】:How to check/uncheck only particular list items in checkBoxlist based on another list item in asp.net如何根据asp.net中的另一个列表项仅选中/取消选中checkBoxlist中的特定列表项
【发布时间】:2016-06-27 22:23:47
【问题描述】:

我的 aspx 页面中有一个复选框列表,如下所示。 chklstOptions 必须允许用户选择 RepOptionA 或 RepOptionB,并且不应同时选中两个复选框。

例如,当 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;
                    }               
                }
        }
}

【问题讨论】:

  • 当你这样做时会发生什么?
  • In the above code at the selectedIndexChanged event, whenever RepOptionA is selected, and user selects the RepOptionB, the RepOptionA remains checked.我希望不选中 RepOptionA,在这种情况下应该选中 RepOptionB。
  • 解决方案是创建到 CheckboxLists。一个用于RepoptionA/B,另一个用于其他选项。否则,当用户还单击其他选项时,您将不知道最初选择了哪个选项。您可以这样做,这是可行的,但很麻烦,但是您必须将第一个选择的 RepOption --> A 或 B 存储在服务器上的某个位置,然后相应地停用 A 或 B。当您相应地对齐它们时,用户不会在 UI 中看到实际上有两个复选框列表。

标签: c# asp.net


【解决方案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;
                        }
                    }
            }
        }

【讨论】:

    【解决方案2】:

    最后用下面的代码实现它,使用最后选中的复选框列表项值.. :-)

    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;
                    }              
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 2021-11-23
      相关资源
      最近更新 更多