⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ubasedetail.pas

📁 简单易用的按件按时计工资管理系统
💻 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 + -