unit U_QryPivotBaseList; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ToolWin,cxExportPivotGridLink, FrameDateSel10, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxClasses, dxLayoutContainer, cxPivotDrillDownFormUnit, dxLayoutControl, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, Vcl.StdCtrls, Vcl.ExtCtrls, cxCustomData, cxStyles, dxBarBuiltInMenu,U_WindowFormdesign, cxCustomPivotGrid, cxPivotGrid, cxGridCustomPopupMenu, cxGridPopupMenu, math, Data.DB, Datasnap.DBClient, Data.Win.ADODB, cxDBPivotGrid, dxLayoutControlAdapters, ; type TfrmQryPivotBaseList = class(TForm) ToolBar3: TToolBar; Trefresh: TToolButton; Tprint: TToolButton; TprintGrid: TToolButton; TsaveGrid: TToolButton; TgridSet: TToolButton; Tclose: TToolButton; frmFrameDateSel1: TfrmFrameDateSel10; dxLayoutControl_query: TdxLayoutControl; dxLayoutControl_queryGroup_Root: TdxLayoutGroup; Panel_page: TPanel; LBCPAP: TLabel; Label31: TLabel; BTNP: TButton; BTLP: TButton; TCBNOR: TcxComboBox; ADOQueryBaseCmd: TADOQuery; ADOQueryBaseTemp: TADOQuery; ADOQueryList: TADOQuery; DataSource1: TDataSource; cxGridPopupMenu1: TcxGridPopupMenu; cxDBPivotGrid1: TcxDBPivotGrid; CheckBox_filter: TCheckBox; CheckBox_data: TCheckBox; CheckBox_row: TCheckBox; CheckBox_col: TCheckBox; dxLayoutItem1: TdxLayoutItem; dxLayoutItem2: TdxLayoutItem; dxLayoutItem3: TdxLayoutItem; dxLayoutItem4: TdxLayoutItem; procedure TprintClick(Sender: TObject); procedure TrefreshClick(Sender: TObject); procedure TcloseClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormShow(Sender: TObject); procedure cxDBPivotGrid1DblClick(Sender: TObject); procedure CheckBox_filterClick(Sender: TObject); procedure CheckBox_dataClick(Sender: TObject); procedure CheckBox_rowClick(Sender: TObject); procedure CheckBox_colClick(Sender: TObject); private fWindowDesign: TWindowFormdesign; CurrentPage, RecordsNumber: Integer; fDesignCode:string; procedure doQuery(); procedure doQueryByCriteria(); procedure initGrid(); protected fParameters1: string; fParameters2: string; fParameters3: string; fParameters4: string; fParameters5: string; fParameters10: string; function GetPivotGrid: TcxCustomPivotGrid; virtual; public fExportFileName:string; fFormId: integer; fProcedureName:string; //�洢�������� FLMType:string; //�����ļ����ͱ�־ ftimeType:string; //�������� fQueryType:String; //��ѯ���� FFiltration1:string; //��ӡ�������� fCriteria:string; //�������� property PivotGrid: TcxCustomPivotGrid read GetPivotGrid; constructor Create(AOwner: TComponent; ACaption: string=''; Parameters1: string=''; Parameters2: string=''; Parameters3: string=''; Parameters4: string=''; Parameters5: string=''; Parameters10: string='';FormID:Integer=0); end; var frmQryPivotBaseList: TfrmQryPivotBaseList; implementation uses U_RTFun, U_globalVar, U_dataLink,U_FormLayOutDesign, U_LabelPrint; {$R *.dfm} procedure TfrmQryPivotBaseList.CheckBox_colClick(Sender: TObject); begin cxDBPivotGrid1.OptionsView.ColumnFields:= CheckBox_col.Checked; end; procedure TfrmQryPivotBaseList.CheckBox_dataClick(Sender: TObject); begin cxDBPivotGrid1.OptionsView.DataFields:= CheckBox_data.Checked; end; procedure TfrmQryPivotBaseList.CheckBox_filterClick(Sender: TObject); begin cxDBPivotGrid1.OptionsView.FilterFields:= CheckBox_filter.Checked; end; procedure TfrmQryPivotBaseList.CheckBox_rowClick(Sender: TObject); begin cxDBPivotGrid1.OptionsView.RowFields:= CheckBox_row.Checked; end; constructor TfrmQryPivotBaseList.Create(AOwner: TComponent; ACaption: string=''; Parameters1: string=''; Parameters2: string=''; Parameters3: string=''; Parameters4: string=''; Parameters5: string=''; Parameters10: string='';FormID:Integer=0); begin inherited Create(AOwner); if ACaption <> '' then Caption := ACaption; fParameters1 := Parameters1; fParameters2 := Parameters2; fParameters3 := Parameters3; fParameters4 := Parameters4; fParameters5 := Parameters5; fParameters10 := Parameters10; fFormId:= FormID ; end; procedure TfrmQryPivotBaseList.FormClose(Sender: TObject; var Action: TCloseAction); begin Sendmessage(application.MainForm.Handle, WM_CloseForm, 4, 0); Action:=cafree; end; procedure TfrmQryPivotBaseList.FormCreate(Sender: TObject); var mFontSize:integer; begin getSystemIni(); if gFontSize<9 then begin mFontSize := 12; end else begin mFontSize:=gFontSize ; end; self.Font.Size := gFontSize; if trim(gFontName)<>'' then self.Font.Name:=gFontName; cxDBPivotGrid1.Align:=alClient; CurrentPage := 1; RecordsNumber := 500; fWindowDesign := TWindowFormdesign.Create(); frmFrameDateSel1.begdate.Date:=SGetServerDate(ADOQueryBaseTemp); frmFrameDateSel1.enddate.Date:=frmFrameDateSel1.begdate.Date; end; procedure TfrmQryPivotBaseList.FormDestroy(Sender: TObject); begin fWindowDesign.free; end; procedure TfrmQryPivotBaseList.FormShow(Sender: TObject); begin fDesignCode := fDllFileName +'|'+self.name+ '|' + intTostr(fformId) + '|' + 'cxgrid1'; if DParameters8<>'1' then begin fWindowDesign.FormStyleInit10(self, fFormId, ADOQueryBaseTemp, ADOQueryBaseCmd, '', fParameters10); end; TgridSet.Visible:=gIsCanDesign; if dxLayoutControl_query.Tag<>999 then readLayOut(dxLayoutControl_query,ADOQueryBaseTemp,PWideChar( fDllFileName+'|'+self.name+'|'+dxLayoutControl_query.Name+'.ini')); fWindowDesign.fProcedureName:=fProcedureName; //���Ӷ�̬���� addQryContionByLay(ADOQueryBaseTemp,fformId,'cxgrid1',dxLayoutControl_query,7); initGrid(); end; procedure TfrmQryPivotBaseList.TcloseClick(Sender: TObject); begin close; end; procedure TfrmQryPivotBaseList.TprintClick(Sender: TObject); begin cxExportPivotGridToXLSX(fExportFileName, cxDBPivotGrid1, True, True, '', nil); end; procedure TfrmQryPivotBaseList.TrefreshClick(Sender: TObject); begin if frmFrameDateSel1.BegDate.Visible then begin frmFrameDateSel1.BegDate.SetFocus; end; CurrentPage := 1; initGrid(); end; /////////////////////////////// /// procedure TfrmQryPivotBaseList.initGrid(); begin if fQueryType='criteria' then begin doQueryByCriteria() ; end else begin frmFrameDateSel1.jqModel.Checked:=true; doQuery() ; end; end; //////////////////////////////////// procedure TfrmQryPivotBaseList.cxDBPivotGrid1DblClick(Sender: TObject); var ACrossCell: TcxPivotGridCrossCell; begin with PivotGrid.HitTest do begin if HitAtDataCell then begin ACrossCell := (HitObject as TcxPivotGridDataCellViewInfo).CrossCell; if ACrossCell <> nil then cxShowDrillDownDataSource(ACrossCell); end; end; end; procedure TfrmQryPivotBaseList.doQuery(); var strwhere: string; begin if fProcedureName='' then begin application.MessageBox('�洢�������Ʋ�������Ϊ��!','������Ϣ',0); exit; end; strwhere := GetProcedureParam(dxLayoutControl_query); try cxDBPivotGrid1.BeginUpdate(); ADOQueryList.DisableControls; with ADOQueryList do begin close; Filtered := false; sql.Clear; sql.Add('exec '+fProcedureName); sql.Add('@timeType='+quotedstr(fTimeType)); sql.Add(',@begDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.begdate.Date))); sql.Add(',@endDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.enddate.Date+1))); if frmFrameDateSel1.jqModel.Checked then sql.Add(',@jqModel=1') else sql.Add(',@jqModel=0'); if Panel_page.Visible then begin sql.Add(',@pageIndex=' + inttostr(CurrentPage)); sql.Add(',@pageSize=' + inttostr(RecordsNumber)); end; sql.Add(',@criteria='+ quotedstr(fcriteria)); if strwhere<>'' then sql.Add(','+strwhere); // showMessage(sql.Text); //cxMemo1.Text:= sql.Text ; open; end; // SCreateCDS(ADOQueryList, CDS_List); //SInitCDSData(ADOQueryList, CDS_List); if Panel_page.Visible then begin LBCPAP.Caption := inttostr(CurrentPage) + '/' + inttostr(ceil(ADOQueryList.FieldByName('TotalCount').AsInteger / RecordsNumber)); end; finally ADOQueryList.EnableControls; cxDBPivotGrid1.EndUpdate; end; end; //////////////////////////////////// procedure TfrmQryPivotBaseList.doQueryByCriteria(); var mSqlWhere: string; begin if fProcedureName='' then begin application.MessageBox('�洢�������Ʋ�������Ϊ��!','������Ϣ',0); exit; end; mSqlWhere := SLGetFilters(dxLayoutControl_query, 1, 2); if trim(mSqlWhere) <> '' then begin mSqlWhere := ' and ' + trim(mSqlWhere); end; mSqlWhere:=fCriteria + ' ' + mSqlWhere ; try cxDBPivotGrid1.BeginUpdate(); ADOQueryList.DisableControls; with ADOQueryList do begin close; Filtered := false; sql.Clear; sql.Add('exec '+fProcedureName); sql.Add('@timeType='+quotedstr(fTimeType)); sql.Add(',@begDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.begdate.Date))); sql.Add(',@endDate='+quotedstr(FormatDateTime('yyyy-MM-dd', frmFrameDateSel1.enddate.Date+1))); if Panel_page.Visible then begin sql.Add(',@pageIndex=' + inttostr(CurrentPage)); sql.Add(',@pageSize=' + inttostr(RecordsNumber)); end; sql.Add(',@criteria='+ quotedstr(mSqlWhere)); //cxMemo1.Text:= sql.Text ; open; end; // SCreateCDS(ADOQueryList, CDS_List); // SInitCDSData(ADOQueryList, CDS_List); if Panel_page.Visible then begin LBCPAP.Caption := inttostr(CurrentPage) + '/' + inttostr(ceil(ADOQueryList.FieldByName('TotalCount').AsInteger / RecordsNumber)); end; finally ADOQueryList.EnableControls; cxDBPivotGrid1.EndUpdate; end; end; function TfrmQryPivotBaseList.GetPivotGrid: TcxCustomPivotGrid; begin Result := cxDBPivotGrid1; end; end.