Метод Find

Задание 7. Поиск и фильтрация данных. Методы Filtr, Find объекта BindingSourse

Добавим в проект форму KlientAll, основанной на запросе, отсортированном по фамилиям. Форма содержит сведения о всех клиентах. Чтобы можно было отобрать всех клиентов отдельного города, добавим на форму поле со списком. Необходимо настроить поле ComboBox следующим образом:

Data Sourse – ГородBindingSource, то есть данные будут связаны с таблицей Город;

Display Member – Gorod, то есть отображаться в поле со списком будет поле Gorod;

Selected Value – none, то есть поле свободное, не связано ни с каким полем базы данных.

Отфильтровать данные КлиентЗапросBindingSource можно с помощью метода Filtr. Этот метод фильтрует записи по значению в некотором столбце. Синтаксис метода:

ИмяBindingSource.Filter = "Строка условия для фильтра"

Строка условия для фильтра имеет следующую конструкцию:

<Имя поля(столбца)> Оператор сравнения <Значение>

В нашем случае значение в поле со списком cmbGorod сравнивается со значениями в поле Gorod, которое содержится в запросе КлиентЗапрос. Так как тип поля Gorod текстовый, для установления равенства используется оператор Like:

КлиентЗапросBindingSource.Filter = "Gorod Like '" & cmbGorod.Text & "'"

Устанавливаем фильтр в процедуре SelectedIndexChanged поля со списком. Для отмены фильтра используется метод RemoveFilter():

КлиентЗапросBindingSource.RemoveFilter()

Метод Find

Для редактирования записи, открываем форму klient на текущей записи. В данном случае не подойдет метод Position объекта BindingSource. Если мы применили фильтр, то метод Position определяет номер записи в отфильтрованном наборе. Во-вторых нумерация записей в отсортированном запросе не соответствует нумерации записей в таблице.

Для нахождения нужной записи в КлиентыBindingSource формы klient воспользуемся методом Find. Этот метод возвращает порядковый номер записи в объекте BindingSource. Если искомая запись не найдена, то возвращается -1. Синтаксис метода:

ИмяBindingSource.Find("Имя поля", значение)

Для нахождения нужной записи лучше всего подходит поле первичного ключа, так как в этом случае можно быть уверенным, что не будет найдено несколько записей. То есть открываем форму klient на записи, КодКлиента, которой совпадает со значением поля КодКлиента текущей записи элемента управления DataGridView:

numCurrent = КлиентыBindingSource.Find("КодКлиента", КлиентЗапросDataGridView.CurrentRow.Cells(0).Value)

klient.КлиентыBindingSource.Position = numCurrent

При возвращении в форму klientAll в процедуре осуществляем поиск записи, КодКлиента, которой соответствует его значению в форме klient:

Me.КлиентЗапросBindingSource.Position = КлиентЗапросBindingSource.Find("КодКлиента", klient.КодКлиентаTextBox.Text)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: