В классе DataTable есть очень полезный метод:
public object Compute(string expression, string filter)
Член System.Data.DataTable
Сводка:
Вычисляет заданное выражение для текущих строк, отвечающих условию фильтра.
Параметры:
expression: Вычисляемое выражение.
filter: Фильтр, ограничивающий число строк, используемых выражением.
Возвращает:
Класс System.Object, которому задан результат сравнения.
Сегодня столкнулся с проблемой при его вызове. Столбцы с "неправильными" с точки зрения
рекомендаций именами, неверно обрабатываются в данном методе, например столбец с именем:
"Сумма(CHF)" приводил к возникновению исключения. Тоже самое будет если в имени используется пробел, точка или запятая, для решения проблемы необходимо "неправильное"
имя столбца в заключить в квадратные скобки.
decimal sum = 0;
if (myNewDataGridView1.DataSource != null)
sum = (decimal)(DataTable)myNewDataGridView1.DataSource).Compute("Sum([Сумма(CHF)])", String.Empty);
Я в своем проекте для задания Caption`а, который отображается пользователю, когда-то давно по молодости написал метод(в классе который работает с базой), и использовал для этого свойство ColumnName, теперь так и тянется... Теперь нужно будет выделить день для исправления этой ошибки во всех проектах, так как в разных участках кода идет обращение к столбцам таблицы по их именам. Для задания текста отображаемого пользователю в заголовке столбца dataGridView нужно использовать свойство Caption класса DataTable!
Кстати еще один нюанс - столбец который содержит в свойстве ColumnName запятую - не сортируется в dataGridView(тоже было потрачено немало времени пока понял причину)!
Используйте свойство ColumnName с нестандартными именами только в исключительных ситуациях.