Лена |
Отправлено: 08.11.2006, 12:48 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Подскажите, как реализовать следующее:
Пользователь вводит в Edit1 буквы.
Программа анализирует их и в ClientDataSet курсор перемещается на строку, где есть совпадение из соотвествующей колонки с буквами из Edit1. По мере ввода курсор скользит и находит совпадения, останавливаясь на них. Если совпадений нет, то ничего не происходит.
Связь такая: ADOQuery — DataSetProvider — ClientDataSet — DataSource — грид.
|
|
Admin |
Отправлено: 08.11.2006, 12:53 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Locate
|
|
olegenty |
Отправлено: 08.11.2006, 12:55 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Это называется Incremental Search. реализовано в TDBGridEh. в противном случае тебе придётся делать всё руками:
1. переводим грид в режим поиска. для этого поверх текущей ячейки рисуем TEdit, но пользователю кажется, что это прямо в гриде
2. По мере набора текста в TEdit...
3. делаем Locate по набору данных с loPartialKey для поля текущей колонки
|
|
Лена |
Отправлено: 08.11.2006, 13:40 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Locate работает, только при полном соотвествии.
CODE |
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
TLocateOptions SOptions;
DataModule2->ClientDataSetKey->Locate("man", Edit1->Text, SOptions<<loCaseInsensitive);
}
|
Отредактировано Лена — 08.11.2006, 14:45 |
|
olegenty |
Отправлено: 08.11.2006, 13:42 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
а loPartialKey кто за тебя включит в TLocateOptions?
|
|
Лена |
Отправлено: 08.11.2006, 13:46 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
РАБОТАЕТ!
Большое спасибо! |
|
Лена |
Отправлено: 08.11.2006, 14:15 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Если колонка имеет тип даты-времени и там содержаться записи типа:
05.09.2006 14:57:09, то при попытке применить код ниже, получаю исключение на рисунке. Это можно обойти?
CODE |
void __fastcall TForm1::Edit6Change(TObject *Sender)
{
TLocateOptions SOptions;
DataModule2->ClientDataSetLog->Locate("dt", Edit6->Text, SOptions<<loCaseInsensitive<<loPartialKey);
}
|
Присоединить изображение
|
|
Admin |
Отправлено: 08.11.2006, 14:26 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
try{} catch{}
|
|
Лена |
Отправлено: 08.11.2006, 14:38 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
А как тогда двигать курсор по этой колонке?
Наверное для этой колонки не получиться? |
|
Shagg |
Отправлено: 10.11.2006, 07:19 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 69
|
тут уж придется вспомнить функции StrToDateTime и FormatDateTime |
|
olegenty |
Отправлено: 10.11.2006, 08:10 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
2 Лена
на эти грабли в разное время наступали, наверное, все.
поиск надо вести не по колонке с полем типа DateTime, а по Calculated колонке, куда помещается определённым образом отформатированное значение DateTime
(оффтопик) только тут ещё грабелька: а сортировать (на клиентской стороне) всё же надо по прежнему по полю типа DateTime
|
|