单击全选复选框时,不应选中已禁用的复选框

时间:2011-08-22 06:56:39

标签: c# asp.net html

我有一个网格,其中有几个项目在每行的开头都有一个复选框。我还在网格顶部有一个全选复选框。该场景类似于我们的Gmail或雅虎收件箱。我的问题是,假设我禁用了一个复选框,然后单击全选复选框,则不应选中已禁用的复选框。这有什么解决方案吗?我附上了相关的代码片段如下。

* aspx文件

<telerik:GridTemplateColumn UniqueName="CheckBoxTemplateColumn">

     <HeaderTemplate>

         <asp:CheckBox id="headerChkbox" OnCheckedChanged="ToggleSelectedState" AutoPostBack="True" runat="server"></asp:CheckBox>

     </HeaderTemplate>

     <ItemTemplate>

         <asp:CheckBox id="CheckBox1" OnCheckedChanged="ToggleRowSelection" AutoPostBack="True"  runat="server"></asp:CheckBox>

     </ItemTemplate>

</telerik:GridTemplateColumn>

* 代码

 protected void ToggleRowSelection(object sender, EventArgs e) //selecting a particular row

    {
        ((sender as CheckBox).NamingContainer as GridItem).Selected = (sender as CheckBox).Checked;

    }

    protected void ToggleSelectedState(object sender, EventArgs e) //select all rows

    {

        CheckBox headerCheckBox = (sender as CheckBox);

        foreach (GridDataItem dataItem in grdCurrent.MasterTableView.Items)

        {

            (dataItem.FindControl("CheckBox1") as CheckBox).Checked = headerCheckBox.Checked;

            dataItem.Selected = headerCheckBox.Checked;

        }

    }

2 个答案:

答案 0 :(得分:0)

在将其设置为Checked之前,您需要检查它是否为Enabled

CheckBox headerCheckBox = (sender as CheckBox);

foreach (GridDataItem dataItem in grdCurrent.MasterTableView.Items)
{
  if((dataItem.FindControl("CheckBox1") as CheckBox).Enabled) // add this condtion
  {
    (dataItem.FindControl("CheckBox1") as CheckBox).Checked = headerCheckBox.Checked;
    dataItem.Selected = headerCheckBox.Checked;
  }
}

答案 1 :(得分:0)

而不是使用后面的代码来选择所有。我将使用javascript或Jquery来完成它。我的方法将为启用和禁用复选框应用不同的css类,如“启用”和“禁用”。在Jquery中,我检查了类,只勾选启用的复选框。