我有一个网格,其中有几个项目在每行的开头都有一个复选框。我还在网格顶部有一个全选复选框。该场景类似于我们的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;
}
}
答案 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中,我检查了类,只勾选启用的复选框。