Фильтр в RxDBGrid

Модераторы: alexs, Модераторы

Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Фильтр в RxDBGrid

Сообщение Xenar »

Все привет.
У RxDBGrid есть зело полезная штука как фильтр по содержимому поля колонки. Есть ли возможность получить значение выбора пользователя по фильтру и в каком поле/столбце он это сделал.
Конечно у грида есть событие OnFiltred но толку от него в данном случаи не вижу.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Сам фильтр со всеми его полями доступен:

Код: Выделить всё

RxDBGrid1.ColumnByFieldName('').Filter. ;

Там можно всю информацию получить.
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

alexs писал(а):Сам фильтр со всеми его полями доступен:

Код: Выделить всё

RxDBGrid1.ColumnByFieldName('').Filter. ;

Там можно всю информацию получить.


Делаю простейшее
RxDBGrid1.ColumnByFieldName('').Filter.ToString

При выборе значения в фильтре валиться с ошибкой на данную строку.
Что то делаю не так ??
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Ну во первых - имя столбца реальное подставлено?
Во вторых - текущие значения фильтра - Filter.CurrentValues
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

alexs писал(а):Ну во первых - имя столбца реальное подставлено?
Во вторых - текущие значения фильтра - Filter.CurrentValues


1. Да конечно
2. CurrentValues - нет такого метода
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Это не метод.
Это свойство:

Код: Выделить всё

  TRxColumnFilter = class(TPersistent)
  private
  ...
  public
  ...
    procedure ClearFilter;

    property State:TRxFilterState read FState write FState;
    property CurrentValues : TStringList read FCurrentValues;
    property ManulEditValue : string read FManulEditValue write FManulEditValue;
    property DisplayFilterValue:string read GetDisplayFilterValue;
  published
  ...

Код: Выделить всё

procedure TForm1.Button2Click(Sender: TObject);
begin
  Label2.Caption:=RxDBGrid1.ColumnByFieldName('NAME').Filter.CurrentValues.Text;
end; 


Смотри пример в ревизии 7166.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

А для чего поле LastFilter

Код: Выделить всё

function TrxFilterByForm.Execute(AGrid: TRxDBGrid; var FilterStr: String; var LastFilter: TstringList): Boolean;
у формы фильтра rxDBGrid??
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Ichthyander писал(а):А для чего поле LastFilter

Чтобы последний фильтр можно было отобразить
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

МОжно ли как-то сделать так, чтобы в форме Filter data были также вычисляемые поля. Как при Filter in Table?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

А как? Для каждой колонки отдельно? Или просто общий для грида?
Я когда делал фильтр там - орентировался на окно автофильтра из LO Calc.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Вот здесь https://disk.yandex.ru/i/ivKNhj64CEj_9w не присутствуют вычисляемые поля в комбобоксе выбора.
Но, что интересно, в filter in table те же самые вычисляемые поля есть и они работают https://disk.yandex.ru/i/YVOBMokXFRFfyw

Добавлено спустя 2 минуты 32 секунды:
alexs писал(а):
Re: Фильтр в RxDBGrid

Сообщение alexs » 10.01.2024 09:14:13
А как? Для каждой колонки отдельно? Или просто общий для грида?
Имеется ввиду в форме фильтра rxDBGrid отсутствуют вычисляемые поля (то есть их нет в реальности в базе SQLite, но в ZQuery они есть как вычисляемые у меня). При этом в быстром фильтре эти колонки/поля присутствуют. Может быть их и в эту форму можно также добавить?
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Так, ну в общем, мне объяснил Алексей: это фича. Механизмы у обоих фильтров разные
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

А есть механизм сброса быстрых фильтров? Или только через "колхозить"?

Код: Выделить всё

procedure TFModuleContracts.actGridClearFilterExecute(Sender: TObject);
var
  i:integer;
begin
   for i:=0 to RxDBGrid1.Columns.Count-1 do
   begin
     RxDBGrid1.Columns.Items[i].Filter.ClearFilter;
     RxDBGrid1.Columns.Items[i].Filter.State:=rxfsAll;
   end;

   RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx-[rdgFilter];
   RxDBGrid1.OptionsRx:=RxDBGrid1.OptionsRx+[rdgFilter];

end;
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Надо сделать. Вопрос здравый
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Добавил метод

Код: Выделить всё

procedure TRxDBGrid.ClearFilter(AHideFilter:Boolean = true);
По умолчанию после очистки строка фильтра скрывается.
Чтобы оставать AHideFilter = true
Ответить