0

我有DataTable两个表一起附加。我有很多行,其中两个是TotalRate(注意:这些是我的行DataTable)。我想通过将两行相乘来计算总金额。我该怎么做?

s来自DataTableSQL Compact,我无法在那里进行计算,因为它并不总是需要,这取决于它必须完成的某些设置。它甚至可以是百分比计算或任何东西。有什么方法可以在 2 行之间执行计算DataTable???

我正在使用 C#。我尝试了计算功能,但无法实现。该表可能如下所示:

Title Prod1  Prod2   Prod3
       10     20       30
       0      20       10
       5      6        0
       50     0        0
Total  65     46       40
Rate   10     20       10
Amount 650    920      400

Total=sum of Prodi   i=1,2,3   Amount=Total*Rate 

应该有一些方法来实现这一点。我该怎么办????

提前致谢。

4

1 回答 1

1

你可以做的是:

  1. 从数据库中获取数据到数据表中
  2. 从结果中选择 Rate 和 Total 的两行
  3. (如果您不需要显示它们,请从表格中删除这些行)
  4. 根据两行中的值进行计算
  5. 手动向表中添加新行以获得结果

编辑
也许我没有完全理解你的数据结构。所以让我们看一些场景。如果您的不在其中,请提供有关数据表中一行实际外观的更多详细信息:

案例 a:数据存储在列中,您也希望该行中的 Totals 和 Amount 列

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:数据存储在行中,您也希望 Total 和 Amount 为行

RowTitle Value
Value1   1
Value2   5
Value3   2
Rate     10

现在您需要在 C# 中使用 for 循环来遍历所有行,将值相加,然后使用RowTitle“Total”和“Amount”创建两个新行并将它们添加到您的表中。

编辑 2
你,所以我从你的第二条评论中了解到,你的数据库中实际上有两个表。一个包含实际数据,一个包含费率。您现在根据用户定义的设置从这些表中进行选择,您实际上在 C# 中的数据集中获得了两个表 - 一个用于该数据,一个用于速率。

AFAIK SQL Server Compact Edition 不允许您使用JOIN,但这将是最简单的:从数据表中选择数据并将其加入“Rates”表,根据用户设置选择相应的速率。然后你可以做我在上面“案例a”中提到的计算。

但是,我认为您不能使用JOIN,所以我建议您将数据放入您的应用程序中(产生两个单独的表,一个用于数据,一个用于速率)。您修改数据SELECT语句,以便获得Amount具有默认值的附加列0

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

请注意,此代码可能需要一些调整 - 我还没有实际测试过它。如果“Rates”-Table 包含多行,并且需要根据其他设置选择正确的比率,您可以考虑创建一个函数,根据这些设置返回正确的行:

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"];上面。

于 2010-09-03T06:50:08.080 回答