Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие OnFilterRecord 
:(
    Опции темы
Vit
Дата 18.1.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Событие OnFilterRecord срабатывает каждый раз, когда выполняется код Table1.Filtered:=True;

вот пример для одновления фильтра
Код

procedure UpdateFilter(DataSet: TDataSet); 
var 
  FR: TFilterRecordEvent; 
begin 
  with DataSet do 
  begin 
    FR := OnFilterRecord; 
    if Assigned(FR) and Active then 
    begin 
      DisableControls; 
      try 
        OnFilterRecord := nil; 
        OnFilterRecord := FR; 
      finally 
        EnableControls; 
      end; 
    end; 
  end; 
end; 

использовать можно так
Код

Table1.Filtered := TRUE; 
UpdateFilter(Table1); 


сюда можно писать код сравнения, условий и т.д.
Код

procedure TForm1.tZayFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
//пример
   Accept := DataSet['BooleanField'] = True;
end;

при фильтрации на каждой записи вызывается это событие, а по сему каждую запись, можно своими силами отфильтровать или нет.

есть переменная Accept, если эта переменная в итоге получает значение True, то текущая запись будет показана, TTable переходит к следующей запси и все с начала
вот еще пример (бессмысленные, просто ради примера)
Код

procedure TForm1.tZayFilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
 i:integer;
begin
I:=random(100);
if i=50 then begin
  if DataSet.FieldByName('MyField').AsInteger = 50 then Accept = True;//запись будет показана
end else begin
  if DataSet.Fields[0] = 100 then accept = false;//запись не будет показана
end;
end;

 
 Добавлено @ Добавлено @ 16:40 
 чем сложнее условия, сообветственно медленее будет работать

еще пример, фильтрация на частичное совпадение.
Кстати, если работать (фильтровать) со строками, то могут быть проблемы с кодировкой и функцией Upper в SQL, а здесь SQL не применяется smile 
Код

procedure TForm1.tZayFilterRecord(DataSet: TDataSet; var Accept: Boolean);
Var
 s:string;
begin
  //Можно применить AnsiUpperCase
  //т.е. фильтрация без учета регистра и с частичным совпадением
  s:=AnsiUpperCase(DataSet.FieldByName('MyStringField').AsSting);
  accept:= POS(AnsiUpperCase(Edit1.Text), s) <> 0;
end;




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.