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

📄 mdparent.pas.~1~

📁 delphi制作表格的控件
💻 ~1~
📖 第 1 页 / 共 2 页
字号:
unit MDParent;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  DB, StdCtrls, Mask, Buttons, Menus,DBTables,DateUtils,EasyGrid, Grids,
  DBGrids;

type
  TMDParentForm = class(TForm)
    MasterSource: TDataSource;
    DetailSource: TDataSource;
    PrintBtn: TBitBtn;
    AddBtn: TBitBtn;
    DeleteBtn: TBitBtn;
    EditBtn: TBitBtn;
    SaveBtn: TBitBtn;
    CancelBtn: TBitBtn;
    CloseBtn: TBitBtn;
    PriorBtn: TBitBtn;
    NextBtn: TBitBtn;
    SelectBtn: TBitBtn;
    BillLabel: TLabel;
    RefreshBtn: TBitBtn;
    EasyGrid1: TEasyGrid;
    Database: TDatabase;
    MasterQuery: TQuery;
    DetailQuery: TQuery;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Table1: TTable;
    MasterQueryPO_NUMBER: TStringField;
    MasterQueryCUST_NO: TIntegerField;
    MasterQuerySALES_REP: TSmallintField;
    MasterQueryORDER_STATUS: TStringField;
    MasterQueryORDER_DATE: TDateTimeField;
    MasterQuerySHIP_DATE: TDateTimeField;
    MasterQueryDATE_NEEDED: TDateTimeField;
    MasterQueryPAID: TStringField;
    MasterQueryQTY_ORDERED: TIntegerField;
    MasterQueryTOTAL_VALUE: TIntegerField;
    MasterQueryDISCOUNT: TFloatField;
    MasterQueryITEM_TYPE: TStringField;
    MasterQueryAGED: TFloatField;
    DetailQueryITEM_ID: TIntegerField;
    DetailQuerySPEC_ID_REF: TIntegerField;
    DetailQueryCURRENCY_ID_REF: TIntegerField;
    DetailQueryITEM: TStringField;
    DetailQueryPRICE: TIntegerField;
    DetailQueryDISCOUNT: TSmallintField;
    procedure CloseBtnClick(Sender: TObject);
    procedure SelectBtnClick(Sender: TObject);
    procedure AddBtnClick(Sender: TObject);
    procedure EditBtnClick(Sender: TObject);
    procedure CancelBtnClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SaveBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure PriorBtnClick(Sender: TObject);
    procedure NextBtnClick(Sender: TObject);
    procedure MasterQueryAfterScroll(DataSet: TDataSet);
    procedure AddRowClick(Sender: TObject);
    procedure DelRowClick(Sender: TObject);
    procedure ExDBGridItemChanged(Sender: TObject; Field: TField;
       Value: String);
    procedure ExDBGridEditButtonClick(Sender: TObject);
    procedure DeleteBtnClick(Sender: TObject);
    procedure RefreshBtnClick(Sender: TObject);
    procedure DesignFormatItemClick(Sender: TObject);
    procedure SaveFormatItemClick(Sender: TObject);
    procedure NewPropItemClick(Sender: TObject);
    procedure FirstItemClick(Sender: TObject);
    procedure LastItemClick(Sender: TObject);
    procedure DisableBillItemClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure SetPriceItemClick(Sender: TObject);
    procedure GridMenuPopup(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);

  private
    { Private declarations }
    EditStatus:Integer;
    ///////////////////////////////////
    InvtSchType:Integer;
    ///////////////////////////////////

    ////////////////////////////////////
    //procedure OpenDataSet(DataSet:TDataSet);
    function  DataChanged:Boolean;
    procedure SetDetailPKValue;
    function  GetPKID:Integer;
  //protected
    procedure SetButtons;virtual;
    procedure CalcMasterFieldsValue(DataSet:TDataSet);virtual;
    procedure CalcDetailFieldsValue(DataSet:TDataSet);virtual;
    procedure MasterBeforePost(DataSet:TDataSet);virtual;
    procedure DetailBeforePost(DataSet:TDataSet);virtual;
    procedure EditItemChanged(FieldName:String);virtual;
  public
    { Public declarations }
    MPKCol,DPKCol1,DPKCol2,TableName,BillType:String;
    procedure InitForm;virtual;
    procedure UpdateTable;virtual;
    procedure MasterNewRecords(DataSet:TDataSet);virtual;
    procedure DetailNewRecords(DataSet:TDataSet);virtual;
/////////////////////////////////////////////

    procedure SaveData;virtual;
    procedure ExecSQl(SQLStr:String);
    function  GetSQLResult(SQlStr:String):Integer;
  end;

var
  MDParentForm: TMDParentForm;

