anchor.diff:    ARow: Longint; Rect: TRect; State: TGridDrawState);
   var
     LHandled: boolean;
  +  LSource: PDataTable;
     LCellData: Variant;
   begin
  -  if FFetchDataThreadTimer.Enabled then
  -    Exit;
     LHandled := False;
     if ARow = 0 then
       ResizeSearchEdit(ACol);
     if (ARow > 0) and Assigned(FDataSource) then
  -    LCellData := FDataTable.Rows[ARow-1]._(ACol);
  +  begin
  +    if FFetchDataThreadTimer.Enabled then
  +      LSource := FCachedDataTable
  +    else
  +      LSource := @FDataTable;
  +
  +    LCellData := LSource^.Rows[ARow-1]._(ACol);
  +  end;
   
     if Assigned(FOnDrawVisualCell) then
       FOnDrawVisualCell(Self, ACol, ARow, Canvas, Rect, State, LCellData, LHandled);
  
positive.code: 
    TFilterCriteria = TArray<TColumnFilter>;
  
    TDataTable = record
    public
      Columns: TTableColumns;
  
negative.code:   FGrid.BeforeFetchPage;
    FreeOnTerminate:=true;
    FLastFetchDataResult.RefreshColumns:=ARefreshColumns;
    // fast copy of data (we need to draw old data for a while)
    New(FGrid.FCachedDataTable);
    Move(FGrid.FDataTable, FGrid.FCachedDataTable^, SizeOf(TDataTable));
    FillChar(FGrid.FDataTable, SizeOf(TDataTable), #0);
    inherited Create(false);
  end;
  
  