2011-10-13 53 views
1

好日子的朋友,取2个复选框列出互斥

我知道我们如何才能让两个复选框或复选框互斥一个复选框列表内。 但是我的问题是从一点不同,希望得到堆栈溢出一些帮助,

好吧,我有两个复选框列表如下,并从数据集表我收到的复选框值,

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

} 

我会得到FOLL由于每个列表中的复选框。

Checkbox_selectColumns:雇员ID,名字,姓

Checkbox_selectFields:经理ID,经理FName参数,经理LName的

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

谢谢...

+1

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

回答

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

完美!工作很好:)谢谢你这个简单的解决方案。还有一个查询,截至目前,我已在两个列表中启用了自动回复功能。但是,无论何时我选择或取消选择列表中的任何一个chekbox,整个页面都将重新加载。我知道我们可以使用Ajax更新面板。还想知道我们是否有任何解决方案在ASP.net。 – Jithu

+1

@Jithu - 不客气。我不知道你周围的工作是什么意思 - 如果你指的是整页回发,唯一的“变通”(这不是我会认为是一个解决),我” m知道是通过AJAX和UpdatePanel(通过ASP.NET)。 – Tim

+0

谢谢蒂姆,那么我会继续与阿贾克斯... – Jithu

0

嗨在这个问题上的工作后,与蒂姆的帮助提示,最后得到它的工作。请提供解决方案,如果您有简单的解决方案。

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

       } 
      } 
     } 

这一个工作正常,任何建议,使更精致码位将是真正有用的...