csharp: sum columns or rows in a dataTable

时间:2022-07-03 08:55:26
            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://*.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://*.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;

  

  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;