Components for Delphi and C++ Builder.

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

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Доработка STFilter
СообщениеДобавлено: 08 апр 2016, 13:24 
Не в сети

Зарегистрирован: 02 ноя 2012, 13:51
Сообщений: 241
Предлагаю доработку для StFilter. Когда выбраны "Все записи" и список вариантов неотфильтрован, то это по смыслу равно "Отчистить фильтр". Вместо этого грид собирает строку фильтра из всех вариантов и с тормозами её накладывает. Исправление
Код:
procedure TSTColumnFilterEh.UpdateFilterFromValuesCheckingState(ss: TStrings;
  CheckStates: TBooleanDynArray);
var
  FilterStr: String;
  i,k: Integer;
  DataOpType: TSTOperandTypeEh;
  sv: String;
//  IncludeCheckNull: Boolean;
  bCheckVal, bCheckResult: Boolean;
begin
{SAMO}
  if Length(CheckStates) > 0 then
  begin
    bCheckResult := False;
    bCheckVal := CheckStates[0];
    for i := Low(CheckStates) to High(CheckStates) do
    begin
      if bCheckVal <> CheckStates[i] then
      begin
        bCheckResult := True;
        Break;
      end;
    end;
  end;

  FilterStr := '';
  if bCheckResult then  {SAMO}
  begin
    k := 0;
  //    IncludeCheckNull := False;
    if (Column.Field <> nil)
      then DataOpType := STFldTypeMapEh[Column.Field.DataType]
      else DataOpType := botNon;

    for i := 0 to Length(CheckStates)-1 do
    begin
      if (ss.Objects[i] is TCustomListboxItemEh) and TCustomListboxItemEh(ss.Objects[i]).IsDataItem then
        if CheckStates[i] = True then
        begin
          sv := StringReplace(ss[i], '''', '''''',[rfReplaceAll]);
          if FilterStr <> '' then FilterStr := FilterStr + ',';
          if (DataOpType in [botNumber, botDateTime, botBoolean]) and (sv = '') then
            FilterStr := FilterStr + 'Null'
          else
            FilterStr := FilterStr + '''' + sv + '''';
          Inc(k);
        end;
    end;
    if FilterStr <> '' then
      if k = 1
        then FilterStr := '=' + FilterStr
        else FilterStr := 'in (' + FilterStr + ')';
  {  if IncludeCheckNull then
      if FilterStr = ''
        then FilterStr := '=Null'
        else FilterStr := FilterStr + ' OR =Null ';}
  end;
  InternalSetExpressionStr(FilterStr);
  if (Column.Grid.FilterEdit <> nil) and Column.Grid.FilterEdit.Visible then
     Column.Grid.FilterEdit.Text := FilterStr;
  if Column.Grid.STFilter.InstantApply then
    Column.Grid.SetDataFilter;
end;


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

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


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

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


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

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