DataGrid 用CheckBox全选与到的问题: 点了下全选 能全选,但是不能取消 .大家帮着看下谢谢.<asp:DataGrid Id="MyDataGrid" Runat="server">
   <Columns>
     <asp:TempLateColumns>
         <headerTemplate>
              <asp:CheckBox id="ck1" runat="server" AutoPostBack="True" /> 
         </haerderTemplate>
         <ItemTemplate>
                <asp:CheckBox id="ck2" runat="server" /> 
         </ItemTemplate>
     </asp:TemplateColumns>
   </Columns>
</asp:DataGrid>
<asp:CheckBox id="ck3" runat="server" AutoPostBack="True" />  //这个放外面专门测试是否可全选的protected void Item_CreateItemTemplate(object e,DataGridItemEventArgse)
{
    if(e.Item.ItemType == ListItemType.Header)
   {
      CheckBox chk = (CheckBox)e.Item.FindControl("ck1");
      chk.CheckedChanged +=new EventHandler(chk_CheckedChanged); //注册事件
   }
}protected void chk_CheckedChanged(object sender ,EventArgs e)
{
   CheckBox allchk = sender as CheckBox ;
   foreach (DataGridItem i in MyDataGrid.Items)
   { 
        chk = (CheckBox)i.FindControl("ck2");
        chk .Checked = allchk .Checked;
   }
}ck3.CheckedChanged +=new EventHandler(chk_CheckedChanged); //ck3也注册下事件好做对比.
代码运行后 ck1 点下能全选,但在点 就是取消,但怎么也不会取消,页面会回发,但是不会触发事件, 就是点一下有用接着在点一下就没用,一下有用 一下没用,到底是那出问题了。ck3 点下能全选也能全部取消.
头痛,该注册的事件都注册了,为什么会有这种情况呢?

