157 lines
5.0 KiB
ObjectPascal
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.
|