【问题标题】:CheckBox oncheckchanged event - button visible on checkbox checkCheckBox oncheckchanged 事件 - 复选框选中时可见的按钮
【发布时间】:2014-11-05 08:29:45
【问题描述】:

我遇到了 CheckBox oncheckchanged 事件的问题。

复选框位于网格视图中,如果选中该复选框,我希望按钮可见。

如果选中一个或多个复选框,则按钮变为可见,但当未选中第一个复选框时,即使选中另一个复选框,按钮也会变为不可见。

请求帮助

<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;
        }


    }

【问题讨论】:

    标签: gridview checkbox oncheckedchanged


    【解决方案1】:

    最简单的方法是检查每个 CheckBoxCell 以查看每次其中一个单元格的检查状态发生变化时是否检查了任何一个。

    以下代码假定您的 CheckBoxColumn 是第一列。如果 CheckBoxColumn 不是第一列(索引:0),则更改 .Cells[ 之后的 0 以匹配 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;
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个代码....

      1. 当它们至少有一个复选框被选中时,按钮是可见的,而所有复选框都未选中时,按钮是不可见的

      这是我的 html 代码:

      <form id="form1" runat="server">
          <div>
      
              <asp:Button ID="btnchkvisible" runat="server" Text="visible" Visible="false" />
      
              <asp:GridView ID="grvsch" runat="server" AutoGenerateColumns="false" BorderColor="#808081" BorderStyle="Solid" BorderWidth="1" Width="99.5%" Style="margin-left: 2px; margin-right: 2px; margin-top: 2px;" ShowHeader="true" ShowFooter="false"
                  GridLines="None">
                  <RowStyle VerticalAlign="Middle" HorizontalAlign="Center" />
                  <HeaderStyle VerticalAlign="Middle" HorizontalAlign="Center" />
                  <Columns>
                      <asp:TemplateField>
                          <HeaderTemplate>
                              <asp:Label ID="lblhdoseno" runat="server" Text="Dose Number"></asp:Label>
                          </HeaderTemplate>
                          <ItemTemplate>
                              <asp:CheckBox ID="chk" runat="server" OnCheckedChanged="chk_CheckedChanged" AutoPostBack="true" />
      
                              <asp:Label ID="lbldoseno" runat="server" Text='<%#Eval("date") %>'></asp:Label>
                          </ItemTemplate>
                      </asp:TemplateField>
                  </Columns>
              </asp:GridView>
      
      
          </div>
      </form>
      

      这是后面的代码

      protected void Page_Load(object sender, EventArgs e)
          {
              if (!Page.IsPostBack)
              {
                  DataTable dtnew = new DataTable();
                  dtnew.Columns.Add("date");
      
      
                  for (int i = 0; i < 5; i++)
                  {
                      var rows = dtnew.NewRow();
                      rows["date"] = DateTime.UtcNow.AddDays(i);
                      dtnew.Rows.Add(rows);
      
                  }
      
                  grvsch.DataSource = dtnew;
                  grvsch.DataBind();
              }
          }
      
      protected void chk_CheckedChanged(object sender, EventArgs e)
      {
          bool onechk = false; 
          foreach (GridViewRow row in grvsch.Rows)
          {
              CheckBox chkbox = (CheckBox)row.FindControl("chk");
      
              if (chkbox.Checked)
              {
                  onechk = true;
                  break;
              }
              else
              {
              }
          }
      
          if (onechk == true)
          {
              btnchkvisible.Visible = true;
          }
          else
          {
              btnchkvisible.Visible = false;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 2021-02-07
        • 1970-01-01
        • 2023-01-29
        • 1970-01-01
        • 2021-04-21
        • 2017-06-11
        相关资源
        最近更新 更多