当我尝试循环访问行时,填充的 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;
}
这听起来像是一个视图状态问题,当页面回发到服务器时,它会丢失网格中的所有数据。您是否尝试过在页面上启用视图状态以查看是否返回网格视图行。