anchor.diff:      FDataTable: TDataTable;
       FCachedDataTable: PDataTable;
       FDataSource: IDataSource;
  +    FFilter: TFilterCriteria;
       FSearchCapabilities: TSearchCapabilities;
       FPageSize: Integer;
       FPageIndex: Integer;
  
positive.code: begin
    if Assigned(FDataSource) then
      AResult := FDataSource.FetchPage(
        TPageFetchParams.Create(FPageIndex, FPageSize, nil), FDataTable)
    else
      FillChar(AResult, SizeOf(AResult), #0);
  end;
  
negative.code: const
    TEXT_FILTER = [vgfMatchTextExact, vgfMatchTextBeginning, vgfMatchTextEnd, vgfMatchTextAnywhere];
    NUMERIC_FILTER = [vgfNumericEQ, vgfNumericLT, vgfNumericLTE, vgfNumericGT, vgfNumericGTE, vgfNumericBetweenInclusive, vgfNumericBetweenExclusive];
    SORTABLE_TEXT_FILTER = TEXT_FILTER + [vgfSortable];
    SORTABLE_NUMERIC_FILTER = NUMERIC_FILTER + [vgfSortable];
  
  type
    TColumnFilter = record
      ColumnName: utf8string;
      Sort: TSortDirection;
      Filter: TVisualGridFilter;
      Values: array of Variant;
    end;
  
    TFilterCriteria = TArray<TColumnFilter>;
  