Смысл в том что при клике на заголовке Ehlib строит по датасету список значений полей и делает визуальный фильтр как в Экселе с возможностью выбора нескольких значений. Вот у меня и возник вопрос как проще всего заполнить значениями этот фильтр. Понятно что я могу сделать букмарк, отключить у датасета все обработчики и в цикле пробежаться по всему датасету, но может есть способ красивее, Anydac ну или FireDac делает это через обращение к внутреннему источнику данных что-то типа
Код: Выделить всё
procedure TADDatasetFeaturesEh.FillSTFilterListDataValues(AGrid: TCustomDBGridEh;
AColumn: TColumnEh; AItems: TStrings);
Var
oDS: TADAdaptedDataSet;
oField: TField;
oData: TStringList;
i: Integer;
oCol: TADDatSColumn;
begin
oDS := AGrid.DataSource.DataSet as TADAdaptedDataSet;
if bFilterWithValues and (AColumn.STFilter.ListSource = nil) and (not oDS.IsEmpty) then begin
oField := oDS.FindField(AColumn.FieldName);
if oField <> nil then begin
oCol := oDS.GetFieldColumn(oField);
if oCol <> nil then begin
oData := TStringList.Create;
oData.CaseSensitive := True;
oData.Sorted := True;
oData.Duplicates := dupIgnore;
try
for i := 0 to oDS.Table.Rows.Count - 1 do
oData.Add(VarToStr(oDS.Table.Rows[i].ValueI[oCol.Index]));
oData.Sort;
AItems.AddObject('-', PopupListboxItemEhLine);
AItems.AddStrings(oData);
finally
oData.Free;
end;
end;
end;
end;
end;