Фильтр связывания источника vb.net дата приведения к строке - PullRequest
0 голосов
/ 08 декабря 2010

Я использую метод filter для Binding source в VB.net для фильтрации результатов в DataGridView на основе текста в поле поиска. Однако идея этого поиска заключается в том, что он показывает строку, если любой из ячеек содержит текст. Таким образом, моя строка фильтра выглядит так:

filter = "ProductId LIKE '%" & searchterm & "%'" & " OR ScanDate like '%" & searchterm & "%'"

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

Есть ли способ указать фильтру преобразовать ячейки даты и времени в строку?

Что я собираюсь сделать, так это иметь скрытый столбец в наборе данных, который содержит приведенную версию даты, и я скажу фильтру фильтровать этот столбец .

Вот мой код присвоения:

bindingSource.Filter = filter 
dgv.DataSource = bindingSource.DataSource

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Я получил это, и оно работает

bindingSource.Filter = "ProductId LIKE '%" & searchterm & "%' OR Convert( ScanDate, 'System.String') LIKE '%" & searchterm & "%'"
0 голосов
/ 08 декабря 2010

Вы должны сломать свой код фильтра. Таким образом, вместо того, чтобы устанавливать код фильтра в одну строку, я бы запустил тест на searchterm, чтобы проверить, является ли он действительным DateTime. Затем вы можете изменить свой фильтр соответственно, потому что я не думаю, что у вас будет ProductId, который похож на DateTime.

try
{
    string dt = DateTime.Parse(searchterm).ToString();
    filter = "ScanDate like '%" & searchterm & "%'"
}
catch
{
    filter = "ProductId LIKE '%" & searchterm & "%'"
}

Извините за код C #, но преобразование в VB.Net должно быть простым.

...