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; |
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
CSharp code
标签:
datatable
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!