aspx.cs文件
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            gvAssetInfoQueryInit();//设定allowpaging,pagesize       
        }
        //全选的客户端实现
        string sChkHeader = gvAssetInfoQuery.HeaderRow.FindControl("chkHeader").ClientID.ToString();
        ((CheckBox)gvAssetInfoQuery.HeaderRow.FindControl("chkHeader")).Attributes.Add("onclick", "javascript:SetCheckedUnchecked('" + sChkHeader + "');");
    }aspx文件
function SetCheckedUnchecked(checkAllId){
    var oCheckAll = document.getElementById(checkAllId);
    var oState = oCheckAll.checked;
    var elems=document.Form1.elements;
    for(i=0;i<elems.length;i++){
        if(elems[i].type=="checkbox" && elems[i].id!= oCheckAll.id)
        {
            if(elems[i].checked!=oState)
                elems[i].click();
         }
    }
}
<GridView...>
    <asp:TemplateField>
         <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="20px" />
         <HeaderTemplate>
             <asp:CheckBox id="chkHeader" runat="server" AutoPostBack="False"/>
         </HeaderTemplate>
         <ItemTemplate>
              <asp:CheckBox ID="chkDelete" runat="server" />
         </ItemTemplate>
    </asp:TemplateField>   
</GridView>
在!IsPostBack的情况下,模版列的全选是没有问题的。但是如果是IsPostBack的情况(例如点击“编辑”),就会出现点击头模版,其它的checkbox不能全选。查看html源码,发现里面根本没有Attribute.Add函数,请问这是怎么回事?

解决方案 »

  1.   

    为什么要用服务器端代码?完全用客户端代码不行么?
    在aspx写全选函数,在Aspx页面调用。
      

  2.   

    function SelectAll()
    {
        var a=document.getElementsByTagName("input");
        for(var j=0;j<a.length;j++)
        {
            if(a[j].type=="checkbox")
                a[j].checked=document.all.CheckAll.checked;
        }
    }如果还有某些复选框要加以限制,可以加属性用以判断,如a[j].type=="checkbox"
      

  3.   

    写成这样的会好一些
    <GridView...>
        <asp:TemplateField>
             <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="20px" />
             <HeaderTemplate>
                 <input type="checkbox" name="myCheck" value="<%# Container.DataItemIndex %>">
             </HeaderTemplate>
             <ItemTemplate>
                  <asp:CheckBox ID="chkDelete" runat="server" />
             </ItemTemplate>
        </asp:TemplateField>   
    </GridView>
    服务器端 Request.Form("myCheck")取得行号