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, dxSkinsCore, dxSkinsDefaultPainters, dxSkinWXI, 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, dxSkinBasic, dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee, dxSkinDarkroom, dxSkinDarkSide, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy, dxSkinGlassOceans, dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMetropolis, dxSkinMetropolisDark, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinOffice2013DarkGray, dxSkinOffice2013LightGray, dxSkinOffice2013White, dxSkinOffice2016Colorful, dxSkinOffice2016Dark, dxSkinOffice2019Black, dxSkinOffice2019Colorful, dxSkinOffice2019DarkGray, dxSkinOffice2019White, dxSkinPumpkin, dxSkinSeven, dxSkinSevenClassic, dxSkinSharp, dxSkinSharpPlus, dxSkinSilver, dxSkinSpringtime, dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld, dxSkinTheBezier, dxSkinValentine, dxSkinVisualStudio2013Blue, dxSkinVisualStudio2013Dark, dxSkinVisualStudio2013Light, dxSkinVS2010, dxSkinWhiteprint, dxSkinXmas2008Blue; type TfrmQryPivotBaseList = class(TForm) ToolBar3: TToolBar; Trefresh: TToolButton; Tprint: TToolButton; TprintGrid: TToolButton; TsaveGrid: TToolButton; TgridLiSet: 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); begin 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; TgridLiSet.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.