Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 29 мар 2024, 04:51

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: STFilter без нажатия на Enter
СообщениеДобавлено: 25 фев 2019, 14:08 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Здравствуйте!
Как сделать, чтобы при вводе символов в фильтр он автоматом применялся?
+ нужно использовать нестрогий поиск, т.е. чтобы в условие автоматом добавлялись %
Спасибо!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: STFilter без нажатия на Enter
СообщениеДобавлено: 27 фев 2019, 06:23 
Не в сети

Зарегистрирован: 15 май 2017, 14:01
Сообщений: 100
aford писал(а):
Здравствуйте!
Как сделать, чтобы при вводе символов в фильтр он автоматом применялся? !

Код:
DBGridEh.SearchPanel.FilterOnTyping:=true

aford писал(а):
+ нужно использовать нестрогий поиск, т.е. чтобы в условие автоматом добавлялись %

Код:
DBGridEh.SearchPanel.WholeWords:=false


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: STFilter без нажатия на Enter
СообщениеДобавлено: 27 фев 2019, 09:58 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Цитата:
при вводе символов в фильтр

Насчет панели поиска я знаю


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: STFilter без нажатия на Enter
СообщениеДобавлено: 27 фев 2019, 11:27 
Не в сети

Зарегистрирован: 24 ноя 2012, 12:58
Сообщений: 32
aford:
Цитата:
Насчет панели поиска я знаю

Тогда в чем вопрос?
По моему предыдущий ответ был исчерпывающим.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: STFilter без нажатия на Enter
СообщениеДобавлено: 27 фев 2019, 13:24 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
AndrewP писал(а):
Тогда в чем вопрос?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: STFilter без нажатия на Enter
СообщениеДобавлено: 28 фев 2019, 08:00 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Код:
procedure TFrmMain.DBGrdEhWeightsApplyFilter(Sender: TObject);

function LastPos(SubStr, S: string): Integer;
var
   Found, Len, Pos: integer;
begin
   Pos:= Length(S);
   Len:= Length(SubStr);
   Found:= 0;
   while (Pos > 0) and (Found = 0) do
   begin
     if Copy(S, Pos, Len) = SubStr then
       Found:= Pos;
     Dec(Pos);
   end;
   LastPos:= Found;
end;

var
  s, FText: string;
  i: integer;
begin
  s:= '';
  with (Sender as TDBGridEh) do
    for i:= 0 to Columns.Count - 1 do
      if Columns[i].STFilter.ExpressionStr <> '' then
      begin
        if i = (Col-1) then
          FText:= FilterEdit.Text  // текущая колонка
        else
          FText:= Columns[i].STFilter.ExpressionStr; // все остальные колонки
        // Если фильтр выбран мышкой (Ehlib сам подставляет)
        if ((FText[1] = '=') and // одно значение
           (FText[2] = '''') and
           (FText[Length(FText)] = '''')) or
           ((FText[1] = 'i') and // несколько
           (FText[2] = 'n') and
           (FText[4] = '(') and
           (FText[Length(FText)] = ')')) then
          s:= s + Columns[i].FieldName + ' ' + FText + ' and '
        else // во всех остальных случаях (при вводе руками)
        begin
          if Columns[i].Field.DataType in [ftWideString, ftString] then
            s:= s + Columns[i].FieldName + ' like ''%' + FText + '%'' and '
          else
            if Columns[i].Field.DataType in [ftSmallint, ftInteger, ftWord, ftBoolean,
              ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime] then
              s:= s + Columns[i].FieldName + ' = ' + FText + ' and ';
        end;
      end;
  if LastPos(' and ', s) = Length(s) - 4 then
    Delete(s, Length(s) - 4, Length(s) - 4); // удаляем ' and ', если он есть в конце
  MTWeights.Filter:= s;
  actCancelFilterWeights.Enabled:= MTWeights.Filter <> '';
  //DBGridEh1.DefaultApplyFilter();
end;

procedure TCustomDBGridEh.InplaceEditKeyDown(Control: TWinControl;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_TAB) then
  begin
    FilterEdit.Text:= ReplaceStr(FilterEdit.Text, FilterEdit.SelText, '');
    ApplyFilter; // применяем фильтр
  end;
  inherited;
end;

procedure TCustomDBGridEh.InplaceEditKeyUp(Control: TWinControl; var Key: Word;
  Shift: TShiftState);
begin
  if {Какое-то условие в настройках на автофильтр} True and
     (Key <> VK_TAB) then
  begin
    // убираем выделение
    FilterEdit.Text:= ReplaceStr(FilterEdit.Text, FilterEdit.SelText, '');
    // применяем фильтр
    ApplyFilter;
    // позиция курсора в фильтре
    FilterEdit.SelStart:= Length(FilterEdit.Text);
  end;
  inherited;
end;


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB