RtTool/Delphi7/开发档案/马国钢开发代码/ThreeFun/cxgridPas/U_CxGridSet.pas
2025-01-08 11:55:07 +08:00

148 lines
5.6 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.