2013-05-01 81 views
0

我正在做这个跟我的GridView控件在aspx文件为什么checkbox_CheckedChanged事件不会被触发?

<asp:GridView ID="gridDepartement" runat="server" CellPadding="4" ForeColor="Black" 
        GridLines="Horizontal" AutoGenerateColumns="False" BackColor="White" 
        BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" AllowSorting="True" > 
        <Columns> 
         <asp:templatefield> 
          <HeaderTemplate> 
           <asp:CheckBox ID="cbSelectAll" 
            runat="server" AutoPostBack="true" 
            OnCheckedChanged="cbSelectAll_CheckedChanged" /> 
          </HeaderTemplate> 
          <itemtemplate> 
           <asp:CheckBox Id="cbSelectOne" runat="server"/> 
          </itemtemplate> 
         </asp:templatefield> 
         <asp:CommandField ShowEditButton="True" ItemStyle-Width="20"/> 
         <asp:CommandField ShowDeleteButton="True" ItemStyle-Width="20"/> 
         <asp:CommandField ShowSelectButton="True" ItemStyle-Width="20"/> 
         <asp:boundfield headertext="Departement Code" datafield="departementcode" 
          ItemStyle-HorizontalAlign="Center"/> 
         <asp:boundfield headertext="Departement Name" datafield="departementname" 
          ItemStyle-HorizontalAlign="Center" /> 
         <asp:boundfield headertext="Created By" datafield="createby" 
          ItemStyle-HorizontalAlign="Center" /> 
         <asp:boundfield headertext="Created Date" datafield="createdate" 
          ItemStyle-HorizontalAlign="Center" /> 
         <asp:boundfield headertext="Updated By Name" datafield="updateby" 
          ItemStyle-HorizontalAlign="Center" /> 
         <asp:boundfield headertext="Last Update" datafield="lastupdate" 
          ItemStyle-HorizontalAlign="Center" /> 
        </Columns> 
        <FooterStyle BackColor="#CCCC99" ForeColor="Black" /> 
        <HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" /> 
        <PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" /> 
        <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" /> 
        <SortedAscendingCellStyle BackColor="#F7F7F7" /> 
        <SortedAscendingHeaderStyle BackColor="#4B4B4B" /> 
        <SortedDescendingCellStyle BackColor="#E5E5E5" /> 
        <SortedDescendingHeaderStyle BackColor="#242121" /> 
       </asp:GridView> 

,我想检查所有复选框时复选框头点击,我将事件添加到我的网格,并在复选框checkchanged事件添加以下代码:

protected void cbSelectAll_CheckedChanged(object sender, EventArgs e) 
     { 
      bool chkFlag = false; 

      CheckBox cbHD = (CheckBox)gridDepartement.HeaderRow.FindControl("cbSelectAll"); 

      if (cbHD.Checked) 
      { 
       chkFlag = true; 
      } 
      foreach (GridViewRow dr in gridDepartement.Rows) 
      { 
       CheckBox chk = (CheckBox)dr.Cells[0].FindControl("cbSelectOne"); 
       chk.Checked = chkFlag; 
      } 
     } 

页面加载代码:

protected void Page_Load(object sender, EventArgs e) 
     { 
      //if(!IsPostBack) 
      //{ 
       DataSourceDepartement dpt = new DataSourceDepartement(); 

       DataSourceDepartementTableAdapters.departementTableAdapter 
       adp = new DataSourceDepartementTableAdapters.departementTableAdapter(); 

       //bind gridview to datatable 
       gridDepartement.DataSource = adp.GetDataDepartement(); 
       gridDepartement.DataBind(); 
      //} 
     } 

确定它的工作了,但现在的问题是,我的复选框事件仅trigered当它为v alue转为检查/ true,但是当我取消选中/将其设为false时,它不会触发,我应该修复哪些部分?

+0

哪个事件绑定你的GridView? – 2013-05-01 04:44:54

+0

页面加载事件。 – NomNomNom 2013-05-01 04:46:04

+0

你可以把代码 – 2013-05-01 04:46:38

回答

0
function SelectAll(objcheckbox) 
     { 
      var HeaderCBControl = objcheckbox; 
      //var table = getParentByTagName(HeaderCBControl, 'table'); 
      var Inputs = document.getElementById('CenterContent_gridDepartement').getElementsByTagName("input"); 

      for (var n = 0; n < Inputs.length; ++n) 
       if (Inputs[n].type == 'checkbox') 
       { 
        Inputs[n].checked = HeaderCBControl.checked; 
       } 
      return false; 
     } 
     </script> 
0

你的Gridview在复选框事件之前再次被绑定,这就是为什么你的事件没有被调用而不是回发所以把你的gridview绑定语句放在下面的块中。

if (!Page.IsPostBack) 
     { 
gridDepartement.DataSource = adp.GetDataDepartement(); 
       gridDepartement.DataBind(); 
} 
+0

我试过了,但问题是,如果我把内部绑定代码!page.ispostback,做了回发后,我的网格不显示任何东西。 – NomNomNom 2013-05-01 05:30:35

+0

只是把整个页面加载代码在该块 – 2013-05-01 08:54:48

1

为什么要在服务器端做这件事。在java脚本中执行。这将是更好的性能水平。使用此代码:::`功能CheckAll(objparentcheckbox){ var HeaderCheckboxControl = objparentcheckbox var table = getParentByTagName(HeaderCheckboxControl,'table');

 //get all the control of the type INPUT in the base control. 
     var Inputs = table.getElementsByTagName("input"); 

     for (var n = 0; n < Inputs.length; ++n) 
      if (Inputs[n].type == 'checkbox') { 
       Inputs[n].checked = HeaderCheckboxControl.checked; 
      } 
     return false; 
    } and in grid:::: <HeaderTemplate> 
             <asp:CheckBox ID="ChkSelectAll" onclick="CheckAll(this)" runat="server" /> 
            </HeaderTemplate>` 
+0

王子它显示此错误ReferenceError:getParentByTagName未定义。 – NomNomNom 2013-05-01 05:59:11

+0

我不知道为什么会出现这个错误。你可以通过使用Fire Bug控制台来检查这个错误。否则,我有更好的解决方案。请检查这个链接::::: http://www.aspdotnet-suresh.com/2011/03/how-to-selectdeselect-checkboxes-in.html – Prince 2013-05-01 06:49:16

+0

现在它正在工作,谢谢你的王子。 – NomNomNom 2013-05-01 07:56:34

相关问题