Files
lazarus-ccr/components/jvcllaz/examples/JvDBLookupTreeView/main.pas

112 lines
3.5 KiB
ObjectPascal
Raw Normal View History

unit main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, BufDataset, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, Grids, DB, DBGrids, DBCtrls,
JvDBLookupTreeView;
type
{ TForm1 }
TForm1 = class(TForm)
Bevel1: TBevel;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Label2: TLabel;
Label3: TLabel;
Panel1: TPanel;
JvDBLookupTreeView1: TJvDBLookupTreeView;
Persons: TBufDataset;
Relationships: TBufDataset;
DSPersons: TDataSource;
DSRelationships: TDataSource;
procedure DBGrid1PrepareCanvas(sender: TObject; DataCol: Integer;
Column: TColumn; AState: TGridDrawState);
procedure FormShow(Sender: TObject);
private
public
Image: TImage;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
{ Assignment of table fields to lookup tree
Table "Persons" --> Master table
Table "Relationships" --> Lookup table
Establish the tree for lookup table:
DSRelationships --> LookupTreeView.ListSource
Field "RelID" --> LookuptreeView.MasterField
Field "RelParentID" --> LookupTreeView.DetailField
Field "RelName" --> LookupTreeView.ListField // Node text
Establish lookup connection:
DSPersons --> LookupTreeView.Datasource
Field "ID" --> LookupTreeView.DataField
Field "RelID" --> LookupTreeView.KeyField
}
procedure TForm1.FormShow(Sender: TObject);
begin
Relationships.CreateDataset;
Relationships.Open;
Relationships.AppendRecord([ 1, 'Grandparents', 0]);
Relationships.AppendRecord([10, 'Parents', 1]);
Relationships.AppendRecord([11, 'Uncle', 1]);
Relationships.AppendRecord([12, 'Aunt', 1]);
Relationships.AppendRecord([20, 'Protagonist', 10]);
Relationships.AppendRecord([21, 'Brother', 10]);
Relationships.AppendRecord([22, 'Sister', 10]);
Relationships.AppendRecord([23, 'Brother-in-law', 21]);
Relationships.AppendRecord([24, 'Brother-in-law', 22]);
Relationships.AppendRecord([25, 'Sister-in-law', 21]);
Relationships.AppendRecord([26, 'Sister-in-law', 22]);
Relationships.AppendRecord([30, 'Son', 20]);
Relationships.AppendRecord([31, 'Daughter', 20]);
Relationships.AppendRecord([90, 'Friend', 0]);
Relationships.AppendRecord([91, 'Neighbor', 0]);
// data from: https://en.wikipedia.org/wiki/The_Grapes_of_Wrath
Persons.CreateDataset;
Persons.Open;
Persons.AppendRecord([20, 'Tom Joad']); // Protagonist
Persons.AppendRecord([11, 'Uncle John Joad']);
Persons.Appendrecord([10, 'Ma Joad']); // name not mentioned
Persons.AppendRecord([10, 'Tom Joad']); // Pa Joad
Persons.AppendRecord([21, 'Al Joad']);
Persons.AppendRecord([21, 'Noah Joad']);
Persons.AppendRecord([22, 'Ruthie Joad']);
Persons.AppendRecord([22, 'Winfield Joad']);
Persons.AppendRecord([22, 'Rose of Sharon Joad Rivers']);
Persons.AppendRecord([ 1, 'William James Joad']);
Persons.AppendRecord([ 1, 'Granma Joad']); // name not mentioned
Persons.AppendRecord([90, 'Jim Casy']);
Persons.AppendRecord([91, 'Muley Graves']);
Persons.AppendRecord([24, 'Connie Rivers']);
Persons.IndexFieldNames := 'Name';
Persons.First;
end;
procedure TForm1.DBGrid1PrepareCanvas(sender: TObject; DataCol: Integer;
Column: TColumn; AState: TGridDrawState);
begin
if Persons.FieldByName('ID').AsInteger = 20 then // Protagonist
DBGrid1.Canvas.Font.Style := [fsBold];
end;
end.