gridview中的checkbox点击两次后始终为false

第一步:在页面中加一个隐藏域,用来放置选择的键值

<input id="TextBox1" runat="server" style="width: 39px" type="hidden" />

第二步:给GridView添加模板列,包括头模板和项模板:头模板加一个选择框,选择的时候调用一个名为selectAll(this)的JavaScript function,该function选择或反选GridView中的所有项,并将选择的项的键值保存在第一步添加的隐藏域中,项模板也加一个input type="checkbox"的选择框,value值为绑定的键值,选择的时候调用一个名为AddRemoveValues(this)的JavaScript function,该function将选择或反选GridView项的键值添加到隐藏域或从隐藏域中移除

<asp:TemplateField HeaderStyle-HorizontalAlign="left">
                    <HeaderTemplate>
                        <asp:CheckBox id="chk_SelectAll" Text="全选" runat="server" checked="false" οnclick="javascript:return selectAll(this)" />
                    </HeaderTemplate>
                   <ItemTemplate>                   
                      <input type="checkbox" id="chkSelect" runat="server" checked="false" οnclick="AddRemoveValues(this)"
                      Value='<%# DataBinder.Eval(Container.DataItem,"ID") %>' name="chkSelect"/>                                  
                   </ItemTemplate>
                </asp:TemplateField>

第三步:在GridView的DataBound事件中加入以下代码,使GridView选中的数据项在翻页以后再回到原来的数据页仍然能够被选中

                HtmlInputCheckBox chkSelect = (HtmlInputCheckBox)e.Row.FindControl("chkSelect");
                HtmlInputHidden txtHidden = (HtmlInputHidden)Page.FindControl("TextBox1");
                string txtHiddenValue = txtHidden.Value.ToString();
                if (txtHiddenValue.Contains(chkSelect.Value.ToString().Trim()))
                {
                    chkSelect.Checked = true;
                }

第四步:添加JavaScript function

function AddRemoveValues(oChk)    //选择或反选单项时调用的function
    { 
         if(oChk.checked)
         {
             document.getElementById('TextBox1').value +=oChk.value + "," ;
             var allSelect = true;
             for(var   i=0;i<form1.elements.length;i++)   
             {   
                 if(form1.elements[i].type=="checkbox")   
                 {
                     if(form1.elements[i].checked == false && form1.elements[i].id != "chk_SelectAll")
                     {
                         allSelect = false;
                     }
                 }
             }
             
             if(allSelect)
             {
                 document.getElementById('chk_SelectAll').checked = true;
             }
         }
         else
         {
             document.getElementById('TextBox1').value = document.getElementById('TextBox1').value.replace(oChk.value+",",""); 
             document.getElementById('chk_SelectAll').checked = false;
         }
    }

function selectAll(chkAll)   //全选或反选时调用的function
    {
        if(chkAll.checked)
        {
            var txt = document.getElementById('TextBox1');
            for(var   i=0;i<form1.elements.length;i++)   
            {   
                if(form1.elements[i].type=="checkbox")   
                {
                    form1.elements[i].checked = true;
                    if(form1.elements[i].value != "on")
                    {
                        txt.value += form1.elements[i].value + ',';
                    }
                }
            }
        }
        else
        {
            for(var i=0;i<form1.elements.length;i++)   
            {   
                if(form1.elements[i].type=="checkbox")   
                {
                    form1.elements[i].checked = false;
                }
            } 
            document.getElementById('TextBox1').value = '';
        }
    }

第五步:在页面后台代码中获取选择的ID
方法是按照上面的来做的。 全选的话,一直可以用,如果不全选的话,单独的checkbox第一次选中为true,第二次为false
并且之后一直都为false ,设置为checked=true也无法改变值,并且checkbox打上的钩一直无法去掉请问为什么呢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值