从两个不同的表中求和,然后在DataGridView列中显示

时间:2015-10-20 15:25:55

标签: c# ms-access datagridview

我的Access数据库中有三个表

Part (tbl name)
PartNo
UnitPrice

Order(tbl name)
OrderNo

OrderLine (tbl name)
OrderNo
PartNo
Quantity

基本上我想在OrderLine.PartNo = Part.PartNo和OrderLine.OrderNo = Order.OrderNo的所有OrderLines中求和(Quantity by UnitPrice)并将值放在我创建的列中并添加到数据网格视图中它会在订单表中动态创建小计。

DataGridViewTextBoxColumn subtotalCol = new DataGridViewTextBoxColumn();
subtotalCol.Name = "SubtotalColumn";
subtotalCol.HeaderText = "Subtotal";
subtotalCol.ReadOnly = true;
dataGridViewPrevOrders.Columns.Add(subtotalCol);

这是我到目前为止的地方,但我不认为我会以正确的方式去做!

for (int i = 0; i < dataGridViewPrevOrders.RowCount - 1; i++)
{
    connection.Open();
    string orderNo = dataGridViewPrevOrders.Rows[i].Cells["OrderNo"].Value.ToString();
    command.CommandText = "SELECT SUM(OL.Quantity * P.UnitPrice) FROM OrderLine OL INNER JOIN (SELECT * FROM [Part]) P ON OL.[PartNo] = P.[PartNo] WHERE [OrderNo] = @OrderNo";
    command.Parameters.Add(new OleDbParameter("@orderNo", orderNo));
    OleDbDataReader reader = command.ExecuteReader();

    while (reader.Read())
    {
        dataGridViewPrevOrders.Rows[i].Cells["SubtotalColumn"].Value = reader["Sub"].ToString();
    }
    connection.Close();
}

1 个答案:

答案 0 :(得分:0)

首先:请添加具体问题!它会导致例外吗?什么是不良行为?请帮助我们帮助您。

乍一看,我只能看到你必须纠正你的sql命令:

SELECT SUM(P.UnitPrice * OL.Quantity) AS sumOfOrder FROM Part AS P 
INNER JOIN OrderLine AS OL ON P.[PartNo] = OL.[PartNo] 
WHERE OL.[OrderNo] = @OrderNo;

提示:关于你的代码,在我看来,你必须有一个额外的SQL命令来将Orders设置为 dataGridViewPrevOrders 。然后,您希望为每个Order执行额外的SQL命令来计算总和。最好使用一个聪明的SQL SELECT命令查询数量和OrdersNo的总和,在这两个命令中组合这两个查询并将其设置在一个循环中。