TMSFMXGrid OnCellBeforeDraw slows down

Hi


I am using a TMSFMXGrid on a small database.  I want to concatenate several fields into a single column so I tried to use a custom draw event (C++ code)



void __fastcall TBrowseData::TMSFMXGrid1CellBeforeDraw(TObject *Sender, int ACol,
          int ARow, TCanvas *ACanvas, TRectF &ARect, TRectF &ATextRect, bool &ADrawText,
          bool &ADrawBackGround, bool &AllowDraw)
{
      if (ACol == 1 && ARow >= TMSFMXGrid1->FixedRows) {
                  // concatentate the data from columns 8,9,10 into the column 1 
                
                 TMSFMXGrid1->Cells[1][ARow] = TMSFMXGrid1->Cells[8][ARow] + "-" +
                                      TMSFMXGrid1->Cells[9][ARow] + "-" +
                                      TMSFMXGrid1->Cells[10][ARow] ;
      }
}



This seems to really make the grid run very slowly. 

Can you suggest a better way to combine data from different database fields?

Thanks
Greg

Dear Mr. Aitkin, 


It is normal that the grid is slow when modifying grid data inside a draw event.
The OnCellBeforeDraw is called when a cell is repainted.

Please use the OnGetCellData event to merge multiple cell data.

Kind Regards, 
Scheldeman Pieter

Pieter Scheldeman2013-01-16 09:15:40

Hi Pieter


Thanks for the tip - using the Event OnGetCellData is certainly faster.

However - the data in the column is not always painted corrected.

1) Grid initial display - (the column still shows original data, only if I resize window is it updated)
2) Navigator - scroll to bottom (the last record data set is not painted correctly)
3) Navigator - scroll to top (the first record in data set is not painted correctly)
4) Page down - only the record at the top of screen is correct

Are there additional re-paint commands that need to be called ?

Greg

Can you perhaps send us a sample that we can investigate here?

If you modify the Cells data collection then you need to perform this at start-up.
The OnGetCellData needs to be used in combination with the var CellString parameter.

Setting a Cell data in the OnGetCellData event could lead to strange values as you are experiencing.

Kind Regards, 
Scheldeman Pieter