[Lazarus] How to associate an object with a row in TStringGrid

Giuliano Colla giuliano.colla at fastwebnet.it
Wed Sep 3 19:19:19 CEST 2014

Il 03/09/2014 18:03, Dennis ha scritto:
> Giuliano Colla wrote:
>> Il 03/09/2014 10:17, Dennis ha scritto:
>>> when displaying data in a TStringGrid, I want to associate an object 
>>> with each row of the grid so that when later use select a certain 
>>> row, I can just determine the selected row and then retrieve the 
>>> associate object for further processing (e.g. display further 
>>> information of this object in some controls).
>>> How do I do that?
>>> Currently, I use OnSelection  (Sender: TObject; aCol, aRow: Integer) 
>>> to obtain aRow but how do I associate an object with each row?
>> Example:
>> StringGrid1.Rows[0].AddObject('some text',anObject);
>> Giuliano
> Thanks.
> But I checked,
>   StringGrid1.Rows[0] is a TStrings
>  this line
>    StringGrid1.Rows[0].AddObject('some text',anObject);
>  seems to add an object to the last item in this TStrings instead of 
> just one object for the entire row.

Yes, actually you can associate an object to each Cell, you cannot 
associate an object to each Row.
If you need just an Object per row, you must decide in which column to 
put it. e.g. you may decide that your object will always be in column 0.
sort of:

   anObject := TObject.Create;
   StringGrid1.Cells[0,0] := 'Some Row Caption';
   StringGrid1.Objects[0,0] := anObject;

Then in your OnSelection, you pick up the Row, but you look only at the 
object in column 0.
Sort of:

procedure TForm1.StringGrid1Selection(Sender: TObject; aCol, aRow: Integer);
     myObject: TObject;
   if Sender is TStringGrid then begin
     myObject := StringGrid1.Objects[0,aRow];


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20140903/4c8f71d7/attachment-0003.html>

More information about the Lazarus mailing list