当我尝试循环访问行时,填充的 GridView 为空

本文关键字:填充 GridView 为空 循环 访问 | 更新日期: 2023-09-27 18:33:03

我有一个填充的网格视图。 它正确显示并显示数据。 它包含一个复选框列,我的目的是当用户单击窗体上的按钮时,它会循环访问 GridView 的行,并通过选中复选框来汇总用户选择的所有行。

(我从 http://asp.net-informations.com/gridview/checkbox.htm 那里得到了如何做到这一点的详细信息)

问题出现在这一点上,我发现就在它到达线之前

foreach (GridViewRow row in grdItems.Rows)

grdItems.Rows.Count = 0,即使 GridView 当前正在显示数据。

网格视图:

<asp:GridView ID="grdItems" AutoGenerateColumns="false" runat="server" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkCtrl" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Item_No" HeaderText="Item No" />
        <asp:BoundField DataField="Amount" HeaderText="Amount" />
    </Columns>
</asp:GridView>

按钮:

<asp:Button ID="cmdOK" runat="server" Text="Add" />

点击按钮:

protected void cmdOK_Click(object sender, EventArgs e)
{
    if (ValidateForm())
    {
        SaveP2P();
    }
}

填充网格视图的方法:

private void FillGrid()
{
    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Snipped for privacy");
    conn.Open();
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
    cmd.CommandText = "Snipped for privacy";
    cmd.Connection = conn;
    System.Data.OleDb.OleDbDataAdapter adp = new System.Data.OleDb.OleDbDataAdapter(cmd);
    System.Data.DataSet ds = new System.Data.DataSet();
    adp.Fill(ds);
    adp.Dispose();
    cmd.Dispose();
    conn.Close();
    grdItems.DataSource = ds;
    grdItems.DataBind();
}

ValidateForm() 方法,其中包含我正在努力使用的代码

private bool ValidateForm()
{
    bool result = true;
    decimal TotalAmount = 0;
    //If I display a message here, it shows grdItems.Rows.Count is 0
    foreach (GridViewRow row in grdItems.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkRow = (row.Cells[0].FindControl("chkCtrl") as CheckBox);
            if (chkRow.Checked)
            {
                TotalAmount += Decimal.Parse(row.Cells[2].Text);
            }
        }
    }
    decimal amount;
    if (decimal.TryParse(txtAmount.Text, out amount))
    {
        if (amount > TotalAmount)
        {
            result = false;
        }
    }
    else
    {
        result = false;
    }
    return result;
}

当我尝试循环访问行时,填充的 GridView 为空

这听起来像是一个视图状态问题,当页面回发到服务器时,它会丢失网格中的所有数据。您是否尝试过在页面上启用视图状态以查看是否返回网格视图行。