搜档网
当前位置:搜档网 › cxgrid动态学习

cxgrid动态学习

cxgrid 获取合计行数值 2012-10-13 12:11:02| 分类: delphi | 标签: |举报 |字号大

小 订阅
zsl := cxGrid1DBTableView1.DataController.Summary.FooterSummaryValues[0];
zje := cxGrid1DBTableView1.DataController.Summary.FooterSummaryValues[1];
cxgrid中,如何根据列名或字段名取得footer值

注意,不是根据index取得footer值
cxgrdtbv1.DataController.Summary.FooterSummaryValues[0];


Delphi(Pascal) code with cxGrid1DBTableView1.DataController.Summary do
FooterSummaryValues[FooterSummaryItems.IndexOfItemLink(
cxGrid1DBTableView1.GetColumnByFieldName('字段名'))];

Delphi的StringReplace 字符串替换函数


function StringReplace (const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

rfReplaceAll:全部替换
rfIgnoreCase:忽略大小写

For Example:

var
aStr: String;
begin
aStr := 'This is a book, not a pen!';
ShowMessage(StringReplace (aStr, 'a', 'two', []));//This is two book, not a pen!只替换了第一个符合的字
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));//This is two book, not two pen!替换了所有符合的字
aStr := 'This is a book, not A pen!';
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll]));//This is two book, not A pen!只替换了符合的字(小写a)
ShowMessage(StringReplace (aStr, 'a', 'two', [rfReplaceAll, rfIgnoreCase]));//This is two book, not two pen!不管大小写替换了所有符合的字



cxgrid 动态列 汇总 2012-08-31 19:20:08| 分类: 默认分类 | 标签: |举报 |字号大

小 订阅
//加合计项
TcxGridDBTableSummaryItem SummaryItem := TcxGridDBTableSummaryItem(GridView.DataController.Summary.FooterSummaryItems.Add);
SummaryItem.Column := GridView.GetColumnByFieldName('字段名');
SummaryItem.FieldName := GridView.GetColumnByFieldName('字段名').DataBinding.FieldName;
SummaryItem.Kind := skSum;
SummaryItem.Format := ',0.00';

关于cxgrid的超级难题,解决了对大家都有好处!(动态创建列、汇总列、分组汇总列)

我将列设置的信息放在一个表中的,调入窗体时列、合计列、分组合计列都要求是动态实现的,现列、合计列小弟已经实现了,就是分组合计列没实现!现将我的代码贴出来,大家帮忙齐心将它攻克了!
procedure Tfrmbase25.columnset_cx(cxgrd: TcxGridDBTableView; ckey: string); //cxgrid动态创建列 类似用友的列设置(精典)
var i:Integer;
column:TcxGridDBColumn;
footsumitem,groupfootsumitem:TcxGridDBTableSummaryItem; //动态合计行变量
qrycolumn,qrycolumnsum:TADOQuery;
begin
qrycolumnsum:=TADOQuery.Create(Application);
qrycolumnsum.Connection:=dm.adocn;
qrycolumnsum.sql.add('select iid,cfld,cfldnewcaption,bsum from bd_gridcolumnset where bsum=1 ');
qrycolumnsum.open;
qrycolumn:=tadoquery.Create(application);
qrycolumn.Connection:=dm.adocn;
qryc

olumn.sql.add('select iid,idispno,bdisp,ccode,cfld,cfldnewcaption,icolwidth,calign,cformat,bsum from bd_gridcolumnset where bdisp=1');
qrycolumn.open;
//动态创建合计列、分组汇总列
if not qrycolumnsum.Eof then
begin
//以下处理总合计
cxgrd.OptionsView.Footer:=True;
cxgrd.OptionsView.GroupFooters:=gfVisibleWhenExpanded;
end;

//动态创建列
cxgrd.ClearItems;
qrycolumn.First;
for i:=0 to qrycolumn.RecordCount-1 do
begin
column:=cxgrd.CreateColumn;
column.DataBinding.FieldName:=qrycolumn.fieldbyname('cfld').asstring;
column.Caption:=qrycolumn.fieldbyname('cfldnewcaption').asstring;
column.Width:=qrycolumn.fieldbyname('icolwidth').AsInteger;
column.Visible:=qrycolumn.fieldbyname('bdisp').Value;
column.HeaderAlignmentHorz:=taCenter;

//bsum为是否合计字段,当列设置中为合计选项时,创建总合计列及分组合计列
if qrycolumn.fieldbyname('bsum').AsString='True' then //注意判断应用true 或false
begin
//以下创建总合计列
footsumitem:=cxgrd.datacontroller.summary.FooterSummaryItems.Add as TcxGridDBTableSummaryItem ;
footsumitem.Column:=column;
footsumitem.Kind:=sksum;
footsumitem.Position:=spfooter;
end;
qrycolumn.Next;
end;
qrycolumn.Free;
qrycolumnsum.Free;
end;
-------------------
以上已实现了动态创建列,及汇总列,但小弟仍未实现分组小计的动态创建(分组小计字段同合计项便可)!

相关主题