Использование агрегатных функций в фильтрах DataView - PullRequest
2 голосов
/ 24 мая 2010

У меня есть DataTable, у которого есть столбец («Прибыль»). Что я хочу, чтобы получить сумму всех значений в этой таблице. Я пытался сделать это следующим образом ...

DataTable dsTemp = new DataTable();

dsTemp.Columns.Add("Profit");

DataRow dr = null;

dr = dsTemp.NewRow();
dr["Profit"] = 100;
dsTemp.Rows.Add(dr);

dr = dsTemp.NewRow();
dr["Profit"] = 200;
dsTemp.Rows.Add(dr);

DataView dvTotal = dsTemp.DefaultView;
dvTotal.RowFilter = " SUM ( Profit ) ";

DataTable dt = dvTotal.ToTable();

Но я получаю ошибку при применении фильтра ... Как я могу получить столбец Сумма прибыли в переменной

спасибо ...

Ответы [ 2 ]

3 голосов
/ 24 мая 2010

Установите для столбца данных числовой тип (int, десятичный, что угодно):

DataColumn col = new DataColumn("Profit", typeof(int));
dsTemp.Columns.Add(col);

Использование Вычисление :

int total = dsTemp.Compute("Sum(Profit)", "");

Обратите внимание, что агрегация не является типом фильтра, что является основной проблемой в подходе, который вы используете.

0 голосов
/ 22 июня 2018

Я использовал метод Compute в DataTable, как это было предложено, и он отлично работает. Я применяю ту же фильтрацию, что и для DataView (который используется для отображения отсортированных и отфильтрованных данных в сетке данных) вместе с функцией агрегирования.

string SingleVocheridSale ="1";

 DataView view = new DataView(dt);
 view.RowFilter = string.Format("VOCHID='" + SingleVocheridSale + "'");
 dataGridview1.DataSource = view;
 object sumObject;
 sumObject = dt.Compute("Sum(NETAMT)", view.RowFilter);
 lable1.Text = sumObject.ToString();
...