С# поиск входных данных для сетки данных

Я хочу использовать свой textBox для поиска на моем datagridViewn. Я сделал это прямо сейчас, но только с «Именем» в базе данных. Мне нужно то же текстовое поле для поиска «имя» или «DataCad» (datacad — это тип DateTime) или «город». У меня есть все эти поля на моей таблице.

если пользователь вводит «Джон», все пользователи с этим именем отображаются в сетке. (уже работа с именем). Если тип пользователя «08.12.2017», он показывает все данные с этим дневным временем. То же и с «городом».

Это возможно? Вот мой код, работающий с именем:

if (!string.IsNullOrEmpty(txtSearch.Text))
            {
                pacientesBindingSource.Filter = string.Format("Nome LIKE '*{0}*'", txtSearch.Text);

            }

person Brugo    schedule 17.08.2017    source источник
comment
Я не знаком с этим подходом, но кажется, что изменение Nome LIKE '*{0}*' на Nome LIKE '*{0}*' OR City LIKE '*{0}*' должно работать. DateTime немного сложнее, потому что вы сравниваете строку с DateTime - ответ будет зависеть от того, имеют ли все ваши DateTime время 00:00:00.000 и т. д., но попробуйте связать все ваши поля с помощью OR.   -  person Dave Smash    schedule 17.08.2017
comment
Я не могу закрыть это окно браузера, не предупредив вас о такой мелочи, как инъекция SQL. Пожалуйста, проверьте эту ссылку, прежде чем продолжить свой код: https://stackoverflow.com/questions/35163361/how-can-i-add-user-supplied-input-to-an-sql-statement   -  person andiblas    schedule 17.08.2017
comment
спасибо друг. Собираюсь изучить это,   -  person Brugo    schedule 17.08.2017
comment
string.Format(Nome LIKE '{0}' ИЛИ ​​DataCad = '{1}' OR City LIKE '{2}', txtSearch .Text, txtSearch.Text, txtSearch.Text); думаю это оно? можешь попробовать   -  person Muj    schedule 19.08.2017


Ответы (1)


Я не уверен, как работает остальная часть вашего кода, но похоже, что свойство Filter является предложением where. Я считаю, что вы можете просто добавить OR для поля DataCad следующим образом:

string.Format("Nome LIKE '*{0}*' OR Cast(DataCad as date) = Cast('{0}' as date) OR City LIKE '*{0}*'", txtSearch.Text);

person Peter    schedule 17.08.2017
comment
Побейте меня, но я не думаю, что вы можете использовать оператор LIKE с DateTime (по крайней мере, в мире SQL Server...) - person Dave Smash; 17.08.2017
comment
Ах да, я пропустил часть, где DataCad является полем даты. Я исправлю ответ, но он мне не нравится :) - person Peter; 17.08.2017
comment
Ага. Я получил сообщение об ошибке: «LIKE» нельзя использовать с dateTime. - person Brugo; 17.08.2017
comment
Это звездочки? Попробуйте удалить их из вызова Cast:string.Format(Nome LIKE '{0}' OR Cast(DataCad as date) = Cast('{0}' as date) OR City LIKE '{0}', txtSearch.Text); - person Peter; 17.08.2017
comment
Та же ошибка без звездочек. undefined Приведение() к выражению. - person Brugo; 17.08.2017
comment
Какой движок базы данных вы используете? * заставляет меня думать о MS Access? - person Peter; 18.08.2017
comment
Локальная база данных визуальной студии. Вызывается сервисной базой данных. это локальный файл .mdf. - person Brugo; 18.08.2017
comment
string.Format("Nome LIKE '*{0}*' OR DataCad = '*{0}*' OR City LIKE '*{0}*'", txtSearch.Text); я думаю это все? можешь попробовать - person Muj; 18.08.2017