Блог


Последние записи


Теги

Информация

Delphi, DevExpress, примеры, решения

Фильтр по тегу: tcxlookupcombobox


cxLookupCombobox - Установка фильтра для полей по словам

Установка фильтра для полей lookup-а, с разбивкой по словам и полям

procedure ApplySearchFilter(Controller:  TcxDBDataController; Fields: string; Text: string);
var
  i, j: Integer;
  ItemLink: TObject;
  Filter: TcxDataFilterCriteria;
  FL: TcxFilterCriteriaItemList;
  FieldList, TextWords: TStrings;
begin
  TextWords := TStringList.Create;
  FieldList := TStringList.Create;
  try
    Filter := Controller.Filter;
    Filter.BeginUpdate;
    try
      Filter.Active := false;
      Filter.Clear;
      Filter.Options := Filter.Options + ;
      Filter.Root.BoolOperatorKind := fboOr;
      SplitDelimitedString(FieldList, Fields, ';');
      SplitDelimitedString(TextWords, Text, ' ');
      for i := 0 to FieldList.Count - 1 do
        if FieldList <> '' then
        begin
          FL := Filter.Root.AddItemList(fboAnd);
          ItemLink := Controller.GetItemByFieldName(FieldList);
          if Assigned(ItemLink) then
            for j := 0 to TextWords.Count - 1 do
              if TextWords <> '' then
                FL.AddItem(ItemLink, foLike, '%' + TextWords + '%', TextWords);
        end;
      Filter.Active := true;
    finally
      Filter.EndUpdate;
    end;
  finally
    TextWords.Free;
    FieldList.Free;
  end;
end;



// Разбивка строки по словам
procedure SplitDelimitedString(AStrings: TStrings; AText, ADelimiter: string); var
  p, n: Integer;
  Text: PChar;
begin
  Text := PChar(AText);
  AStrings.Clear;
  n := Length(ADelimiter);
  while Assigned(Text) do
  begin
    p := Pos(ADelimiter, Text) - 1;
    if p < 0 then
      Break;
    AStrings.Add(Copy(Text, 1, p));
    Inc(Text, p + n);
  end;
  if Assigned(Text) and (Length(Text) > 0) then
    AStrings.Add(Text);
end;
добавлено: 12 июл 12 просмотры: 1614, комментарии: 2