【发布时间】:2016-12-30 04:43:41
【问题描述】:
我需要填写一个已经包含所有项目列表的DataGridView。这基于DataSet 中包含的材料的移动记录。 DataGridView 已经拥有所有项目,例如:A、B、C、D 等。程序将根据 DataSet 中包含的库存变动检查每个项目的当前余额。
我想在另一个内部做一个 foreach。 DataGridView 逐行查找项目名称,而其他内部 foreach 则在记录了股票走势的 dataSet 中进行搜索。
我是这样做的,但它只填充了Balance 列的第一行。
void FillDataGrid()
{
var result = 0;
string strRowMaterial = string.Empty;
Conection ca = new Conection();
string sql = "";
sql += " Select ";
sql += " idRegMovement, CatMovement, NameMovement, codMaterial, AmountMovemented ";
sql += " From RegMovement ";
sql += " ORDER BY idRegMovement ";
ca.Connect();
OleDbDataAdapter da = new OleDbDataAdapter(sql, ca.cx);
DataSet ds = new DataSet();
da.Fill(ds, "RegMovements");
if (ds.Tables["RegMovements"].Rows.Count == 0)
{
ca.Disconnect();
}
else
{
foreach (DataGridViewRow dr in datagridview.Rows)
{
strRowMaterial = Convert.ToString(dr.Cells["codMaterial"].Value);
foreach (DataRow row in ds.Tables["RegMovements"].Rows)
{
if (string.Compare(row["codMaterial"].ToString(), strRowMaterial, StringComparison.InvariantCultureIgnoreCase) == 0)
{
var Amount = Convert.ToInt32(row["AmountMovemented"]);
if (string.Compare(row["CatMovement"].ToString(), "Input", StringComparison.InvariantCultureIgnoreCase) == 0)
result += Amount;
else
result -= Amount;
}
else
{
result = 0;
}
}
datagridview.CurrentRow.Cells["Balance"].Value = result;
}
}
ca.Disconnect();
}
问候!
【问题讨论】:
标签: c# winforms datagridview dataset