解决方案 »

  1.   

    protected   void   chk_CheckedChanged(object   sender   ,EventArgs   e) 

          foreach   (DataGridItem   i   in   MyDataGrid.Items) 
          {   
                 CheckBox chk   =   (CheckBox)i.FindControl( "ck2 "); 
                   if (!chk.Checked)
                {
                    chk.Checked = true;
                }
                else
                {
                    chk.Checked = false;
                }    
        } 
    } 试下
      

  2.   

     <asp:CheckBox   id= "ck1 "   runat= "server "   AutoPostBack= "True " OnCheckedChanged="CheckBox2_CheckedChanged">
      

  3.   

    <asp:CheckBox id=   "ck1"  runat=   "server"  AutoPostBack="True" OnCheckedChanged="Ck1_CheckedChanged"> 
    你试下这个.
      

  4.   

    看以下你绑定数据时是否位于
    !Ispostback里面
      

  5.   

    兄弟啊我给你个例子看看
        <script type="text/javascript">
            function chooseAll(sender)
            {
                var inputs = document.all.tags("INPUT");
                //编历页面上所有的input
                for(var i = 0; i < inputs.length; i++)
                {
                    //如果此input元素的类型为checkbox,并且其id中包含chkSelect
                    if(inputs[i].type == "checkbox" && inputs[i].id.indexOf("chkSelect") >= 0)
                    {
                        //设置此复选框的checked与全选复选框相同
                        inputs[i].checked = document.getElementById (sender).checked;
                    }
                }
            }
        </script>
    </head>
    <body background="../../images/BackGround/background.gif">
    <center >
        <form id="form1" runat="server">
        <div>
            <uc1:SiteHeader ID="SiteHeader2" runat="server" />
            <table width ="1000px" bgcolor ="#e6e6fa">
                <tr>
                    <td style="width: 200px; height: 166px;" valign ="top" >
                       <DIV id=left04><IFRAME src="../../StyleSheet/caidan.htm" frameBorder="0" 
    width="100%" scrolling="no" height="166px"></IFRAME></DIV>
                    </td>
                    <td style="width: 595px; height: 166px;" valign ="top" >
                    <DIV id=right01><IFRAME src="../../StyleSheet/topbook.htm" 
    frameBorder="0" width="100%" height ="166px" scrolling="no"></IFRAME></DIV>
                    </td>
                    <td align ="left" valign ="top" style="height: 166px"  >
                    <h3 style ="color :Red">精品在线:<img alt="news" src ="../../StyleSheet/new.gif" /></h3>
                    <img alt="New" align ="absmiddle"   src="../../StyleSheet/dongman.jpg" /><br />
                    <h4 align ="right" ><a href ="http://www.bililong.blog.163.com/edit" title="更多好东西">更多好东西>></a></h4>
                    </td>
                </tr>
                <tr>
                    <td valign ="top" width ="995px" colspan ="3" align ="center" >
                   <a href="listtopic.aspx" >进入搜索区<img alt="进入" src="../Command/Admin.gif" /></a>&nbsp;&nbsp;&nbsp;<a href="listreplies.aspx" >进入回复区<img alt="进入" src="../Command/Admin.gif" /></a>&nbsp;&nbsp;&nbsp;<a href="../Default.aspx">返回<img alt="进入" src="../Command/Up.gif" /></a>
        <asp:GridView ID="grvUsers" Width ="900px" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="UserID" DataSourceID="sdsUsers" PageSize="8" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCancelingEdit="grvUsers_RowCancelingEdit" OnRowDataBound="grvUsers_RowDataBound" OnRowDeleting="grvUsers_RowDeleting" OnRowEditing="grvUsers_RowEditing" OnRowUpdating="grvUsers_RowUpdating" OnRowUpdated="grvUsers_RowUpdated">
            <Columns>
            <asp:TemplateField>
                <ItemStyle HorizontalAlign ="Center" />
                <ItemTemplate>
                    <asp:CheckBox ID="chkSelect" runat="server" />
                </ItemTemplate>
                <HeaderTemplate>
                    <asp:CheckBox ID="chkAll" runat="server" />
                </HeaderTemplate>
            </asp:TemplateField>
    后台如下:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class Forums_Admin_UserManager : System.Web.UI.Page
    {
        #region 请双击打开
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
            }
        }
        protected void grvUsers_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            ImageButton ibtnTemp;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ibtnTemp = e.Row.FindControl("ibtnDelete") as ImageButton;
                if (ibtnTemp != null)
                {
                    ibtnTemp.Attributes.Add("onclick", "if(!confirm('你确定要删除" + ((DataRowView)e.Row.DataItem).Row["UserName"].ToString() + "吗?'))return false;");
                }
                //鼠标经过时,行背景色改变
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#E6F5FA'");
                //鼠标移出时,行背景色改变
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                CheckBox chkAll = (CheckBox)e.Row.FindControl("chkAll");
                chkAll.Attributes.Add("onclick", "chooseAll('" + chkAll.ClientID + "')");
            }
        }
        protected void grvUsers_RowEditing(object sender, GridViewEditEventArgs e)
        {
            if (grvUsers.Rows[e.NewEditIndex].Cells[2].Text.ToLower() == "admin")
            {
                //取消编辑
                e.Cancel = true;
            }
            else
            {
                //编辑状态时显示Footer
                grvUsers.ShowFooter = true;
                grvUsers.Columns[3].FooterText = "可编辑";
                grvUsers.Columns[3].FooterStyle.ForeColor = System.Drawing.Color.Red;
            }
        }
        protected void grvUsers_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            //取消编辑时隐藏Footer
            grvUsers.ShowFooter = false;
        }
        protected void grvUsers_RowUpdated(object sender, GridViewUpdatedEventArgs e)
        {
            //更新完毕时隐藏Footer
            grvUsers.ShowFooter = false;
        }
        protected void grvUsers_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            if (grvUsers.Rows[e.RowIndex].Cells[2].Text.ToLower() == "admin")
            {
                //取消删除
                e.Cancel = true;
            }
        }
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            CheckBox chk;
            //编历GridView的每一行
            foreach (GridViewRow grv in grvUsers.Rows)
            {
                //查找chkSelect控件
                chk = grv.FindControl("chkSelect") as CheckBox;
                //如果找到
                if (chk != null)
                {
                    //并且其为选种状态
                    if (chk.Checked)
                    {
                        //执行删除功能
                        sdsUsers.DeleteParameters["UserID"].DefaultValue = grvUsers.DataKeys[grv.RowIndex].Value.ToString();                    sdsUsers.Delete();
                    }
                }
            }
        }
        protected void grvUsers_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            //if (Page.IsValid)
            //{
            //    string oldEmail = ((TextBox)grvUsers.Rows[e.RowIndex].FindControl("txtEmail")).Text.Trim();
            //    string newEmail = e.NewValues["Email"].ToString();
            //    lblMessage.Text = "原邮箱号:" + oldEmail + "改后为:" + newEmail;
            //}
            if (ValidEmail.IsEmailReg(((TextBox)grvUsers.Rows[e.RowIndex].FindControl("txtEmail")).Text.Trim()))
            {
                lblMessage.Text = "邮箱地址已存在,请重新输入!";
                e.Cancel = true;
            }
        }    #endregion
    }