Files
2024-12-04 13:44:14 +09:00

157 lines
5.0 KiB
ObjectPascal

unit MainUnit;
interface
uses
{ Delphi }
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Actions, Vcl.ActnList, System.ImageList, Vcl.ImgList,
Vcl.Menus, Vcl.StdCtrls, Data.DB,
{ DevExpress }
dxForms, cxGraphics, dxUIAClasses, cxControls, dxLayoutControlAdapters, dxLayoutContainer,
cxButtons, cxClasses, dxLayoutControl, cxStyles, cxCustomData, cxFilter, cxData,
cxDataStorage, cxEdit, cxNavigator, dxDateRanges, dxScrollbarAnnotations, cxDBData,
cxGridLevel, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView,
cxGrid, dxmdaset, dxLayoutcxEditAdapters, cxTextEdit, cxCurrencyEdit, cxContainer,
cxImageList, cxMaskEdit, cxSpinEdit, cxDBEdit, dxCore, dxStatusBar,
{ DevExpress Skin }
cxLookAndFeels, cxLookAndFeelPainters, dxSkinsCore, dxSkinWXI, dxLayoutLookAndFeels, dxSkinsForm,
{ Custom }
DataUnit, cxRadioGroup, cxGroupBox;
type
TfrmMain = class(TdxForm, IDataStateNotifier)
lgRoot: TdxLayoutGroup;
lcMain: TdxLayoutControl;
lgToolbar: TdxLayoutGroup;
lgInput: TdxLayoutGroup;
lgGrid: TdxLayoutGroup;
btnAdd: TcxButton;
liAdd: TdxLayoutItem;
btnEdit: TcxButton;
liEdit: TdxLayoutItem;
btnDelete: TcxButton;
liDelete: TdxLayoutItem;
btnPost: TcxButton;
liSave: TdxLayoutItem;
btnCancel: TcxButton;
liCancel: TdxLayoutItem;
dbtvEmployee: TcxGridDBTableView;
grdEmployeeLevel1: TcxGridLevel;
grdEmployee: TcxGrid;
liGird: TdxLayoutItem;
dbtvEmployeeRecId: TcxGridDBColumn;
dbtvEmployeename: TcxGridDBColumn;
dbtvEmployeeage: TcxGridDBColumn;
dbtvEmployeeposition: TcxGridDBColumn;
dbtvEmployeesalary: TcxGridDBColumn;
dbtvEmployeeaddress: TcxGridDBColumn;
dbteName: TcxDBTextEdit;
dxLayoutItem2: TdxLayoutItem;
dbseAge: TcxDBSpinEdit;
dxLayoutItem3: TdxLayoutItem;
dbtePosition: TcxDBTextEdit;
dxLayoutItem4: TdxLayoutItem;
dbseSalary: TcxDBSpinEdit;
dxLayoutItem5: TdxLayoutItem;
dbteAddress: TcxDBTextEdit;
dxLayoutItem6: TdxLayoutItem;
dxLayoutAutoCreatedGroup1: TdxLayoutAutoCreatedGroup;
acToolbar: TActionList;
acAdd: TAction;
acEdit: TAction;
acDelete: TAction;
acSave: TAction;
acCancel: TAction;
scTheme: TdxSkinController;
dxLayoutLookAndFeelList: TdxLayoutLookAndFeelList;
dxLayoutSkinLookAndFeel1: TdxLayoutSkinLookAndFeel;
sbMain: TdxStatusBar;
dbtvEmployeeColumn1: TcxGridDBColumn;
rgWorkType: TcxRadioGroup;
dxLayoutItem1: TdxLayoutItem;
rbWorkType1: TcxRadioButton;
rbWorkType2: TcxRadioButton;
rbWorkType3: TcxRadioButton;
dxLayoutAutoCreatedGroup2: TdxLayoutAutoCreatedGroup;
dxLayoutAutoCreatedGroup3: TdxLayoutAutoCreatedGroup;
dbrgWorkType: TcxDBRadioGroup;
dxLayoutItem7: TdxLayoutItem;
dxLayoutAutoCreatedGroup4: TdxLayoutAutoCreatedGroup;
procedure DataSetCRUD(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure dbtvEmployeeCellClick(Sender: TcxCustomGridTableView;
ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
private
procedure NotifyDataSetStateChange(const AState: TDataSetState);
public
{ Public declarations }
end;
TWorkType = (신입, 근속자, 퇴사자);
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.DataSetCRUD(Sender: TObject);
// action에 Tag로 하나의 함수로 리펙토링
begin
var Tag:= TAction(Sender).Tag;
Case Tag of
1: // 추가
begin
dmData.mdEmployee.Append;
dbteName.SetFocus;
end;
2: dmData.mdEmployee.Edit; // 수정
3: dmData.mdEmployee.Delete; // 삭제
4: dmData.mdEmployee.Post; // 저장
5: dmData.mdEmployee.Cancel; // 취소
End;
end;
procedure TfrmMain.dbtvEmployeeCellClick(Sender: TcxCustomGridTableView;
ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
var
RecInx, ColInx: integer;
begin
var Controller:= TcxGridDBTableView(Sender).DataController;
RecInx:= ACellViewInfo.RecordViewInfo.Index;
ColInx:= Controller.GetItemByFieldName('worktype').Index;
var WorkType:= Controller.Values[RecInx, ColInx];
if WorkType = 신입 then
rbWorkType1.Checked:= True
else if WorkType = 근속자 then
rbWorkType2.Checked:= True
else if WorkType = 퇴사자 then
rbWorkType3.Checked:= True;
{ Case문을 활용한 아래 코드
case VarAsType(WorkType, varInteger) of
0: rbWorkType1.Checked:= True;
1: rbWorkType2.Checked:= True;
2: rbWorkType3.Checked:= True;
end;
}
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
// DataSet State를 DataUnit으로 분리(유닛간 결합도를 분리) 리펙토링
if Assigned(dmData) then
dmData.SetNotifier(Self);
end;
procedure TfrmMain.NotifyDataSetStateChange(const AState: TDataSetState);
begin
acSave.Enabled:= Not(AState in [dsBrowse]);
end;
end.