implementation
uses DesignGrid;
{$R *.dfm}

procedure TMDParentForm.CalcMasterFieldsValue(DataSet:TDataSet);
begin


end;

procedure TMDParentForm.CalcDetailFieldsValue(DataSet:TDataSet);
var Qty,Price,TaxRate,DisRate,V1,V2:Double;
    IncludeTax:String;
begin
   Qty:=DetailQuery.FieldByName('Qty').AsFloat;
   Price:=DetailQuery.FieldByName('Price').AsFloat;
   TaxRate:=DetailQuery.FieldByName('TaxRate').AsFloat;
   DisRate:=DetailQuery.FieldByName('DisRate').AsFloat;
   V1:=Qty*Price*DisRate/10;
   V2:=V1*TaxRate/100; 
   DetailQuery.FieldByName('TaxMoney').AsFloat:=V2;
   DetailQuery.FieldByName('TotalMoney').AsFloat:=V1;
end;

procedure TMDParentForm.MasterNewRecords(DataSet:TDataSet);
var I,Count:Integer;
    S:String;
begin
   Count:=DataSet.FieldCount-1;
   for I:=0 to Count do
   begin
      if DataSet.Fields[I].FieldKind=fkLookup then Continue; 

      if S='' then Continue;
      if UpperCase(S)='TODAY' then
         DataSet.Fields[I].AsVariant:=Today
      else
         DataSet.Fields[I].AsVariant:=S;
   end;
   DataSet.FieldByName('Status').AsString:='1';
end;

procedure TMDParentForm.DetailNewRecords(DataSet:TDataSet);
var I,Count:Integer;
    S:String;

begin
   Count:=DataSet.FieldCount-1;
   for I:=0 to Count do
   begin
      if DataSet.Fields[I].FieldKind=fkLookup then Continue;

      if S='' then Continue;
      if UpperCase(S)='TODAY' then
         DataSet.Fields[I].AsVariant:=Today
      else
         DataSet.Fields[I].AsVariant:=S;
   end;
   if DataSet.FindField('DisRate')<>nil then
      DataSet.FieldByName('DisRate').AsString:='10';
end;

procedure TMDParentForm.MasterBeforePost(DataSet:TDataSet);
var I:Integer;
begin
  { for I:=0 to DataSet.FieldCount-1 do
   begin
      if DataSet.Fields[I].DataType in [ftSmallint, ftInteger, ftWord,
         ftFloat, ftCurrency] then begin
         if DataSet.Fields[I].IsNull then DataSet.Fields[I].Value:=0;
      end;
      if DataSet.Fields[I].DataType in [ftString] then begin
         if ((DataSet.Fields[I].IsNull) or (Trim(DataSet.Fields[I].AsString)='')) and
             (DataSet.Fields[I].Required) then begin
            MessageBox(Handle,PChar(DataSet.Fields[I].DisplayLabel+' 不能为空!!'),
                                             '信息提示',MB_OK+MB_ICONINFORMATION);
            Abort;
         end;
      end;
   end;}
end;

procedure TMDParentForm.DetailBeforePost(DataSet:TDataSet);
var I:Integer;
begin
   if DataSet.FindField('Qty')<>nil then
   begin
     if (DataSet.FieldByName('Qty').AsFloat=0) or
        (DataSet.FieldByName('Price').AsFloat=0) then
     begin
       MessageBeep(0);
       Abort;
     end;
   end;
//---------------------------------
   //MasterBeforePost(DataSet);
end;

function TMDParentForm.GetPKID:Integer;
var I:Integer;
begin
   {DM.GetPKID.Params[0].AsString:='1';
   DM.GetPKID.Params[1].AsString:=TableName;
   DM.GetPKID.ExecProc;
   Result:=DM.GetPKID.Params[2].AsInteger;}
end;



procedure TMDParentForm.SelectBtnClick(Sender: TObject);
Var P:TPoint;
begin
  {P:=Point(SelectBtn.Left,SelectBtn.Top+SelectBtn.Height);
  P:=ClientToScreen(P);
  PopupMenu.Popup(P.X,P.Y);}
end;

procedure TMDParentForm.ExecSQl(SQLStr:String);
begin
   {try
     with TmpQuery do
     begin
       Close;
       Sql.Add(SQLStr);
       ExecSql;
     end;
   finally

   end;}
end;

function TMDParentForm.GetSQLResult(SQlStr:String):Integer;
begin
   Result:=0;
   {try
     with DM.TmpQuery do
     begin
       Close;
       Sql.Add(SQLStr);
       Open;
     end;
     Result:=DM.TmpQuery.Fields[0].AsInteger;
   finally

   end; }
end;


