Advertisement
jpfassis

TComponentGrid001 Delphi

Jun 19th, 2023
2,634
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.19 KB | None | 0 0
  1. unit View.Components.Grid001;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows,
  7.   Winapi.Messages,
  8.   System.SysUtils,
  9.   System.Variants,
  10.   System.Classes,
  11.   Vcl.Graphics,
  12.   Vcl.Controls,
  13.   Vcl.Forms,
  14.   Vcl.Dialogs,
  15.   Data.DB,
  16.   Vcl.Grids,
  17.   Vcl.DBGrids,
  18.   Vcl.ExtCtrls,
  19.   MidasLib,
  20.   View.Components.Interfaces,
  21.   View.Components.Attributes.Interfaces,
  22.   View.Services.ComponentsCount,
  23.   View.Styles.States,
  24.   View.Components.Attributes,
  25.   Datasnap.DBClient, Datasnap.Provider;
  26.  
  27. type
  28.   TComponentGrid001 = class(TFrame, iComponents<TComponentGrid001>)
  29.     Panel1: TPanel;
  30.     DBGrid1: TDBGrid;
  31.     ClientDataSet1: TClientDataSet;
  32.     DataSource1: TDataSource;
  33.     DataSetProvider1: TDataSetProvider;
  34.     procedure DBGrid1TitleClick(Column: TColumn);
  35.   private
  36.     { Private declarations }
  37.     FAttributes : iComponentAttributes<TComponentGrid001>;
  38.     FContainer : TWinControl;
  39.     FDataSource : TDataSource;
  40.   public
  41.     { Public declarations }
  42.     constructor Create(AOwner: TComponent); override;
  43.     destructor Destroy; override;
  44.  
  45.     function Component : TWinControl;
  46.     function Attributes : iComponentAttributes<TComponentGrid001>;
  47.     function LoadAttributes (aValue : String) : TComponentGrid001;
  48.     function Container (aValue : TWinControl) : iComponents<TComponentGrid001>;
  49.     function DataSource (aValue : TDataSource) : TComponentGrid001;
  50.     function This : TComponentGrid001;
  51.   end;
  52.  
  53. implementation
  54.  
  55. {$R *.dfm}
  56.  
  57. { TComponentGrid001 }
  58.  
  59. function TComponentGrid001.Attributes: iComponentAttributes<TComponentGrid001>;
  60. begin
  61.   Result := FAttributes;
  62. end;
  63.  
  64. function TComponentGrid001.Component: TWinControl;
  65. begin
  66.   Result := Panel1;
  67.  
  68.   if Assigned(FContainer) then
  69.     Panel1.Parent:=FContainer;
  70.  
  71.   Name:= 'Frame_'+IntToStr(TServiceComponentsCount.CountInc);
  72.  
  73.   Panel1.Align := alClient;
  74.   Panel1.Color:= FAttributes.BackGround;
  75.  
  76.   DataSetProvider1.DataSet:=FDataSource.DataSet;
  77.   ClientDataset1.ProviderName:=DataSetProvider1.Name;
  78.   ClientDataset1.Active:=True;
  79.   DataSource1.DataSet:=ClientDataset1;
  80.  
  81. //  DBGrid1.DataSource:=FDataSource;
  82.  
  83.   DBGrid1.DataSource:=DataSource1;
  84.  
  85. end;
  86.  
  87. function TComponentGrid001.Container(
  88.   aValue: TWinControl): iComponents<TComponentGrid001>;
  89. begin
  90.   Result := Self;
  91.   FContainer := aValue;
  92. end;
  93.  
  94. constructor TComponentGrid001.Create(AOwner: TComponent);
  95. begin
  96.   inherited;
  97.   FAttributes := TComponentAttributes<TComponentGrid001>.New(Self);
  98.   FDataSource := TDataSource.Create(nil);
  99. end;
  100.  
  101. function TComponentGrid001.DataSource(aValue: TDataSource): TComponentGrid001;
  102. begin
  103.   Result := Self;
  104.   FDataSource.DataSet := aValue.DataSet;
  105. end;
  106.  
  107. procedure TComponentGrid001.DBGrid1TitleClick(Column: TColumn);
  108. var
  109.   indexName : string;
  110.   ordenacao : TIndexOptions;
  111.   i : integer;
  112. begin
  113.   //retirar a formatação de negrito de todas as coluunas
  114.   for I := 0 to DBGrid1.Columns.Count -1 do
  115.   begin
  116.     DBGrid1.Columns[i].title.font.Style:=[];
  117.     DBGrid1.Columns[i].title.font.Color:=clBlack;
  118.   end;
  119.  
  120.   //congfigurar a ordenação
  121.   if ClientDataSet1.IndexName = Column.FieldName + '_ASC' then
  122.   begin
  123.     indexName := Column.FieldName + '_DESC';
  124.     ordenacao := [ixDescending];
  125.   end
  126.   else
  127.   begin
  128.     indexName := Column.FieldName + '_ASC';
  129.     ordenacao := [];
  130.   end;
  131.  
  132.   //adiciona a formatação no dataset, caso não exista
  133.   if ClientDataset1.IndexDefs.IndexOf(indexName)<0 then
  134.     ClientDataSet1.AddIndex(indexName, Column.FieldName, ordenacao);
  135.  
  136.   ClientDataSet1.IndexDefs.Update;
  137.  
  138.   //formata o título da coluna
  139.   Column.title.font.Style:=[fsBold];
  140.   Column.title.font.Color:=clRed;
  141.  
  142.   //atribui a ordenação selecionada
  143.   ClientDataSet1.IndexName := indexName;
  144.  
  145. end;
  146.  
  147. destructor TComponentGrid001.Destroy;
  148. begin
  149.   FDataSource.Free;
  150.   inherited;
  151. end;
  152.  
  153. function TComponentGrid001.LoadAttributes(aValue: String): TComponentGrid001;
  154. var
  155.   FLoadAttributes : iComponentAttributes<TComponentGrid001>;
  156. begin
  157.  
  158.  Result := Self;
  159.  FLoadAttributes := (StylesStates.GetStyle(aValue) as iComponentAttributes<TComponentGrid001>);
  160.  
  161.  FAttributes := FLoadAttributes.Clone;
  162.  FAttributes.Parent(Self);
  163.  
  164. end;
  165.  
  166. function TComponentGrid001.This: TComponentGrid001;
  167. begin
  168.   Result := Self;
  169. end;
  170.  
  171. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement