C# Отдельная сумма столбцов в виде столбца DataRow - PullRequest
1 голос
/ 02 апреля 2020

У меня есть DataTable из 4 столбцов A, B, C, D с 4 строками данных, все из которых содержат целочисленные значения. Я хочу вернуть DataRow столбцов A, B, C, D, который содержит сумму отдельных значений столбцов A, B, C, D. Фильтр отсутствует, как и в Excel.

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[4] { 
                            new DataColumn("A", typeof(int)),
                            new DataColumn("B", typeof(int)),
                            new DataColumn("C", typeof(int)),
                            new DataColumn("D", typeof(int)) 
                        });
dt.Rows.Add(1,1,1,1);
dt.Rows.Add(2,2,2,2);
dt.Rows.Add(3,3,3,3);
dt.Rows.Add(4,4,4,4);

Строка выходных данных должна содержать 4 столбца из 10,10,10,10 значений

1 Ответ

1 голос
/ 02 апреля 2020

Если вы хотите столбец (скажем, Итого), который имеет сумму A, B, C, D каждой строки, добавьте вычисляемый столбец, например,

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
                new DataColumn("A", typeof(int)),
                new DataColumn("B", typeof(int)),
                new DataColumn("C", typeof(int)),
                new DataColumn("D", typeof(int)),
                // add computed column in case you want to get sum of each row in a separate column
                new DataColumn("Total", typeof(int),"A+B+C+D")
            });
dt.Rows.Add(1, 1, 1, 1);
dt.Rows.Add(2, 2, 2, 2);
dt.Rows.Add(3, 3, 3, 3);
dt.Rows.Add(4, 4, 4, 4);

Total column has sum of individual columns

Если вы хотите, чтобы сумма каждого столбца в 4 переменных (или что-то еще), используйте метод DataTable.Compute, например,

//use DataTable.Compute to calculate sum or each column
var sumA = dt.Compute("SUM(A)", "");
var sumB = dt.Compute("SUM(B)", "");
var sumC = dt.Compute("SUM(C)", "");
var sumD = dt.Compute("SUM(D)", "");

Sum of each column

//since you want these added as new row in the datatable...
dt.Rows.Add(sumA, sumB, sumC, sumD);
...