unit U_SYDeptView; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxGraphics, cxCustomData, cxStyles, cxTL, cxMaskEdit, DB, ADODB, cxInplaceContainer, cxDBTL, cxControls, cxTLData, ComCtrls, ToolWin, StdCtrls, ExtCtrls, DBClient, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxGridCustomView, cxGrid; type TfrmSYDeptView = class(TForm) ToolBar1: TToolBar; TBRafresh: TToolButton; TBAdd: TToolButton; TBDel: TToolButton; TBClose: TToolButton; cxDBTreeList1: TcxDBTreeList; cxDBTreeList1cxDBTreeListColumn2: TcxDBTreeListColumn; DataSource1: TDataSource; ADOQueryTree: TADOQuery; ToolButton1: TToolButton; ADOQueryTemp: TADOQuery; ADOQueryCmd: TADOQuery; Panel1: TPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; DPTopName: TEdit; DPName: TEdit; DPNo: TEdit; CDS_Tree: TClientDataSet; cxGrid4: TcxGrid; Tv4: TcxGridDBTableView; cxGridDBColumn1: TcxGridDBColumn; cxGridDBColumn7: TcxGridDBColumn; cxGridDBColumn8: TcxGridDBColumn; cxGridLevel2: TcxGridLevel; Label4: TLabel; ToolButton2: TToolButton; CDS_User: TClientDataSet; DSUser: TDataSource; Label5: TLabel; DPOrder: TEdit; ToolButton3: TToolButton; procedure FormDestroy(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TBRafreshClick(Sender: TObject); procedure TBCloseClick(Sender: TObject); procedure TBAddClick(Sender: TObject); procedure cxDBTreeList1Click(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure TBDelClick(Sender: TObject); procedure DPNameKeyPress(Sender: TObject; var Key: Char); procedure FormShow(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure cxDBTreeList1DblClick(Sender: TObject); procedure Tv4DblClick(Sender: TObject); procedure ToolButton3Click(Sender: TObject); private { Private declarations } PState:Integer; FCPID,FTopID:String; procedure InitTree(); public { Public declarations } end; var frmSYDeptView: TfrmSYDeptView; implementation uses U_DataLink,U_RTFun; {$R *.dfm} procedure TfrmSYDeptView.InitTree(); var i:Integer; begin try ADOQueryTree.DisableControls; with ADOQueryTree do begin Close; SQL.Clear; SQL.Add('select * from SY_Dept order by DPlevel,DPOrder,DPName'); Open; end; SCreateCDS(ADOQueryTree,CDS_Tree); SInitCDSData(ADOQueryTree,CDS_Tree); //cxDBTreeList1.Items[0].Expand(false); cxDBTreeList1.Items[0].Expand(True); finally ADOQueryTree.EnableControls; end; //cxDBTreeList1.Items[1].Expand(False); end; procedure TfrmSYDeptView.FormDestroy(Sender: TObject); begin frmSYDeptView:=nil; end; procedure TfrmSYDeptView.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end; procedure TfrmSYDeptView.TBRafreshClick(Sender: TObject); begin InitTree(); end; procedure TfrmSYDeptView.TBCloseClick(Sender: TObject); begin Close; end; procedure TfrmSYDeptView.TBAddClick(Sender: TObject); begin PState:=11; DPTopName.Text:=Trim(CDS_Tree.fieldbyname('DPName').AsString); //FTopID:=Trim(ADOQueryTree.fieldbyname('CPID').AsString); FCPID:=''; DPName.Text:=''; DPNo.Text:=''; DPName.SetFocus; end; procedure TfrmSYDeptView.cxDBTreeList1Click(Sender: TObject); begin PState:=22; with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from SY_Dept where DPID='''+Trim(CDS_Tree.fieldbyname('DPParent').AsString)+''''); Open; end; FCPID:=Trim(CDS_Tree.fieldbyname('DPID').AsString); DPTopName.Text:=Trim(ADOQueryTemp.fieldbyname('DPName').AsString); DPName.Text:=Trim(CDS_Tree.fieldbyname('DPName').AsString); DPNo.Text:=Trim(CDS_Tree.fieldbyname('DPNo').AsString); DPOrder.Text:=Trim(CDS_Tree.fieldbyname('DPOrder').AsString); end; procedure TfrmSYDeptView.ToolButton1Click(Sender: TObject); var maxId:String; FInt:Integer; begin if Trim(DPName.Text)='' then begin Application.MessageBox('�������Ʋ���Ϊ�գ�','��ʾ',0); Exit; end; {if Trim(DPNo.Text)='' then begin Application.MessageBox('�����벻��Ϊ�գ�','��ʾ',0); Exit; end;} if Trim(DPOrder.Text)='' then begin DPOrder.Text:='99'; end; if TryStrToInt(Trim(DPOrder.Text),FInt)=False then begin Application.MessageBox('˳��ŷǷ�����!','��ʾ',0); Exit; end; try ADOQueryCmd.Connection.BeginTrans; if PState=11 then begin if GetLSNo(ADOQueryCmd,maxId,'DP','SY_Dept',3,1)=False then begin ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('������ʧ�ܣ�','��ʾ',0); Exit; end; end else begin maxId:=Trim(FCPID); end; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add('select * from SY_Dept where DPID='''+Trim(FCPID)+''''); Open; end; with ADOQueryCmd do begin if PState=11 then begin Append; FieldByName('DPID').Value:=Trim(maxId); FieldByName('DPName').Value:=Trim(DPName.Text); FieldByName('DPNo').Value:=Trim(DPNo.Text); FieldByName('DPParent').Value:=Trim(CDS_Tree.fieldbyname('DPID').AsString); FieldByName('DPLevel').Value:=CDS_Tree.fieldbyname('DPLevel').AsInteger+1; FieldByName('DPOrder').Value:=StrToInt(Trim(DPOrder.Text)); Post; end else if PState=22 then begin Edit; FieldByName('DPID').Value:=Trim(maxId); FieldByName('DPName').Value:=Trim(DPName.Text); FieldByName('DPNo').Value:=Trim(DPNo.Text); FieldByName('DPOrder').Value:=StrToInt(Trim(DPOrder.Text)); //FieldByName('CPParent').Value:=Trim(ADOQueryTree.fieldbyname('CPID').AsString); //FieldByName('CPOrder').Value:=ADOQueryTree.fieldbyname('CPOrder').AsInteger+1; Post; end; end; ADOQueryCmd.Connection.CommitTrans; Application.MessageBox('����ɹ�!','��ʾ',0); except ADOQueryCmd.Connection.RollbackTrans; Application.MessageBox('����ʧ��!','��ʾ',0); end; end; procedure TfrmSYDeptView.TBDelClick(Sender: TObject); begin if ADOQueryTree.FieldByName('DPLevel').AsInteger=0 then Exit; with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from SY_Dept where DPParent='''+Trim(CDS_Tree.fieldbyname('DPID').AsString)+''''); Open; if not IsEmpty then begin Application.MessageBox('�Ѿ������¼���֯����ɾ����','��ʾ',0); Exit; end; end; with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from SY_User where DPID='''+Trim(CDS_Tree.fieldbyname('DPID').AsString)+''''); Open; if not IsEmpty then begin Application.MessageBox('����֯������Ա����ɾ����','��ʾ',0); Exit; end; end; if Application.MessageBox('ȷ��Ҫɾ��������','��ʾ',32+4)<>IDYES then Exit; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add('delete SY_Dept where DPID='''+Trim(CDS_Tree.fieldbyname('DPID').AsString)+''''); sql.Add('delete SY_Dept where DPParent='''+Trim(CDS_Tree.fieldbyname('DPID').AsString)+''''); ExecSQL; end; InitTree(); end; procedure TfrmSYDeptView.DPNameKeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then DPNo.SetFocus; end; procedure TfrmSYDeptView.FormShow(Sender: TObject); begin InitTree(); end; procedure TfrmSYDeptView.ToolButton2Click(Sender: TObject); begin if CDS_Tree.IsEmpty=False then begin if CDS_User.IsEmpty then Exit; if Application.MessageBox('ȷ��Ҫ������֯������','��ʾ',32+4)<>IDYES then Exit; with ADOQueryCmd do begin Close; SQL.Clear; sql.Add('Update SY_User Set DPID='''+Trim(CDS_Tree.fieldbyname('DPID').AsString)+''''); sql.Add(' where UserId='''+Trim(CDS_User.fieldbyname('UserId').AsString)+''''); ExecSQL; end; with CDS_User do begin Edit; FieldByName('Dept').Value:=Trim(CDS_Tree.fieldbyname('DPName').AsString); Post; end; end; end; procedure TfrmSYDeptView.cxDBTreeList1DblClick(Sender: TObject); begin if CDS_Tree.FieldByName('DPLevel').Value=0 then begin with ADOQueryTemp do begin Close; SQL.Clear; SQL.Add('select A.*,Dept=(select DPName from SY_Dept where DPID=A.DPID) '); SQL.Add(' from SY_User A where UserId not in(''Admin'',''Test'') '); SQL.Add(' and Valid=''Y'' '); Open; end; SCreateCDS(ADOQueryTemp,CDS_User); SInitCDSData(ADOQueryTemp,CDS_User); end else begin with ADOQueryTemp do begin Close; SQL.Clear; SQL.Add('exec P_Select_Dept_User :CYType'); Parameters.ParamByName('CYType').Value:=Trim(CDS_Tree.fieldbyname('DPID').AsString); Open; end; SCreateCDS(ADOQueryTemp,CDS_User); SInitCDSData(ADOQueryTemp,CDS_User); end; ModalResult:=1; end; procedure TfrmSYDeptView.Tv4DblClick(Sender: TObject); begin ModalResult:=1; end; procedure TfrmSYDeptView.ToolButton3Click(Sender: TObject); begin ModalResult:=1; end; end.