Componentes.Terceros.jvcl/official/3.32/examples/JvUltimDBGrid/ADO/MainForm.pas

287 lines
8.1 KiB
ObjectPascal

unit MainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ExtCtrls, DBCtrls, JvExStdCtrls,
JvDBCombobox, Grids, DBGrids, JvExDBGrids, JvDBGrid, JvDBUltimGrid,
JvDBGridFooter, ComCtrls;
type
TfrmMain = class(TForm)
JvDBGrid1: TJvDBUltimGrid;
DBMemo1: TDBMemo;
JvDBComboBox1: TJvDBComboBox;
DBLookupComboBox1: TDBLookupComboBox;
PanelButtons: TPanel;
PanelGrid: TPanel;
B_Connect: TButton;
B_TitleIndic: TButton;
B_WordWrap: TButton;
B_ModFooter: TButton;
B_ShowEdit: TButton;
B_Search: TButton;
ADOConnection1: TADOConnection;
MainTable: TADOTable;
MainTableRefLogiciel: TAutoIncField;
MainTableSoftware: TWideStringField;
MainTableCategory: TWideStringField;
MainTableFirstBool: TBooleanField;
MainTableSecondBool: TBooleanField;
MainTableLicenses: TSmallintField;
MainTablePrice: TBCDField;
MainTableComment: TMemoField;
DataSource1: TDataSource;
DataSource2: TDataSource;
LookupTable: TADOTable;
JvDBGridFooter1: TJvDBGridFooter;
CountQuery: TADOQuery;
procedure FormShow(Sender: TObject);
procedure MainTableCategoryGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
procedure B_ModFooterClick(Sender: TObject);
procedure B_ConnectClick(Sender: TObject);
procedure B_TitleIndicClick(Sender: TObject);
procedure B_WordWrapClick(Sender: TObject);
procedure B_ShowEditClick(Sender: TObject);
procedure DBMemo1Enter(Sender: TObject);
procedure JvDBComboBox1KeyPress(Sender: TObject; var Key: Char);
procedure DBLookupComboBox1KeyPress(Sender: TObject; var Key: Char);
procedure JvDBGrid1RestoreGridPosition(Sender: TJvDBUltimGrid;
SavedBookmark: Pointer; SavedRowPos: Integer);
procedure B_SearchClick(Sender: TObject);
procedure JvDBGridFooter1Calculate(Sender: TJvDBGridFooter;
const FieldName: String; var CalcValue: Variant);
private
{ Private declarations }
OldRowsHeight, Compteur : Integer;
DisplayList : TStringList;
procedure FillUpList;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
{ TfrmMain }
constructor TfrmMain.Create(AOwner: TComponent);
begin
inherited;
OldRowsHeight := JvDBGrid1.RowsHeight;
Compteur := 0;
DisplayList := TStringList.Create;
end;
destructor TfrmMain.Destroy;
begin
DisplayList.Free;
inherited;
end;
procedure TfrmMain.FillUpList;
begin
if ((DisplayList = nil) or (not LookupTable.Active)) then
Exit;
DisplayList.Clear;
LookupTable.First;
while (not LookupTable.Eof) do
begin
DisplayList.Add(LookupTable.FieldByName('CodeLogiciel').AsString +
'=' + LookupTable.FieldByName('LibelleLog').AsString);
LookupTable.Next;
end;
end;
procedure TfrmMain.FormShow(Sender: TObject);
var
InitialSort: TSortFields;
begin
SetLength(InitialSort, 3);
InitialSort[0].Name := 'Category';
InitialSort[0].Order := JvGridSort_ASC;
InitialSort[1].Name := 'Licenses';
InitialSort[1].Order := JvGridSort_DESC;
InitialSort[2].Name := 'Software';
InitialSort[2].Order := JvGridSort_ASC;
JvDBGrid1.Sort(InitialSort);
end;
procedure TfrmMain.MainTableCategoryGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if not Assigned(DisplayList) then
Exit;
if (DisplayList.IndexOfName(Sender.AsString) = -1) then
FillUpList; // Key value not found -> the list is (re)loaded
Text := DisplayList.Values[Sender.AsString];
end;
procedure TfrmMain.B_ModFooterClick(Sender: TObject);
begin
JvDBGridFooter1.Columns.Items[0].Alignment := taCenter;
JvDBGridFooter1.Columns.Items[0].Bevel := pbRaised;
JvDBGridFooter1.Columns.Items[1].FieldName := 'Category';
JvDBGridFooter1.Columns.Items[1].DisplayMask := '';
JvDBGridFooter1.IgnoreHorzScrolling := True;
JvDBGridFooter1.IgnoreResizing := True;
JvDBGrid1.FixedCols := 1;
B_ModFooter.Enabled := False;
end;
procedure TfrmMain.B_ConnectClick(Sender: TObject);
begin
ADOConnection1.Connected := not ADOConnection1.Connected;
MainTable.Active := ADOConnection1.Connected;
LookupTable.Active := ADOConnection1.Connected;
end;
procedure TfrmMain.B_TitleIndicClick(Sender: TObject);
begin
Inc(Compteur);
if (Compteur = 1) then
begin
JvDBGrid1.Options := JvDBGrid1.Options - [dgTitles];
end
else if (Compteur = 2) then
begin
JvDBGrid1.Options := JvDBGrid1.Options - [dgIndicator];
end
else if (Compteur = 3) then
begin
JvDBGrid1.Options := JvDBGrid1.Options + [dgTitles];
end
else if (Compteur = 4) then
begin
JvDBGrid1.Options := JvDBGrid1.Options + [dgIndicator];
Compteur := 0;
end;
end;
procedure TfrmMain.B_WordWrapClick(Sender: TObject);
begin
JvDBGrid1.WordWrap := not JvDBGrid1.WordWrap;
end;
procedure TfrmMain.B_ShowEditClick(Sender: TObject);
begin
if (dgAlwaysShowEditor in JvDBGrid1.Options) then
JvDBGrid1.Options := JvDBGrid1.Options - [dgAlwaysShowEditor]
else
JvDBGrid1.Options := JvDBGrid1.Options + [dgAlwaysShowEditor];
end;
procedure TfrmMain.DBMemo1Enter(Sender: TObject);
begin
// Text is selected automatically
TDBMemo(Sender).SelectAll;
end;
procedure TfrmMain.JvDBComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) then
JvDBGrid1.CloseControl;
end;
procedure TfrmMain.DBLookupComboBox1KeyPress(Sender: TObject;
var Key: Char);
begin
if (Key = #13) then
JvDBGrid1.CloseControl
else
if (Key = #27) then
DBLookupComboBox1.Field.Value := DBLookupComboBox1.Field.OldValue;
end;
procedure TfrmMain.JvDBGrid1RestoreGridPosition(Sender: TJvDBUltimGrid;
SavedBookmark: Pointer; SavedRowPos: Integer);
begin
// Perfect cursor replacement
if (MainTable.BookmarkValid(SavedBookmark)) then
MainTable.Recordset.Bookmark := POleVariant(SavedBookmark)^;
try
MainTable.Resync([rmExact]);
except
end;
end;
procedure TfrmMain.B_SearchClick(Sender: TObject);
var
ResultCol: Integer;
ResultField: TField;
Found: Boolean;
begin
// Search of W (uppercase) in Software field, then search of 1 in Licenses field
Found := false;
JvDBGrid1.SaveGridPosition;
JvDBGrid1.SearchFields.Clear;
JvDBGrid1.SearchFields.Add('Software');
if (JvDBGrid1.Search('W', ResultCol, ResultField, True, False, True)) then
begin
Found := (MainTable.FieldByName('Licenses').AsString = '1');
while (not Found) do
begin
if (not JvDBGrid1.SearchNext(ResultCol, ResultField, True, False, True)) then
break;
Found := (MainTable.FieldByName('Licenses').AsString = '1');
end;
end;
if (Found) then
ShowMessage('Result found:'#13#10 + ResultField.AsString)
else
begin
JvDBGrid1.RestoreGridPosition();
ShowMessage('Not found');
end;
end;
procedure TfrmMain.JvDBGridFooter1Calculate(Sender: TJvDBGridFooter;
const FieldName: String; var CalcValue: Variant);
var
C: Integer;
begin
if (MainTable.Active) then
begin
if (AnsiSameText(FieldName, 'Licenses')) then
begin
CountQuery.Open();
if (CountQuery.Eof) then
CalcValue := 'ERROR'
else
CalcValue := CountQuery.FieldByName('Total').AsInteger;
CountQuery.Close();
end
else
if (AnsiSameText(FieldName, 'Category')) then
begin
CalcValue := string('');
for C := 0 to JvDBGrid1.Columns.Count-1 do
begin
if (JvDBGrid1.Columns.Items[C].Visible) then
begin
if (CalcValue <> string('')) then
CalcValue := CalcValue + string(',');
CalcValue := CalcValue +
IntToStr(JvDBGrid1.Columns.Items[C].Width);
end;
end;
CalcValue := 'Widths = ' + CalcValue;
end
else
CalcValue := MainTable.RecordCount;
end
else
CalcValue := FieldName;
end;
end.