Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Как сделать фильтер?


Автор: Feller 22.11.2010, 19:07
Помогите сделать фильтер.Я попробовал но не получается,выдается ошибка.
Код

 frmFind.DTEmployee.Columns("EmployeeID").Expression = "EmployeeID = 23"
 frmFind.DVEmployee = frmFind.DTCustomers.DefaultView
 frmFind.dgEmployee.DataSource = frmFind.DVEmployee

Суть в том что ввести в форму фильтра данные id,дата рождения и.т.д ,и при нажати на кнопку применить от фильтровать datagrid.

Автор: diadiavova 22.11.2010, 19:14
Вот здесь подобный вопрос
http://forum.vingrad.ru/forum/topic-314610/kw-combobox.html
Там правда комбобоксы, но решение проблемы такое же.

Автор: Feller 22.11.2010, 21:15
diadiavova, Большое спасибо очень помогло. smile 
Код

 Dim BSFilter As New BindingSource()
        frmFind.DVCustomers = frmFind.DTCustomers.DefaultView
        BSFilter.DataSource = frmFind.DVCustomers
        BSFilter.Filter = "EmployeeID = 2"
        frmFind.dgCustomers.DataSource = BSFilter

А почему через BindingSource(), ведь DataView() предназначен для фильтрации и сортировки?
А как сделать что когда поле не заполнено то пониму не надо фильтровать,а когда заполнено то надо?
Как сделать чтоб фильтровал по промежутку дат?
Как уместить всё это в эту строчку 
Код
BSFilter.Filter = "EmployeeID = 2"
?


Автор: diadiavova 22.11.2010, 22:18
Цитата(Feller @  22.11.2010,  21:15 Найти цитируемый пост)
А почему через BindingSource(),

Это удобный компонент для этих целей.
Цитата(Feller @  22.11.2010,  21:15 Найти цитируемый пост)
А как сделать что когда поле не заполнено то пониму надо фильтровать,а когда заполнено то надо?

Не понял.

Цитата(Feller @  22.11.2010,  21:15 Найти цитируемый пост)
Как сделать чтоб фильтровал по промежутку дат?
Как уместить всё это в эту строчку 

Строка фильтра похожа на инструкцию WHERE в SQL-запросе. То есть для промежутка дат вроде поддерживается BETWEEN...AND, а несколько условий можно объединять с помощью логических операторов. Все есть в документации по свойству и ссылка на документацию есть в упоминавшейся теме.

Автор: Feller 23.11.2010, 13:48
Не работает говорит что после слова between что-то пропустил

diadiavova, 
Код

BSFilter.Filter = "BirthDate= Between '" & BirthDateDateTimePicker.Value & "'And'" & DateTimePicker2.Value & "'"

Автор: diadiavova 23.11.2010, 18:19
Во-первых после BirthDate не нужно знака равенства, во-вторых даты выделяются не кавычками, а #, а в третьих ты там еще и пробел перед AND пропустил.

Автор: Feller 23.11.2010, 19:46
diadiavova, 
Код

 BSFilter.Filter = "BirthDate Between '" & BirthDateDateTimePicker.Value & "' And '" & DateTimePicker2.Value & "'"

Выдаёт ошибку Выражение содержит не поддерживаемый оператор "Between".
Если вместо кавычек поставлю #.
Код

 BSFilter.Filter = "BirthDate Between #" & BirthDateDateTimePicker.Value & "# And #" & DateTimePicker2.Value & "#"


Выдаёт ошибку Строка не распознана как действительное значение DateTime.

Автор: diadiavova 23.11.2010, 19:52
Документация по синтаксису здесь
http://msdn.microsoft.com/ru-ru/library/system.data.datacolumn.expression.aspx
Если битвин не поддерживается, значит используй больше и меньше и объединяй их оператором AND.
По дате пример из той же документации
Код

Birthdate < #1/31/82#

Автор: Feller 23.11.2010, 21:56
diadiavova, Получился этот вариант. smile 
Код

BSFilter.Filter = "BirthDate >= '" & BirthDateDateTimePicker.Value & "' And BirthDate <= '" & DateTimePicker2.Value & "'"

А как сделать что когда какое нибудь из полей незаполнено например lastname.text то к этому полю не применялся фильтер,а по остальным которые заполнены применялся?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)