返回首页
当前位置: 主页 > 编程语言 > C#教程 >

GridView中的CheckBox取不到值的原因及解决办法

时间:2017-03-31 15:32来源:电脑教程学习网 www.etwiki.cn 编辑:admin

在使用 GridView 过程中,稍有不留意可能会导致 GridView 中的 CheckBox 取不到值,如果不明白原因,可能一个小问题也要折腾半天,多的不说了,先看以下代码:

 

  前台代码:

  <asp:GridView ID="gvProduct" runat="server" AutoGenerateColumns="False" AllowPaging="false" CellPadding="0" CellSpacing="0">
  <FooterStyle BackColor="White" ForeColor="#0cc" />
  <Columns>
    <asp:TemplateField>
      <ItemStyle CssClass="textc" />
      <ItemTemplate><asp:CheckBox ID="cb" runat="server" /></ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="id" Visible="false" HeaderText="ID" />
    <asp:HyperLinkField HeaderText="产品名称" DataNavigateUrlFields="id" DataNavigateUrlFormatString="addProduct.aspx?id={0}" DataTextField="Name" DataTextFormatString="{0}" />
    <asp:BoundField DataField="price" HeaderText="价格" />
    <asp:BoundField DataField="BrowseNum" HeaderText="浏览次数" />
  </Columns>
  <HeaderStyle ForeColor="#000" CssClass="gvHeader" />
  </asp:GridView>
  <div><asp:Button ID="btnDelete" runat="server" Text=" 删 除 " OnClick="btnDelete_Click" /></div>

 

  后台代码:

  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
      BindData();
  }

  private void BindData()
  {
  }

  protected void btnDelete_Click(object sender, EventArgs e)
  {
    for (int i = 0; i < gvProduct.Rows.Count; i++)
    {
      CheckBox cb = (CheckBox)gvCommon.Rows[i].FindControl("cb");
      if (cb.Checked == true)
      {
      }
    }
  }

  如果把 BindData(); 不放在  if (!IsPostBack) 里面,在 btnDelete_Click(object sender, EventArgs e) 中将取不到 CheckBox 的值。

  原因是:当单击删除时,又执行了一次 BindData(),导致 GridView 被重新绑定,从而变了 CheckBox 的状态,所以出现本来 CheckBox是选中了的,结果没选中。所以一定要把 BindData() 放到 if (!IsPostBack) 里。

------分隔线----------------------------
标签(Tag):c#
------分隔线----------------------------
推荐内容
猜你感兴趣