【问题标题】:Make two checkbox lists mutually exclusive使两个复选框列表互斥
【发布时间】:2011-12-06 16:33:24
【问题描述】:

朋友们,早安,

我知道了如何使复选框列表中的两个复选框或复选框互斥。 不过我的问题和那个有点不同,希望能从堆栈溢出中得到一些帮助,

我有两个复选框列表,如下所示,我从数据集表中获取复选框值,

CheckBoxlist1 - Checkbox_selectColumns

 if (IsDataSetNotEmpty(ds))
 {
   CheckBox_selectColumns.Items.Clear();
   foreach (DataRow row in ds.Tables[0].Rows)
   {
     CheckBox_selectColumns.Items.Add(row[0].ToString());
   }

 }

CheckBoxlist2 - Checkbox_selectFields

if (IsDataSetNotEmpty(ds))
{
  Checkbox_selectFields.Items.Clear();
  foreach (DataRow row in ds.Tables[1].Rows)
  {
    CheckBox_selectColumns.Items.Add(row[0].ToString());
  }

}

我将在每个列表中获得以下复选框。

Checkbox_selectColumns :员工 ID、名字、姓氏

Checkbox_selectFields:经理 ID、经理 FName、经理 LName

有什么办法,我可以让这两个复选框互斥,也就是说,如果我从第一个列表中选择任何一个或多个复选框,我不应该从第二个列表中选择任何复选框,反之亦然..

谢谢...

【问题讨论】:

  • 您可以检查每个列表的SelectedIndex 属性 - 如果列表 1 的值 >= 0,则禁用列表 2,反之亦然。您还需要处理在一个列表中进行选择然后清除选择的情况(即,此时您必须重新启用禁用的列表)。如果我有更多时间,我会尝试整理一个代码示例。希望这会给你一些工作。

标签: c# asp.net checkbox checkboxlist


【解决方案1】:

我建议使用控件的 SelectedValue 属性,而不是循环遍历 CheckBox 中的项目,因为它会通过回发持续存在(SelectedIndex 不会)(ListControl.SelectedValue Property):

protected void CheckBox_selectColumns_SelectedIndexChanged(object sender, EventArgs e)         
{             

    if (CheckBox_selectColumns.SelectedValue != "")
    {
        foreach (ListItem listItem in CheckBox_SelectAll.Items)
        {
            listItem.Selected = false;
        }
    }
}

protected void CheckBox_SelectAll_CheckChanged(object sender, EventArgs e)
{

    if (CheckBox_SelectAll.SelectedValue != "")
    {
        foreach (ListItem listItem in CheckBox_selectColumns.Items)
        {
            listItem.Selected = false;
        }
    }
}

【讨论】:

  • 完美!!工作得很好:) 感谢您提供这个简单的解决方案。还有一个查询,到目前为止,我已经在两个列表中启用了自动回发。但是,每当我选择或取消选择列表中的任何一个复选框时,都会重新加载整个页面。我知道我们可以使用 Ajax 的更新面板。仍然想知道我们在 ASP.net 中是否有任何解决方法。
  • @Jithu - 不客气。我不确定您所说的解决方法是什么意思-如果您指的是回发的整页,那么我唯一的“解决方法”(这不是我认为的解决方法)我知道是通过 AJAX 和 UpdatePanel(通过 ASP.NET)。
  • @RaghavMac - 错误是什么?你的代码是?与您的代码一起发布问题可能比简单地对其他用户的代码的旧答案发表评论要好。
  • @Tim windows phone 上面怎么做?
  • @RaghavMac - 我不知道。为什么不发布带有问题的代码并将其标记为wp7?在 ASP.NET 答案上提出一个 Windows Phone 问题很可能不会让你走得太远。
【解决方案2】:

您好,在解决此问题后,在 Tim 的提示的帮助下,终于成功了。如果您有任何简单的解决方案,请提供解决方案。

protected void CheckBox_selectColumns_SelectedIndexChanged(object sender, EventArgs e)
        {
            bool Is_select = false;
            foreach (ListItem listItem in CheckBox_selectColumns.Items) 
            {
                if (listItem.Selected)
                {
                    Is_select = true;
                }

            }

            if (Is_select)
            {
                foreach (ListItem listItem in CheckBox_SelectAll.Items) 
                {
                   if (listItem.Selected)
                   {
                      listItem.slected=false;
                   }

                }
            }

        }

对于第二个复选框列表做了相反的事情..

        protected void CheckBox_SelectAll_CheckedChanged(object sender, EventArgs e)
        {
           bool Is_select = false;
            foreach (ListItem listItem in CheckBox_SelectAll.Items) 
            {
                if (listItem.Selected)
                {
                    Is_select = true;
                }

            }

            if (Is_select)
            {
                foreach (ListItem listItem in CheckBox_selectColumns.Items) 
                {
                   if (listItem.Selected)
                   {
                      listItem.slected=false;
                   }

                }
            }
        }

这个工作正常,任何使代码更精致的建议都会非常有帮助......

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 2021-05-03
    • 1970-01-01
    • 2018-01-02
    • 2015-10-05
    • 1970-01-01
    • 2011-12-26
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多