过滤TClientDataset后重新定位的最佳方式是什么

时间:2014-09-08 19:21:10

标签: delphi tclientdataset

我正在开发一个TClientDataset,用户可以根据一些标准随时过滤。我的问题是,我们希望数据集的光标在过滤后“大部分”保持在同一位置。 (“大多数情况下”在双引号中,当然,如果记录被过滤掉,它不能停留在同一个地方)。

在做了一些研究之后,我能想到的最好的是:

procedure RefreshFilter;
var
  I : Integer;
  sFilter : string;
  vIndexValue: array of TVarRec;
  vIndexValueAsVar : Array of Variant;
begin
  sFilter := GenerateNewFilterExpression;

  if sFilter <> MyDataset.Filter then
  begin
    if MyDataset.IndexFieldCount > 0 then
    begin
      SetLength(vIndexValueAsVar, MyDataset.IndexFieldCount);
      SetLength(vIndexValue, MyDataset.IndexFieldCount);

      for I := 0 to MyDataset.IndexFieldCount - 1 do
      begin
        vIndexValueAsVar[I] := MyDataset.IndexFields[I].AsVariant;
        vIndexValue[I].VType := vtVariant;
        vIndexValue[I].VVariant := @vIndexValueAsVar[I];
      end;
    end;

    MyDataset.Filtered := sFilter <> '';
    Mydataset.Filter := sFilter;

    if MyDataset.IndexFieldCount > 0 then
    begin
      MyDataset.FindNearest(vIndexValue);
    end;
  end;
end;

即使它工作得很好,我发现解决方案有点“笨重”。我想知道是否有一些内置功能或不同的方法可能更优雅,更少“沉重”。

请不要提及书签...更改活动过滤器后书签无法正常工作,如果您的记录被过滤掉,则完全没有。

0 个答案:

没有答案