Для сегодняшнего занятия нам понадобиться проект, созданный на прошлом занятии (см. прошлый номер). Открой этот проект. Теперь сделаем наш проект покрасивее, для этого выполни следующее:
Установи на форму из палитры Win32 компонент TToolBar.
Выставь свойство Align у DBGrid1 в alTop , а у DBGrid2 в alClient .
Установи на форму из палитры Additional компонент TSplitter.
Выставь свойство Align у TSplitter в alTop .
Теперь устанавливаем поверх ToolBar1 компонент TEdit.
Align - выравнивание, т.е. по какой стороне формы будет выравнивание. После этих манипуляций у тебя должно получится нечто похожее на рисунок 1.
Рис 1. Форма
Теперь создай событие OnChange для Edit1, это событие происходит каждый раз, когда пользователь вводит текст в Edit1. В созданной процедуре напиши следующее:
if Edit1.Text<>'' then
begin
Table1.Filtered:=true;
Table1.Filter:=DBGrid1.SelectedField.FieldName+
'='''+Edit1.Text+'*''';
end
else
Table1.Filtered:=false;
Здесь мы использовали конструкцию типа
if Условие then
Действие1
else
Действие 2
Суть здесь такая: Если "условие" действительно, то выполнить "Действие 1", иначе выполнить "Действие 2". Действие должно быть только одно, если больше, то их нужно записать между парой "Begin" и "End", как "Действие 1" в нашем примере.
Теперь перейдём непосредственно к рассмотрению примера. Первая строка проверяет, есть ли текст в Edit1. Если да, то выполняется "действие 1", которое состоит из двух строчек. В первой я говорю, что Table1 фильтрованная. Это означает, что видимыми будут только те строки, которые удовлетворяют условию, записанному в свойстве Filter у Table1. В следующей строке я создаю это условие. DBGrid1.SelectedField.FieldName - означает выделенную колонку в DBGrid1, т.е. фильтр будет устанавливаться относительно выделенного поля.
Edit1.Text+'*' - звёздочка в этом выражении означает любые символы. Это значит, если в Edit1 будет введены буквы "Аб", то показываться будут все строки начинающиеся на "Аб". Если не поставить звёздочку, то будут выведены только строки равные "Аб", а строка с "Абв" уже не выведется.
В качестве "действия 2" условия, я отменяю фильтрацию.
Теперь, как это будет выглядеть в общем: Если введён какой-нибудь символ, то установить фильтр. Если ничего не введено, то удалить фильтр, что покажет все строки. Это самый простой способ поиска необходимых строк.
В качестве фильтра можно использовать выражения типа:
Имя_Колонки1='Параметр' AND Имя_Колонки2='Параметр'
В этом случае, фильтрация будет проходить сразу по двум полям, то есть выводиться будут только те строки, которые удовлетворят сразу двум условиям.
Запусти программу и попробуй поиграть с вводом в Edit1. Только эффект будет, если у тебя введены строки в базу данных.
На фильтрацию влияют настройки свойства FilterOption у Table1. Дважды щёлкни по этому свойству в Object Inspector . и перед тобой откроется два свойства:
foCaseInsensitive - сравнивать без учёта регистра. Если это свойство = true, то строки "абв" и "АБВ" будут одинаковыми, иначе они будут разными.
foNoPartialCompare - Если этот параметр = true, то звёздочка "*", которую мы использовали, работать не будет.
Вот ты и познакомился с фильтрацией. Ты пока потренируй свои возможности, а я подумаю о чём тебе рассказать в следующем номере.
А напоследок я расскажу о некоторых возможностях Database Desktop , которые я опустил до лучших времён в прошлой статье. Так вот, эти лучшие времена настали.
Рис 2. Database Desktop
Minimum Value - минимальное значение параметра.
Maximum Value - максимальное значение параметра.
Default Value - значение параметра по умолчанию. Этим значением будет заполняться поле при создании новой строки.
Picture - Маска, которая показывает, как должно выглядеть поле. Для её назначения используй кнопку Assist