procedure TMDParentForm.UpdateTable;
begin

end;

procedure TMDParentForm.PriorBtnClick(Sender: TObject);
begin
   MasterQuery.Prior;
end;

procedure TMDParentForm.NextBtnClick(Sender: TObject);
begin
   MasterQuery.Next;
end;

procedure TMDParentForm.SetButtons();
var Count:Integer;
begin  ///EditStatus  0:Browse 1:Append 2:Edit
    Count:=MasterQuery.RecordCount;
    MasterSource.AutoEdit:=(EditStatus>0);
    DetailSource.AutoEdit:=(EditStatus>0);

    AddBtn.Enabled:=(EditStatus=0);
    EditBtn.Enabled:=((EditStatus=0) and (Count>0));
    DeleteBtn.Enabled:=((EditStatus=0) and (Count>0));


    SaveBtn.Enabled:=(EditStatus>0);
    CancelBtn.Enabled:=(EditStatus>0);
    RefreshBtn.Enabled:=(EditStatus=0);
//////////////////////////////////////////////////
    //SelectBtn.Enabled:=((EditStatus=0) and (Count>0));
    {FirstItem.Enabled:=((EditStatus=0) and (Count>0));
    LastItem.Enabled:=((EditStatus=0) and (Count>0));
    QueryItem.Enabled:=(EditStatus=0);
    ExportItem.Enabled:=(EditStatus=0);
    PrevItem.Enabled:=(EditStatus=0);
    ReportItem.Enabled:=(EditStatus=0);
    DesignFormatItem.Enabled:=(EditStatus=0);
    SaveFormatItem.Enabled:=(EditStatus=0);}

    //BillPropItem.Enabled:=(EditStatus>0);

    //DisableBillItem.Enabled:=(EditStatus=2);
    //ReferBillItem.Enabled:=(EditStatus>0);

    PrintBtn.Enabled:=((EditStatus=0) and (Count>0));
    PriorBtn.Enabled:=((EditStatus=0) and (Count>0));
    NextBtn.Enabled:=((EditStatus=0) and (Count>0));
end;

procedure TMDParentForm.CloseBtnClick(Sender: TObject);
begin
  Close;
end;

procedure TMDParentForm.AddBtnClick(Sender: TObject);
begin
  MasterQuery.Append;
  EditStatus:=1;
  SetButtons;
end;

procedure TMDParentForm.EditBtnClick(Sender: TObject);
begin
  EditStatus:=2;
  SetButtons;
end;

procedure TMDParentForm.CancelBtnClick(Sender: TObject);
begin
   if DetailQuery.State in [dsInsert,dsEdit] then DetailQuery.Cancel;
   if MasterQuery.State in [dsInsert,dsEdit] then MasterQuery.Cancel;
   DetailQuery.CancelUpdates;
   MasterQuery.CancelUpdates;
   EditStatus:=0;
   SetButtons;
end;

procedure TMDParentForm.SetDetailPKValue;
var I,Count,Value,TmpValue,MaxRecId,TmpRecId:Integer;
begin
   try
     Count:=DetailQuery.RecordCount;
     DetailQuery.DisableControls;

     if EditStatus=1 then begin
        Value:=GetPKID;
        if MasterQuery.State=dsBrowse then MasterQuery.Edit;
        MasterQuery.FieldByName(MPKCol).AsInteger:=Value;
     end else if EditStatus=2 then begin
        Value:=MasterQuery.FieldByName(MPKCol).AsInteger;
     end;
     MaxRecId:=1;
     DetailQuery.First;
     for I:=1 to Count do
     begin
        TmpValue:=DetailQuery.FieldByName(DPKCol1).AsInteger;
        TmpRecId:=DetailQuery.FieldByName(DPKCol2).AsInteger;
        if TmpValue=0 then
        begin
           DetailQuery.Edit;
           DetailQuery.FieldByName(DPKCol1).AsInteger:=Value;
           DetailQuery.FieldByName(DPKCol2).AsInteger:=MaxRecId;
           DetailQuery.Post;
           MaxRecId:=MaxRecId+1;
        end else if MaxRecId<=TmpRecId then MaxRecId:=TmpRecId+1;
        DetailQuery.Next;
     end;
   finally
     DetailQuery.EnableControls;
   end;
end;

function TMDParentForm.DataChanged:Boolean;
begin
   if MasterQuery.State=dsInsert then
   begin
      if MasterQuery.Modified then MasterQuery.Post
   end;
   if (MasterQuery.State=dsEdit) then MasterQuery.Post;
   if (DetailQuery.State in [dsInsert,dsEdit]) then DetailQuery.Post;
   Result:=(MasterQuery.UpdatesPending or DetailQuery.UpdatesPending);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -