📄 ubasedetail.pas
字号:
unit uBaseDetail;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, dxExEdtr, Provider, DB, DBClient, ActnList, ImgList, dxCntner,
dxTL, dxDBCtrl, dxDBGrid, ExtCtrls, ComCtrls, ToolWin, uGlobal, Grids,
DBGrids, Menus;
type
TBaseDetail = class(TForm)
cbMain: TCoolBar;
tbMain: TToolBar;
pnlTop: TPanel;
Img_Main: TImageList;
Actions: TActionList;
actClose: TAction;
actAdd: TAction;
actDel: TAction;
dsMast: TDataSource;
actSave: TAction;
dsItem: TDataSource;
actAddItem: TAction;
actDelItem: TAction;
actDelAllItem: TAction;
cdsItem: TClientDataSet;
cdsMast: TClientDataSet;
Cell: TdxDBGrid;
pmCell: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure actCloseExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure actAddExecute(Sender: TObject);
procedure actDelExecute(Sender: TObject);
procedure actSaveExecute(Sender: TObject);
procedure actAddItemExecute(Sender: TObject);
procedure actDelItemExecute(Sender: TObject);
procedure actDelAllItemExecute(Sender: TObject);
private
FOrderState: TOrderState;
FOrderCaption: string;
procedure SetKeyFieldValue(const Value: string);
procedure SetOrderState(const Value: TOrderState);
protected
FKeyFieldValue: string;
FFirstShow:Boolean;
FOrderStateCaption:string;
function IsDataChanged:boolean;virtual;
procedure InitVars; virtual;
procedure InitDisplay; virtual;
procedure Add; virtual;
procedure Del; virtual;
procedure Edit; virtual;
procedure Save; virtual;
procedure SaveMasterDetailData(const pMasterData, pDetailData:OleVariant); virtual;
function CheckDataBeforeSave:Boolean;virtual;
procedure GetData; virtual;
procedure GetMasterDetailData(var pMasterData, pDetailData:OleVariant); virtual;
procedure SetFieldsInfo; virtual;
procedure SetMasterFieldsDefaultValue; virtual;
procedure SetDetailFieldsDefaultValue; virtual;
procedure AddItem; virtual;
procedure DelItem; virtual;
procedure DelAllItem; virtual;
function GetOrderID:string;virtual;
function GetID:string;virtual;
function GetOrderDate:TDateTime;virtual;
function SaveChangedData:boolean; virtual;
public
{ Public declarations }
property KeyFieldValue:string read FKeyFieldValue write SetKeyFieldValue;
property OrderState:TOrderState read FOrderState write SetOrderState;
property OrderCaption:string read FOrderCaption write FOrderCaption;
end;
var
BaseDetail: TBaseDetail;
implementation
{$R *.dfm}
{ TBaseDetail }
procedure TBaseDetail.SetKeyFieldValue(const Value: string);
begin
FKeyFieldValue:=Value;
end;
procedure TBaseDetail.actCloseExecute(Sender: TObject);
begin
Close;
end;
procedure TBaseDetail.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
function TBaseDetail.IsDataChanged: boolean;
begin
cdsMast.CheckBrowseMode ;
cdsItem.CheckBrowseMode ;
Result:=(cdsMast.ChangeCount >0) or (cdsItem.ChangeCount >0) ;
end;
procedure TBaseDetail.Add;
begin
if SaveChangedData then
begin
KeyFieldValue:='';
GetData;
cdsMast.Append ;
OrderState:=osAppend;
SetMasterFieldsDefaultValue;
end;
end;
procedure TBaseDetail.Del;
begin
end;
procedure TBaseDetail.GetData;
var
pMasterData, pDetailData:OleVariant;
begin
GetMasterDetailData(pMasterData, pDetailData);
cdsMast.Data :=pMasterData;
cdsItem.Data := pDetailData;
cdsItem.DisableControls ;
try
SetFieldsInfo;
CreateCellCols(Cell, cdsItem);
SetPayItemColumnsInfo(Cell);
finally
cdsItem.EnableControls ;
SetCellAutoWidth(Cell);
end;
end;
procedure TBaseDetail.GetMasterDetailData(var pMasterData,
pDetailData: OleVariant);
begin
end;
procedure TBaseDetail.Save;
var
pMastDelta, pDetailDelta:OleVariant;
begin
if not CheckDataBeforeSave then exit;
pMastDelta:=Null;
pDetailDelta:=Null;
if cdsMast.ChangeCount >0 then pMastDelta:= cdsMast.Delta;
if cdsItem.ChangeCount >0 then pDetailDelta:= cdsItem.Delta;
SaveMasterDetailData(pMastDelta , pDetailDelta);
GetData;
OrderState:=osEdit;
end;
procedure TBaseDetail.SaveMasterDetailData(const pMasterData,
pDetailData: OleVariant);
begin
end;
function TBaseDetail.SaveChangedData: boolean;
var
iResult:Cardinal;
begin
Result:=True;
if IsDataChanged then
begin
iResult:=Application.MessageBox(pchar('数据已被修改,是否要保存!'), pchar(Application.Title ), MB_YESNOCANCEL + MB_ICONQUESTION );
try
Case iResult of
IDYES: Save;
IDCANCEL:begin
Result:=False;
cdsMast.Cancel ;
cdsItem.Cancel ;
end;
else
end;
except
Result:=False;
end;
end;
end;
procedure TBaseDetail.AddItem;
begin
end;
procedure TBaseDetail.DelAllItem;
begin
if not CheckDataSet(cdsItem) then exit;
EmptyTable(cdsItem);
end;
procedure TBaseDetail.DelItem;
begin
if not CheckDataSet(cdsItem) then exit;
if (not cdsItem.Eof) or (not cdsItem.Bof ) then
cdsItem.Delete ;
end;
procedure TBaseDetail.SetOrderState(const Value: TOrderState);
begin
FOrderState := Value;
if FOrderState=osEdit then
FOrderStateCaption:='修改'
else
FOrderStateCaption:='新增';
Caption:= FOrderCaption + '[' + FOrderStateCaption + ']';
end;
procedure TBaseDetail.InitVars;
begin
FFirstShow:=True;
FOrderCaption:='工资计算单';
end;
procedure TBaseDetail.FormCreate(Sender: TObject);
begin
InitVars;
end;
procedure TBaseDetail.InitDisplay;
begin
Caption:= FOrderCaption + '[' + FOrderStateCaption + ']';
end;
procedure TBaseDetail.FormShow(Sender: TObject);
begin
InitDisplay;
if FFirstShow then
begin
GetData;
if OrderState=osAppend then
Add
else
Edit;
end;
end;
procedure TBaseDetail.Edit;
begin
if not CheckDataSet(cdsMast) then exit;
if cdsMast.RecordCount >0 then
cdsMast.Edit
else
cdsMast.Append;
if not CheckDataSet(cdsItem) then exit;
if cdsItem.RecordCount >0 then
cdsMast.Edit;
end;
procedure TBaseDetail.actAddExecute(Sender: TObject);
begin
Add;
end;
procedure TBaseDetail.actDelExecute(Sender: TObject);
begin
Del;
end;
procedure TBaseDetail.actSaveExecute(Sender: TObject);
begin
Save;
end;
procedure TBaseDetail.actAddItemExecute(Sender: TObject);
begin
AddItem;
end;
procedure TBaseDetail.actDelItemExecute(Sender: TObject);
begin
DelItem;
end;
procedure TBaseDetail.actDelAllItemExecute(Sender: TObject);
begin
DelAllItem;
end;
function TBaseDetail.CheckDataBeforeSave: Boolean;
begin
Result:=IsDataChanged;
end;
function TBaseDetail.GetID: string;
begin
Result:='';
if not CheckDataSet(cdsMast) then exit;
if cdsMast.RecordCount=0 then exit;
if cdsMast.FindField(CS_KeyFieldName)<>nil then
Result:=cdsMast.FindField(CS_KeyFieldName).AsString;
end;
function TBaseDetail.GetOrderID: string;
begin
Result:='';
if not CheckDataSet(cdsMast) then exit;
if cdsMast.RecordCount=0 then exit;
if cdsMast.FindField(CS_OrderIDFieldName)<>nil then
Result:=cdsMast.FindField(CS_OrderIDFieldName).AsString;
end;
function TBaseDetail.GetOrderDate: TDateTime;
begin
Result:=Date;
if not CheckDataSet(cdsMast) then exit;
if cdsMast.RecordCount=0 then exit;
if cdsMast.FindField(CS_OrderDateFieldName)<>nil then
Result:=cdsMast.FindField(CS_OrderDateFieldName).AsDateTime ;
end;
procedure TBaseDetail.SetFieldsInfo;
begin
end;
procedure TBaseDetail.SetDetailFieldsDefaultValue;
begin
end;
procedure TBaseDetail.SetMasterFieldsDefaultValue;
begin
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -