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);
  var
    myObject: TObject;
begin
  if Sender is TStringGrid then begin
    myObject := StringGrid1.Objects[0,aRow];
  end;
end;

Giuliano

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to