vb.net bindingsource filter дата приведения к строке

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

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

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

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

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

Вот мой код назначения:

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

person CrazyPenguin    schedule 08.12.2010    source источник


Ответы (2)


Я понял, и он работает

bindingSource.Filter = "ProductId LIKE '%" & searchterm & "%' OR Convert( ScanDate, 'System.String') LIKE '%" & searchterm & "%'"
person CrazyPenguin    schedule 08.12.2010

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

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

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

person Neil Knight    schedule 08.12.2010
comment
нет проблем с тем, что это C #, и это практично, однако он фильтрует по нажатию клавиши, а productid выглядит как PRD1234567, поэтому, если они вводят 23, он может отображать любые идентификаторы продуктов с 23 в нем или дату сканирования, такую ​​как 23 числа месяца: 23.01.2010 12:00:00 - person CrazyPenguin; 08.12.2010
comment
Если они введут 23, он также будет смотреть на 23-й час, 23-ю минуту и ​​23-ю секунду, а не только на дневной поиск. Вам нужно будет дополнить DateTime, чтобы это был допустимый формат даты, чтобы это работало. Поиск 23 в формате, который должен быть ДД / ММ / ГГГГ чч: ММ: СС, не будет работать. - person Neil Knight; 08.12.2010
comment
Вот чего я хочу. Если ввести только 23, будут возвращены все строки, в которых productid имеет 23 или любой аспект datetime имеет 23, например 23.01.2010 12:00:00 или 10.01.2023 12: 00:00, или 01.10.2010 12:23:00. Он будет работать точно так, как ожидалось, если я могу преобразовать столбец в строку в самом фильтре. Что я не знаю, как это сделать. - person CrazyPenguin; 08.12.2010