主页 > 软件教程

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

软件教程 2024-01-20

在使用 GridView 过程中,稍有不留意可能会导致 GridView 中的 CheckBox 取不到值,如果不明白原因,可能一个小问题也要折腾半天。

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) 里。


标签: C#

电脑软硬件教程网 Copyright © 2016-2030 www.computer26.com. Some Rights Reserved.