2010-12-08 1 views
0

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

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

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

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

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

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

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

ответ

2

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

bindingSource.Filter = "ProductId LIKE '%" & searchterm & "%' OR Convert(ScanDate, 'System.String') LIKE '%" & searchterm & "%'" 
0

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

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

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

+0

никаких проблем с ним быть в C#, и это практично, однако, фильтры на нажатие клавиши, и ProductID выглядит так PRD1234567, так что, если они входят «23» он может отображать любые идентификаторы продуктов с 23 в нем или дату проверки, такую ​​как 23-е число месяца: «23/01/2010 12:00:00» – CrazyPenguin 2010-12-08 17:29:25