[英]calculation between two rows of DataTable in C#
我有将两个表附加在一起的数据表。 我有很多行,其中两行是总计和费率。(请注意,这是我的数据表中的行)。 我想通过将两行相乘来计算总数。 我该怎么做。 数据表来自sql Compact,我无法对其进行计算,因为并非总是需要此计算,具体取决于某些设置。 它甚至可以是百分比计算或其他任何东西。 有什么方法可以在数据表的两行之间执行计算? 我正在使用C#。 我尝试了计算功能,但无法实现。 该表可能如下所示:
标题Prod1 Prod2 Prod3 10 20 30 0 20 10 5 6 0 50 0 0总计65 46 40费率10 20 10金额650920400
即Total = Prodi之和,i = 1,2,3
和Amount = Total * Rate。 应该有一些方法可以实现这一目标。 我该怎么办???
提前致谢。
您可以做的是:
编辑
也许我不太了解您的数据结构。 因此,让我们看一些情况。 如果您不在那儿,请提供更多有关数据表中的一行实际外观的详细信息:
案例a :数据存储在列中,您也希望该行中的总计和金额列
Value1 Value2 Value3 Rate Total Amount
1 5 3 10 ? ?
您可以如下修改SQL语句:
SELECT Value1, Value2, Value3, Rate,
(Value1+Value2+Value3) AS Total,
((Value1+Value2+Value3) * Rate) AS Amount
FROM <table>
另外,如果您在C#中使用类型化数据集,则可以使用普通的SELECT * ...
语句,将具有各自表达式( Expression
属性-等效于计算列)的列手动添加到类型化数据集中的表中。
情况b :数据存储在行中,您也希望“总计”和“金额”也是行
RowTitle Value
Value1 1
Value2 5
Value3 2
Rate 10
现在,您需要在C#中使用for循环对所有行进行迭代,对值求和,然后使用RowTitle
“ Total”和“ Amount”创建两个新行,并将它们添加到表中。
编辑2
您,因此我从您的第二条评论中了解到您的数据库中实际上有两个表。 一种包含实际数据,另一种包含费率。 现在,您可以根据用户定义的设置从这些表中进行选择,实际上,您在C#中的数据集中获得了两个表-一个用于该数据,一个用于Rate。
AFAIK SQL Server Compact Edition不允许您使用JOIN
,但是那是最简单的:从数据表中选择数据并将其加入“费率”表,然后根据用户设置选择相应的费率。 然后,您可以进行上面“案例a”中提到的计算。
但是,我认为您不能使用JOIN
,因此建议您将数据放入应用程序中(产生两个单独的表,一个用于数据,一个用于Rate)。 您修改数据SELECT
语句,以便获得默认值为0
的附加列Amount
。
SELECT *, 0 AS Amount FROM <data table>
然后,在C#中,您遍历数据表中的所有记录并计算记录的Amount
值。
private void GetData(...)
{
// Call SELECT statements to fill a dataset with two tables
DataSet set = new DataSet();
....
// set now contains tables[0] (for the data) and tables[1] (for the Rate).
// Get the Rate
int rate = (int)set.Tables[1].Rows[0]["Rate"]; // Assuming that the column is named "Rate"
// Now iterate over all data rows and calculate amount
foreach (DataRow row in set.Tables[0])
{
row["Amount"] = ((int)row["Total"] * rate);
}
// Mark the data set as unmodified
set.AcceptChanges();
}
请注意,此代码可能需要进行一些调整-我尚未实际对其进行测试。 如果“费率”表包含多个行,并且需要根据其他设置选择正确的费率,则可以考虑创建一个函数,这些函数根据以下设置返回正确的行:
private DataRow FindRateRow(DataSet set, <parameters for selecting the correct row>)
{
DataRow[] row = set.Tables[1].Select(<Filter string according to parameters>);
if (row != null && row.Length > 0)
return row[0];
return null;
}
使用int rate = (int)FindRateRow(set, ...)["Rate"];
以上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.