En Thu, 05 May 2016 16:53:00 -0500, Aradeonas <aradeo...@operamail.com>
escribió:
Hi,
I'm curious about how TDBGrid now what to show in a column as value.
I mean if I want to make a custom grid simple solution si going from
first to last of TDataset and read columns value.
I Browsed TDBGrid code lately but sadly I couldnt find how it works to
get data without (as I think) browsing and changing TDataset records.
Regards,
Ara
--http://www.fastmail.com - Send your email first class
DBGrid does not read all records from first to last in order to show them,
it only "specify" how many records it can show at the same time, it does
this using a data link, TComponentDatalink, which is just a TDatalink with
some custom dataset events for easy hooking, a data link is an
intermediary between the grid and the dataset. So once the amount of
records is set, the grid uses a datalink property: ActiveRecord in order
to select which record from the ones it has reserved is the active record,
then DbGrid maps this active record to the grid.Row property, the grid.Col
property is mapped to a field index and using the standard dataset
properties like Fields[i] or the field associated to a column which is
again just taken from the dataset.
The dataset is in charge all the time in keeping the reserved records up
to date, the grid just shows the values it finds in the records.
The starting point when the records are shown in DbGrid is procedure
TCustomDBGrid.DrawAllRows; there the ActiveRecord is selected, DrawAllRows
eventually ends calling individual cells for each row which does
DefaultDrawCell and several others.
In bug report http://bugs.freepascal.org/view.php?id=29764 I put an
example of using TDatalink with multiple records and without DbGrid in a
console program. Hope that helps.
Jesus Reyes A.
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus