不知道你是如何创建的数据表,我会给你如何计算线总和值和表中总数更直接的方式。例如创建一个完整的行项目,我可以建立一个数据表通过以下方式
var table = new DataTable();
table.Columns.Add("Id", typeof(Int32));
table.Columns.Add("Code", typeof(String));
table.Columns.Add("Description", typeof(string));
table.Columns.Add("Quantity", typeof(Int32));
table.Columns.Add("ItemPrice", typeof(decimal));
table.Columns.Add("SubTotal", typeof(decimal), "Quantity*ItemPrice");
table.Columns.Add("Taxes", typeof(decimal), "SubTotal*0.21");
table.Columns.Add("LineTotal", typeof(decimal), "SubTotal + Taxes");
在你在这里看到的是,计算逻辑就成了我现在的数据表的功能。我不必分别计算所有项目,在添加行后,SubTotal
,Taxes
和LineTotal
会自动计算。这是通过使用完成DataColumn.Expression
那么我可以添加项目,例如像:
table.Rows.Add(1, "DECA10", "Coffee decafinated", 1, 2.5);
table.Rows.Add(2, "ESPR", "Espresso", 2, 2.5);
,然后我可以用DataTable.Compute
功能来计算我需要的总和,就像这样:
decimal subTotal = (decimal)table.Compute("Sum(SubTotal)", "");
decimal total = (decimal)table.Compute("Sum(LineTotal)", "");
decimal taxTotal = (decimal)table.Compute("Sum(Taxes)", "");
Int64 quantityTotal = (Int64)table.Compute("Sum(Quantity)", "");
然后告诉他们(无论是在你的程序中,或在我的情况下,控制台内),像这样:
Console.WriteLine("Sub total = {0} €", subTotal);
Console.WriteLine("Taxes = {0} €", taxTotal);
Console.WriteLine("Total = {0} €", total);
Console.WriteLine("Quantity = {0} pieces", quantityTotal);
这个小的演示程序的例子,你可以找到一个dotnetfiddle here
我不明白,从你添加的图像,一切似乎是正确的,你有1行,成本10€和2.1欧元(21%的比利时税),所以,你的问题是什么? – Icepickle
另外请注意,你从总数中减去0,所以,你几乎不能说这是一个变化;) – Icepickle
当我删除该行仍然显示比利时税收,然后总额是2.1欧元,需要为0。 –