csharp: sum columns or rows in a dataTable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
DataTable dt = setData();
// Sum rows.
//foreach (DataRow row in dt.Rows)
//{
//    int rowTotal = 0;
//    foreach (DataColumn col in row.Table.Columns)
//    {
//        Console.WriteLine(row[col]);
//        rowTotal += Int32.Parse(row[col].ToString());
//    }
//    Console.WriteLine("row total: {0}", rowTotal);
//}
//// Sum columns.
//foreach (DataColumn col in dt.Columns)
//{
//    int colTotal = 0;
//    foreach (DataRow row in col.Table.Rows)
//    {
//        Console.WriteLine(row[col]);
//        colTotal += Int32.Parse(row[col].ToString());
//    }
//    Console.WriteLine("column total: {0}", colTotal);
//}
//列統計 https://stackoverflow.com/questions/5601752/how-to-sum-columns-in-a-datatable
DataRow totalsRow = dt.NewRow();
foreach (DataColumn col in dt.Columns)
{
    int colTotal = 0;
    foreach (DataRow row in col.Table.Rows)
    {
        if (col.ColumnName != "Branch")
        {
            colTotal += Int32.Parse(row[col].ToString());
        }
    }
    totalsRow[col.ColumnName] = colTotal;
}
dt.Rows.Add(totalsRow);
dt.Rows[dt.Rows.Count - 1]["Branch"] = "合計";
//行統計要增加一列
//https://stackoverflow.com/questions/19053430/datatable-sum-each-cell-in-a-row
dt.Columns.Add("Total", typeof(decimal));
foreach (DataRow row in dt.Rows)
{
    decimal rowSum = 0;
    foreach (DataColumn col in dt.Columns)
    {
        if (col.ColumnName != "Branch")
        {
             if (!row.IsNull(col))
            {
 
                string stringValue = row[col].ToString();
                decimal d;
                if (decimal.TryParse(stringValue, out d))
                    rowSum += d;
            }
        }
    }
    row.SetField("Total", rowSum);
}
 
 
this.dataGridView1.DataSource = dt;

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var dt = new DataTable();
          dt.Columns.Add("ProductName", typeof(string));
          dt.Columns.Add("Qty1", typeof(int));
          dt.Columns.Add("Qty2", typeof(int));
          dt.Columns.Add("Qty3", typeof(int));
 
          {
              var dr = dt.NewRow();
              dr["ProductName"] = "Keyboard";
              dr["Qty1"] = 2;
              dr["Qty2"] = 5;
              dr["Qty3"] = 6;
              dt.Rows.Add(dr);
          }
 
          {
              var dr = dt.NewRow();
              dr["ProductName"] = "Mouse";
              dr["Qty1"] = 5;
              dr["Qty2"] = 1;
              dr["Qty3"] = 2;
              dt.Rows.Add(dr);
          }
          //列
          string expression =
 
              string.Join(" + ",
                  dt.Columns.OfType<DataColumn>()
                      .Where(x => x.DataType == typeof(int))
                      .Select(x => x.ColumnName)
                       .ToArray());
 
          dt.Columns.Add("Total", typeof(int)).Expression = expression;
 
          //DataTable1.Columns["Total"].Expression = "C1+C2+C3";
          //dt.Columns.Add("Total", typeof(Double));
          //foreach (DataRow row in dt.Rows)
          //{
          //    int sum = row<DataColumn>().Sum(dc => (int)row[dc]);
          //    row.SetField("Total", sum);
          //}
          DataRow drt = dt.NewRow();
          drt[0] = "Totals";
          for (int i = 1; i < dt.Columns.Count; i++)
          {
              //1.
              //drt[dt.Columns[i].ColumnName] = dt.Compute("Sum(" + dt.Columns[i].ColumnName + ")", "");
              //2.
              drt[dt.Columns[i].ColumnName] = (from DataRow dr in dt.AsEnumerable()
                                               where dr.RowState != DataRowState.Deleted
                                               select Convert.ToInt32(dr[dt.Columns[i].ColumnName])).Sum();
               
          }
         // int sum = Convert.ToInt32(dt.Compute("SUM(Salary)", "EmployeeId > 2"));
          //int linqSum = (from DataRow dr in dt.AsEnumerable()
          //               where dr.RowState != DataRowState.Deleted
          //               select Convert.ToInt32(dr["ColumnName"])).Sum(); 
 
          dt.Rows.Add(drt);
 
          this.dataGridView1.DataSource = dt;

  

posted @   ®Geovin Du Dream Park™  阅读(499)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示