2015-10-20 91 views
1

我在我的Access数据库中的三个表总和乘以两个不同表中的值,然后在DataGridView的列显示

Part (tbl name) 
PartNo 
UnitPrice 

Order(tbl name) 
OrderNo 

OrderLine (tbl name) 
OrderNo 
PartNo 
Quantity 

基本上我要总结所有OrderLines(由单价数量),其中OrderLine.PartNo =部件.PartNo和OrderLine.OrderNo = Order.OrderNo并将该值放入我创建的列中,并将其添加到数据网格视图中,以便即时在订单表中创建小计。

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(); 
} 

回答

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命令的地方设置dataGridViewPrevOrders的订单。然后你想为每个Order执行一个额外的SQL命令来计算总和。最好用一个聪明的SQL SELECT命令查询数量和OrdersNo的总和,在这里你将这两个查询结合起来,并将它设置在一个循环中。

相关问题