Добавить условие Rowfilter только для проверки DateTime Year - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь использовать DataView.RowFilter для фильтрации всех записей, которые не принадлежат указанному году. Мой код выглядит следующим образом:

bigDT.DefaultView.RowFilter = "year(date_posted)=2011";

Это, однако, не работает. Я прочитал, что я могу указать DateTimes, используя такой формат, как "# мм / дд / гггг #".

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Действительные выражения для DateTime.

Вы можете сделать что-то вроде

"date_posted > #1/1/2011# AND  date_posted <  #12/31/2011#"
2 голосов
/ 09 февраля 2012

Я не говорю, что это хороший способ сделать это, но способ, которым вы можете сделать это так:

bigDT.DefaultView.RowFilter = "CONVERT(SUBSTRING(CONVERT(date_posted, 'System.String'), 5, 4), 'System.Int32')=2012";

Это преобразование столбца date_posted встрока, извлекающая четырехзначную дату, преобразующая ее в целое число и сравнивающая ее на равенство с 2012.Функции CONVERT и SUBSTRING описаны в свойстве DataColumn.Expression .

В документации ничего не сказано, но я думаю, что CONVERT(date_posted, 'System.String') использует шаблон короткой даты дляваша текущая культура, поэтому в моем случае (en-US) год был на 5-8. Ответ Анурага Ранджана , безусловно, лучше, учитывая, насколько многословно это и его зависимость от анализа форматированных строк, но это еще один способ сделать это, и он работает.

0 голосов
/ 09 февраля 2012

Убедитесь, что у документа есть имя столбца «год», а поле в этом столбце - текст или дата / время. Если это дата и время, вам нужно быть конкретным и, возможно, указывать дату, время и т. Д. Если это текст, это должно быть defaultview.rowfilter = "year = 2011".

...