unit U_CxGridSet; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,cxGridCustomView, cxGridCustomTableView, cxGridTableView,cxCustomData, cxGridDBTableView, cxGrid, BtnEdit, StdCtrls, ExtCtrls, ComCtrls, ToolWin, cxGridBandedTableView, cxGridDBBandedTableView; procedure ReadCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='公用'); procedure ReadCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='公用'); procedure WriteCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='公用'); procedure WriteCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='公用'); procedure CreateGroupSummarry(tv1:TcxGridDBTableView); implementation /////////////////////////////////////////////////////////////// //函数功能:从文件中读取cxGridCol设置 //fileName 推荐为窗口的caption名字caption名字 /////////////////////////////////////////////////////////////// procedure ReadCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='公用'); var mFileName:string; begin mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg'; //从布局文件中恢复 if FileExists(mFileName) then cxgrid.RestoreFromIniFile(mFileName); CreateGroupSummarry(cxgrid); end; /////////////////////////////////////////////////////////////// //函数功能:从文件中读取cxGridCol设置 //fileName 推荐为窗口的caption名字caption名字 /////////////////////////////////////////////////////////////// procedure ReadCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='公用'); var mFileName:string; begin mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg'; //从布局文件中恢复 if FileExists(mFileName) then cxgrid.RestoreFromIniFile(mFileName); end; /////////////////////////////////////////////////////////////// //函数功能:写cxGridCol设置到.dbg文件中 //默认推荐为窗口的caption名字 /////////////////////////////////////////////////////////////// procedure WriteCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='公用'); var mFileName:string; begin mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg'; if not DirectoryExists(ExtractFileDir(mFileName)) then CreateDir(ExtractFileDir(mFileName)); //保存为布局文件 cxgrid.StoreToIniFile(mFileName); end; /////////////////////////////////////////////////////////////// //函数功能:写cxGridCol设置到.dbg文件中 //默认推荐为窗口的caption名字 /////////////////////////////////////////////////////////////// procedure WriteCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='公用'); var mFileName:string; begin mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg'; if not DirectoryExists(ExtractFileDir(mFileName)) then CreateDir(ExtractFileDir(mFileName)); //保存为布局文件 cxgrid.StoreToIniFile(mFileName); end; ///////////////////////////////////////////////////// //函数:创建汇总列 ///////////////////////////////////////////////////// procedure CreateGroupSummarry(tv1:TcxGridDBTableView); var csg : TcxDataSummaryGroup; csglink : TcxDataSummaryGroupItemLink; csgItem : TcxDataSummaryItem; i:integer; mFieldName:string; begin ///创建汇总列 with tv1.DataController.Summary do begin try csg := DataController.Summary.SummaryGroups.Add; //创建汇总项 csg.Links.Clear; for i:= 0 to tv1.ColumnCount -1 do begin if not tv1.Columns[i].Visible then continue; mFieldName:=tv1.Columns[i].DataBinding.FieldName; if tv1.Columns[i].Summary.FooterKind=skSum then begin // (tv1.DataController.DataSet.Fields[i] as TNumericField).DisplayFormat := '#,0.00;-#,0.00;#'; //tv1.Columns[i].Summary.FooterFormat:='0.0'; //tv1.Columns[i].Summary.FooterKind := skSum; //这个与Group Row上的汇总同时使用时好象只能有一个有效 //创建行分组行上的汇总项 csgitem := csg.SummaryItems.Add; csgitem.ItemLink := tv1.Columns[i]; //汇总字段1 csgitem.Position :=spGroup; csgitem.Kind := skSum; csgItem.Format := trim(tv1.Columns[i].Caption) +'小计=#,0.0'; tv1.Columns[i].Summary.GroupFooterKind := skSum; tv1.Columns[i].Summary.GroupFooterFormat := '#,0.00'; end else if tv1.Columns[i].Summary.FooterKind=skCount then begin // (tv1.DataController.DataSet.Fields[i] as TNumericField).DisplayFormat := '#,0.00;-#,0.00;#'; //tv1.Columns[i].Summary.FooterFormat:='0.0'; tv1.Columns[i].Summary.FooterKind := skCount; tv1.Columns[i].Summary.GroupFooterKind := skCount; //tv1.Columns[i].Summary.GroupFooterFormat := '#,0.00'; //这个与Group Row上的汇总同时使用时好象只能有一个有效 //创建行分组行上的汇总项 csgitem := csg.SummaryItems.Add; csgitem.ItemLink := tv1.Columns[i]; //汇总字段1 csgitem.Kind := skCount; //csgItem.Format := '小计=#,0.0'; end else begin csglink := csg.Links.Add; csglink.ItemLink := tv1.Columns[i]; //分类字段 //所有不参与汇总的列都有可能用来分组,必须将这些列加入到 //SummaryGroupItemLink中,没有加入该连接的列用来分组时 //汇总值不会显示 end; end; finally end; end; end; end.