cs文件中:protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)
{
DataGridItem item =(DataGridItem)(((Control)sender).NamingContainer);
CheckBox cb = item.FindControl("_chkAll") as CheckBox;
foreach(DataGridItem di in _grd.Items)
{
(di.FindControl("_chkItem") as CheckBox).Checked = cb.Checked;
}
}html文件中:<HeaderTemplate>
<asp:CheckBox id="_chkAll" runat="server" AutoPostBack="True" EnableViewState="True" OnCheckedChanged="CheckAll_CheckedChanged"></asp:CheckBox>
</HeaderTemplate>当checkbox选中时,事件可以正常触发,但Checked=false时,不触发事件,请大家指教!

解决方案 »

  1.   

    _chkItem的AutoPostBack有没有设置成"True"?
      

  2.   

    全部选中或取消,可以使用js脚本实现,避免造成不停的刷新,如下:
    // 设置是否全选
    function CheckAll(form)
    {
    for(var i = 0; i < form.elements.length; i++)
    {
    var e = form.elements[i];

    if(e.name != "_chkAll" && e.type.toLowerCase() == "checkbox")
    e.checked = form._chkAll.checked;
    }
    }如果你所有的checkbox都在DataGrid中,可以将form改为document.getElementById('dataGrid')
      

  3.   

    建议采用客户端脚本实现,如:
    for(var i = 1;i<document.all["DataGrid1"].rows.length;i++)
    {
       document.all["DataGrid1"].rows[i].cells[所在列号].children[0].checked = document.all["_chkAll"].checked;
    }
      

  4.   

    楼主想checked触发服务端事件吗?page_load()
    {
       chkAll.Attributes["onclick"] = "if(!this.checked){return false;}";
    }
      

  5.   

    _chkItem的AutoPostBack有没有设置成"True"
      

  6.   

    我也觉得AutoPostBack 可能没设置成“True".
      

  7.   

    我只要响应_chkAll的事件,所以其他CheckBox没有设置为AutoPostBack
      

  8.   

    没看到别人的代码吗:
    <HeaderTemplate>
    <asp:CheckBox id="_chkAll" runat="server" AutoPostBack="True" EnableViewState="True" OnCheckedChanged="CheckAll_CheckedChanged"></asp:CheckBox>
    </HeaderTemplate>
    这里面:CheckBox已设置为AutoPostBack=true了,还问人家CheckBox有没有设置为AutoPostBack!我觉得怪怪的.