вторник, 11 декабря 2012 г.

Имя столбца с пробелами, скобками и т.д. в DataTable.Compute()

В классе 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 с нестандартными именами только в исключительных ситуациях.

Комментариев нет:

Отправить комментарий