如何根据 DataGridView 中包含的数据从 DataSet 向 DataGridView 中插入值?

How to insert value in a DataGridView from a DataSet based on data contained in a DataGridView?

我需要填写一份 DataGridView,其中已包含所有项目的列表。这基于 DataSet 中包含的材料移动记录。 DataGridView 已经有了所有项目,例如:A、B、C、D 等。程序将根据DataSet 中包含的股票的变动检查每个项目的当前余额。

我想在另一个里面做一个foreach。 DataGridView 逐行查找项目名称,另一个内部 foreach 在记录股票变动的数据集中进行搜索。

我是这样做的,但它只填充了 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();
}

此致!

添加值时仅使用 1 行 CurrentRow

datagridview.CurrentRow.Cells["Balance"].Value = result;

如果你 foreach 通过:

foreach (DataGridViewRow dr in datagridview.Rows)

你还应该使用变量:

dr.Cells["Balance"].Value = result;