2014-09-11 31 views
0

我遇到CheckBox oncheckchanged事件的问题。CheckBox oncheckchanged事件 - 按钮在复选框检查时可见

该复选框位于gridview中,如果复选框被选中,我想要一个按钮可见。

如果选中了一个或多个复选框,但未勾选第1个复选框,即使选中了其他复选框,该按钮也变得不可见。

请求帮助

<asp:Button ID="BtnRequestCartons" runat="server" Text="Request Cartons" 
      BorderStyle="Ridge" onclick="BtnRequestCartons_Click" Visible="False" /> 



<asp:GridView ID="GridViewcrtreq" runat="server" AllowPaging="False"  
      AutoGenerateColumns="False" DataSourceID="SqlDataSource5" CellPadding="0" 
      ForeColor="#333333" GridLines="None" PageSize="5" BorderColor="#CCCCCC" 
      BorderStyle="Solid" BorderWidth="1px" ShowFooter="true" Width="100%" 
      HeaderStyle-CssClass="gvHeader" 
      > 
      <AlternatingRowStyle BackColor="white" ForeColor="#284775" /> 

      <Columns> 

      <asp:TemplateField> 

      <HeaderTemplate> 


    <tr class="gvHeader" align="right"> 
     <th style="width:0px"></th> 
     <th colspan="3"> 

     </th> 
    </tr> 
    <tr class="gvHeader"> 
     <th></th> 
     <th> 
     <asp:CheckBox ID="chkSelectAll" runat="server" Text="" onclick="javascript:SelectAllCheckboxes(this);"/> 

     </th> 
     <th align="left">Carton ID</th> 
     <th align="left">Carton Status</th> 
    </tr> 




      </HeaderTemplate> 


     <ItemTemplate> 

      <asp:CheckBox ID="chkSelectAdd" OnCheckedChanged="GridViewcrtreq_OnCheckedChanged" runat="server" AutoPostBack="True" /> 

      <td align="left"><%# Eval("CartonID")%></td> 
    <td align="left"><%# Eval("CartonStatus")%></td> 


      </ItemTemplate> 

      <FooterTemplate> 



    </FooterTemplate> 


    </asp:TemplateField> 


</Columns> 


      <EditRowStyle BackColor="#999999" /> 
      <FooterStyle BackColor="White" Font-Bold="True" ForeColor="Black" BorderColor="Silver" BorderStyle="Solid" BorderWidth="1" /> 
      <HeaderStyle BackColor="#D6D6C2" Font-Bold="True" ForeColor="Black" HorizontalAlign="Center" BorderWidth="1" BorderStyle="Solid" BorderColor="#999999" /> 
      <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#F7F6F3" ForeColor="#333333" BorderColor="Silver" BorderWidth="1" BorderStyle="Solid" HorizontalAlign="Center" /> 
      <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
      <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
      <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
      <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
      <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
</asp:GridView> 



protected void GridViewcrtreq_OnCheckedChanged(object sender, EventArgs e) 
    { 

      CheckBox chkSelectAdd = sender as CheckBox; 

     if (chkSelectAdd.Checked == true) 
     { 
      BtnRequestCartons.Visible = true; 
     } 
     if (chkSelectAdd.Checked == false) 
     { 
      BtnRequestCartons.Visible = false; 
     } 


    } 

回答

0

最简单的方法是检查每个CheckBoxCell,看看是否有任何每次检查的细胞变化之一的选中状态。

以下代码假定您的CheckBoxColumn是第一列。如果CheckBoxColumn不是第一列(索引:0),那么在之后更改0 .Cells [以匹配CheckBoxColumn的列索引。

protected void GridViewcrtreq_OnCheckedChanged(object sender, EventArgs e){ 
    CheckBox chkSelectAdd = sender as CheckBox; 
    if (chkSelectAdd.Checked == true){ 
     BtnRequestCartons.Visible = true; 
    }else{ 
     foreach (DataGridViewRow row in dataGridView1.Rows) { 
      button1.Enabled = false; 
      if ((bool)row.Cells[0].Value == true) { 
       BtnRequestCartons.Enabled = true; 
       break; 
      } 
     } 
    } 
}