我的gridview1的第3列我加了一个模板列,然后里面放了一个checkbox控件,我想在girdview外面放一个checkbox,当此checkbox被选中的时候,girdview里面的checkbox全部选中,改在checkbox的哪个事件里写什么代码,非常简单,需要快速实现,

解决方案 »

  1.   

    放个HTML的就成了客户端直接JS全选~
      

  2.   

    我想用.net实现,你说用html实现就给下代码,
      

  3.   

    checkbox有啥事件,你就在里面写呗。onclick?oncheck?函数
    判断checkbox是否选中
    遍历整个gridview设置选中状态
      

  4.   


    protected void chkAllSub_CheckedChanged(object sender, EventArgs e)
        {
                if (chkAllSub.Checked)
                    {
                        foreach (GridViewRow gvrCriterion in gvCriterion.Rows)
                        {
                            CheckBox chkGvrSub = (CheckBox)gvrCriterion.FindControl("chkSub");
                            chkGvrSub.Checked = true;
                        }
                    }
                  ELSE
                    {
                      foreach (GridViewRow gvrCriterion in gvCriterion.Rows)
                        {
                            CheckBox chkGvrSub = (CheckBox)gvrCriterion.FindControl("chkSub");
                            chkGvrSub.Checked = FALSE;
                        }                }
                
            }
    //chkAllSub GridView外的checkbox
    //chkSub girdview里面的checkbox
      

  5.   

    这是我的代码,实现不了
     protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (!IsCallback)
            {
                for (int i = 0; i < GridView2.Rows.Count; i++)
                {                Response.Write("一共有" + i + "项");
                    CheckBox chk = (CheckBox)GridView2.Rows[i].FindControl("CheckBox2");
                    if (chk.Checked == false)
                    {
                        chk.Checked = true;
                    }            }
                
     
            }
            
            
        }
      

  6.   


    能实现又简单好看不就好了?JS实现起码不会ispostback哇~获得值也很容易~Request.Form.Get("checkboxname")就能得到勾了的~
      

  7.   

    <asp:TemplateField HeaderText="&lt;input type='checkbox' id='chk' name='chk' onclick='checkJs(this.checked);'  /&gt;全选">
                    <ItemTemplate>
                        <input type="checkbox" id="checkboxname" name="checkboxname" value='<%# DataBinder.Eval(Container.DataItem, "Id")%>' onclick='SingleCheckJs();' />
                    </ItemTemplate>
                    <ItemStyle BorderColor="White" />
                </asp:TemplateField>前台~
      

  8.   

    这个是实现代码,希望对你有帮助<thead>
      <tr>
         <th class="thCenter" nowrap>
    <input type="checkbox" name="seleckAll" value="on" onclick="checkAll(this,form);" class="inpCheck">
       </tr>
    <tr id="trDetail0" ondblclick="detail();" onclick="lineSelect(trDetail0);">
        <td class="tdCenter" nowrap>
          <input type="checkbox" name="selItem" value="on" class="inpCheck">
        </td>
    </tr>
      

  9.   

    为什么我选中外面的checkbox,或者不选中,都没变化呢,真晕!
      

  10.   

    在gridview外边不要放checkbox,不然当它取消选择时应该是什么功能就难以捉摸了。你可以放两个button,如下声明:    <input type="button" value="全选" onclick="<%= Get全选脚本 %>" />
        <input type="button" value="反选" onclick="<%= Get反选脚本 %>" />
    然后,页面的代码中实现这两个脚本(假设你的GridView的ID是GridView1,而每一行中要处理的CheckBox的ID是chb):    protected string Get反选脚本
        {
            get
            {
                string scp = "var ids=[";
                foreach (GridViewRow r in this.GridView1.Rows)
                {
                    CheckBox ch = (CheckBox)r.FindControl("chb");
                    if (ch != null)
                        scp += "'" + ch.ClientID + "',";
                }
                scp += "''];for(i=0;i<ids.length-1;i++) {var obj=document.getElementById(ids[i]);obj.checked=!obj.checked;};";
                return scp;
            }
        }    protected string Get全选脚本
        {
            get
            {
                string scp = "var ids=[";
                foreach (GridViewRow r in this.GridView1.Rows)
                {
                    CheckBox ch = (CheckBox)r.FindControl("chb");
                    if (ch != null)
                        scp += "'" + ch.ClientID + "',";
                }
                scp += "''];for(i=0;i<ids.length-1;i++) {var obj=document.getElementById(ids[i]);obj.checked=true;};";
                return scp;
            }
        }不管你的页面上还有没有其它的GridView,页面上还有没有其它的CheckBox,以及待处理的GridView的每一行中除了这个CheckBox还有没有其他的CheckBox,不管你是开发aspx还是ascx,上面这个设计总是很简洁直观并且精确地工作的。有些其它写法,并不能保证在上述情况下精确地工作,要求你在设计时有很多额外的注意点,而且就算注意了这些也不能确保正确。
      

  11.   

    我按照5楼的代码重新写了一下
     if (!IsCallback)
            {
                if (CheckBox1.Checked)
                {
                    foreach (GridViewRow gr in GridView2.Rows)
                    {
                        CheckBox chk = (CheckBox)gr.FindControl("CheckBox2");
                        chk.Checked = true;                }            }
                else
                {
                    foreach (GridViewRow gr in GridView2.Rows)
                    {
                        CheckBox chk = (CheckBox)gr.FindControl("CheckBox2");
                        chk.Checked = false;                }
                }
            }
      

  12.   

    我换了个button,结果加了2句就搞定了,但是有刷新,
    foreach (GridViewRow gr in GridView2.Rows) 
                    { 
                        CheckBox chk = (CheckBox)gr.FindControl("CheckBox2"); 
                        chk.Checked = true;                 } 
      

  13.   

    不用那么复杂!    /// <summary>
        /// 处理全选按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                CheckBox cb1 = (CheckBox)(GridView1.Rows[i].Cells[0].FindControl("cb"));
                cb1.Checked = CheckBox1.Checked;
            }
        }