# DataTable加工后添加行列，输出求和，百分比的问题请教！

0

```              DataTable oldDataTable = new DataTable();

DataRow dr = oldDataTable.NewRow();
for (int i = 0; i < 6; i++)
{
dr = oldDataTable.NewRow();
dr["商品"] = "A";
dr["销售成本"] = 100+i;
dr["销售利润"] = 1000+i;
}        ```

alone2013 | 初学一级 | 园豆：46

0
```var oldDataTable = new DataTable();

DataRow dr = oldDataTable.NewRow();
for (int i = 0; i < 6; i++)
{
dr = oldDataTable.NewRow();
dr["商品"] = "A";
dr["销售成本"] = 100 + i;
dr["销售利润"] = 1000 + i;
}
//步骤1、计算总成本，和总利润
var totalCost = oldDataTable.Rows.Cast<DataRow>().Sum(x => Convert.ToInt32(x["销售成本"] ?? "0"));
var totalProfit = oldDataTable.Rows.Cast<DataRow>().Sum(x => Convert.ToInt32(x["销售利润"] ?? "0"));
//添加列
//写入数据行数据
foreach (DataRow dr1 in oldDataTable.Rows)
{
dr1["成本百分比"] = (Convert.ToInt32(dr1["销售成本"] ?? "0") / totalCost).ToString("P2");
dr1["利润百分比"] = (Convert.ToInt32(dr1["销售利润"] ?? "0") / totalProfit).ToString("P2");
}
//追加最后一行的数据

The convert type change to "Decimal".

``` var oldDataTable = new System.Data.DataTable();
var newDataTable = new System.Data.DataTable();

DataRow dr = oldDataTable.NewRow();
for (int i = 0; i < 6; i++)
{
dr = oldDataTable.NewRow();
dr["商品"] = "A"+i;
dr["销售成本"] = 100 + i;
dr["销售利润"] = 1000 + i;
}
//步骤1、计算总成本，和总利润
var totalCost = oldDataTable.Rows.Cast<DataRow>().Sum(x => Convert.ToDecimal(x["销售成本"] ?? "0"));
var totalProfit = oldDataTable.Rows.Cast<DataRow>().Sum(x => Convert.ToDecimal(x["销售利润"] ?? "0"));

//添加列

//写入数据行数据
foreach (DataRow dr1 in oldDataTable.Rows)
{
dr1["成本百分比"] = (Convert.ToDecimal(dr1["销售成本"] ?? "0") / totalCost).ToString("P2");
dr1["利润百分比"] = (Convert.ToDecimal(dr1["销售利润"] ?? "0") / totalProfit).ToString("P2");

dr = newDataTable.NewRow();
dr["商品"] = dr1["商品"];
dr["销售成本"] = dr1["销售成本"];
dr["成本百分比"] = dr1["成本百分比"];
dr["销售利润"] = dr1["销售利润"];
dr["利润百分比"] = dr1["利润百分比"];
}
//追加最后一行的数据

ok了，newDataTable就是我想要的。

alone2013 | 园豆：46 (初学一级) | 2014-01-15 23:42

@alone2013: 我想说为什么不在数据库做这事呢？sql语句就能搞定的！不需要在客户端来做！

@幻天芒:

alone2013 | 园豆：46 (初学一级) | 2014-01-16 12:49

@alone2013:

```public class Model
{
public string 商品{get;set;}

public string 成本{get;set;}

[Newtonsoft.Json.JsonIgnore]//加上特性之后，json序列化，就忽略该字段了
public string 成本占比{get;set;}
}```

sql语句处理更简洁。性能更好。

0

1、如果是EXCEL的话，合计和百分比，不需要由数据库提供，可以在EXCEL里面用公式完成。

2、如果是要构造在DATATABLE里面的话，ColumnName不一样这是必须的，你可以叫“百分比1”，“百分比2”

3、如果代码不懂，不至于吧？反正不费事，简单说下。

a. 添加两列用于保存百分比

b. 求出6行的合计，放在第7行里面，并放在一个合计变量里面，假设为TotalAmount。

c. 循环1~6行，计算出百分比， Amount/TotalAmount。填入百分比列。

d. 工作完成。

您需要登录以后才能回答，未注册用户请先注册