Gridview检查所有复选框问题

Gridview Checking all checkboxes issue

本文关键字:复选框 问题 检查 Gridview      更新时间:2023-09-26

我从这里使用gridview的选择所有复选框功能。这里使用的脚本有一个问题。

如果我选择标题复选框,所有模板(行)复选框被选中。如果然后取消选中所有模板复选框,则头复选框仍然选中。如何取消选择标题复选框在这种情况下?

请建议!

首先,我将在CheckBox1中添加一个Css class,以便稍后在class="chk-all"中使用。

然后,在ItemTemplate复选框中添加一个javascript函数

<ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" onclick="UnselectAllOption()"  />
</ItemTemplate>

然后,使用一些jQuery选择有class="chk-all"的复选框。

function UnselectAllOption(){  
    $('.chk-all').attr("checked", false");  
}

我将其设置为未选中,只要单击其他复选框中的一个,因为没有选中,而您选择了一个,所以HeaderTemplate中的复选框不应该被选中。或者所有的复选框都已经被选中,这意味着HeaderTemplate中的复选框不应该被选中,因为你正在将其他复选框中的一个更改为不被选中。

编辑

注。这个答案需要你添加一个脚本引用到jQuery javascript库。

这是。net的方式,但是jQuery的解决方案要干净得多:

脚本:

 function resetParent(parentRow)
 {
    document.getElementById(parentRow).checked = false;
 }

标记:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    Caption="Pick Some Technologies" BackColor="White" BorderColor="#CC9966" OnRowDataBound="ObjectDataSource1__RowDataBound"
    BorderStyle="None" BorderWidth="1px" CellPadding="4">
    <Columns>
    <asp:TemplateField HeaderText="Include" SortExpression="Include">
        <HeaderTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" onclick="changeAllCheckBoxes(this)" />
        </HeaderTemplate>
        <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" />
        </ItemTemplate>
        <ItemStyle HorizontalAlign="Center" />
    </asp:TemplateField>
    <asp:BoundField DataField="Name" HeaderText="Technology" />
    </Columns>
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
</asp:GridView>

后台代码:

private CheckBox parentCheckBox = null;
protected void ObjectDataSource1__RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        parentCheckBox = (CheckBox)e.Row.FindControl("CheckBox1");
    }    
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox childCheckBox = (CheckBox)e.Row.FindControl("CheckBox1");
        childCheckBox.Attributes.Add("onclick","resetParent('" + parentCheckBox.ClientID + "')");
    }
}