在GridView中获取CheckBox值的问题

时间:2013-05-27 21:33:15

标签: c# asp.net asp.net-4.0

我有一个包含CheckBox控件的GridView。一旦用户检查了他们想要的行,他们就会单击一个按钮,我必须为每个选中的行更新数据库。

我有代码通过gridview行迭代并查看复选框值,但它总是为false,即使已经检查过。我确实在ignore中引用了一个复选框,但它始终是false。我在这里缺少什么?

aspx.cs文件:

protected void Ignore_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in grdNotReceived.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox ignore = (CheckBox)row.FindControl("chkIgnore");

            if (ignore.Checked)
            {
                // Update Database
            }
        }
    }
}

.aspx页面:

<asp:GridView ID="grdNotReceived" runat="server"
    Width="600px"
    CssClass="mGrid"
    AlternatingRowStyle-CssClass="alt"
    PagerStyle-CssClass="pgr" AutoGenerateColumns="false">
<AlternatingRowStyle CssClass="alt"/>
<Columns>
    <asp:BoundField DataField="Store" HeaderText="Store" />
    <asp:BoundField DataField="Dept" HeaderText="Dept" />
    <asp:BoundField DataField="Type" HeaderText="Type" />
    <asp:BoundField DataField="RefNumber" HeaderText="RefNumber" />
    <asp:BoundField DataField="Date" HeaderText="Date" />
    <asp:BoundField DataField="Vendor" HeaderText="Vendor" />
    <asp:BoundField DataField="Total" HeaderText="Total" />
    <asp:TemplateField>
        <ItemTemplate>
            <asp:CheckBox ID="chkIgnore" runat="server" Checked="false" />
        </ItemTemplate>
        <EditItemTemplate>
            <asp:CheckBox ID="chkIgnore" runat="server" Checked="false" />
        </EditItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>

GridView数据绑定方法:

protected void LoadExceptions()
{
    Database db = new Database();
    SqlCommand sql = new SqlCommand();

    sql.CommandText = "getSobeysNotReceived";

    this.grdNotReceived.DataSource = db.GetSprocDR(sql);
    this.grdNotReceived.DataBind();

    db.Close();
}

1 个答案:

答案 0 :(得分:0)

如果您的数据绑定函数(LoadExceptions())在页面加载中被调用(如Load事件或类构造函数),那么它将覆盖用户在表单中所做的更改。

如果页面处于回发状态,请勿进行数据绑定,您可以在致电if (!Page.IsPostBack)之前添加LoadExceptions(),也可以更新LoadExceptions()进行检查:

protected void LoadExceptions()
{
    if (!Page.IsPostBack)
    {
        Database db = new Database();
        SqlCommand sql = new SqlCommand();

        sql.CommandText = "getSobeysNotReceived";

        this.grdNotReceived.DataSource = db.GetSprocDR(sql);
        this.grdNotReceived.DataBind();

        db.Close();
    }
}