cxgrid实现分组统计和添加Footer
1.分組統計
var
? I:integer;
? lCol: TcxGridDBColumn;
? csglink : TcxDataSummaryGroupItemLink;
? csg : TcxDataSummaryGroup;
? csgItem : TcxDataSummaryItem;
----------------------------------------------------------
begin
? //給Grid添加一個新列 SECTION
?? csg :=????? cxgrdbtblvw_for_doctortv.DataController.Summary.SummaryGroups.Add;
//創建匯總項
?// csg.Links.Clear;
? lCol:= cxgrdbtblvw_for_doctortv.Columns[0];
? lcol.Caption := '';//此處用來設置分組的名稱
//? lCol.Caption:= cxgrdbtblvw_for_doctortv.Columns[0].Caption;
? lCol.Visible := False; //設置不可見
? lCol.GroupIndex := 0; //設置按此列進行分組合計
? csglink := csg.Links.Add;
? csglink.ItemLink := cxgrdbtblvw_for_doctortv.Columns[0];
? cxgrdbtblvw_for_doctortv.DataController.Groups.FullExpand;
? cxgrdbtblvw_for_doctortv.OptionsView.Footer := true;
? cxgrdbtblvw_for_doctortv.OptionsView.GroupFooters:= gfVisibleWhenExpanded;
? for i := 0 to qry_for_tongji.FieldCount-1 do
? begin
??? if i > 2 then
??? begin
????? cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupkind := skSum;
????? cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupFormat := ':0';
????? csgitem := csg.SummaryItems.Add;
????? csgitem.ItemLink := cxgrdbtblvw_for_doctortv.Columns[i];?? //匯總字段1
????? csgitem.Kind := skSum;
????? csgItem.Format := '#,0.00;-#,0.00; #';
????? csgItem.Position := spFooter;
??? end;
??? if i = 1 then
??? begin
????? cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupkind := skSum;
????? cxgrdbtblvw_for_doctortv.Columns[i].Summary.groupFormat := ':0';
????? csgitem := csg.SummaryItems.Add;
????? csgitem.ItemLink := cxgrdbtblvw_for_doctortv.Columns[i];?? //匯總字段1
????? csgitem.Kind := skMin;
????? csgItem.Format := '合計:';
????? csgItem.Position := spFooter;
??? end;
? end;
? cxgrdbtblvw_for_doctortv.OptionsView.GroupSummaryLayout := gslAlignWithColumnsAndDistribute;
? dxbrbtn4.Enabled := True;
end;
2.添加footer的函數
procedure Tfrmtongji.CreateSumFooter(cxTableView: TcxGridDBTableView;
? const fieldList: string);
var
? i: Integer;
? f: TcxGridDBTableSummaryItem;
? l: TStringList;
begin
? l := TStringList.Create;
? l.DelimitedText := fieldList;
? l.Delimiter := ',';
? cxTableView.OptionsView.Footer := True;
? for i := 0 to cxTableView.ColumnCount - 1 do
? begin
??? if l.IndexOf(cxTableView.Columns[i].DataBinding.FieldName) <> -1 then
??? begin
????? f := (cxTableView.DataController.Summary.FooterSummaryItems.Add) as TcxGridDBTableSummaryItem;
????? f.FieldName := cxTableView.Columns[i].DataBinding.FieldName;
????? f.Column := cxTableView.Columns[i];
????? if (f.FieldName <> '醫師編碼') and (f.FieldName <> '醫師名稱') and (f.fieldName <> '科室名稱') then
????? begin
????????? f.Kind := skSum;
????????? f.Format := '#,0.00;-#,0.00; #';
????? end
????? else if (f.FieldName = '醫師編碼')? then
????? begin
??????? f.Kind := skcount;
??????? f.Format := '合計:';
????? end;
??? end;
? end;
? l.Free;
end;
3.手工添加footer
? A:先手動添加一個column,然后設置所添加footer的column,然后就可以在ongettext()中添加 AText := '合計';
??
??在Footer的第一列顯示[合計:]??
??加一個Summary項,Column設為Grid的第一列,Kind設為skNone??
??在該Summary項的OnGetText事件中,輸入:??
??procedure???TFormExpense.tvExpenseTcxGridDBDataControllerTcxDataSummaryFooterSummaryItems2GetText(??
??????Sender:???TcxDataSummaryItem;???const???AValue:???Variant;???AIsFooter:???Boolean;??
??????var???AText:???String);??
??begin??
??????AText???:=???'合計:';??
??end;??
???
??按條件匯總:??
??在TableView的DataController->Summary->FooterSummary->OnSummary事件中,輸入:??
??procedure???TFormExpense.tvExpenseDataControllerSummaryFooterSummaryItemsSummary(??
??????ASender:???TcxDataSummaryItems;???Arguments:???TcxSummaryEventArguments;??
??????var???OutArguments:???TcxSummaryEventOutArguments);??
??begin??
??????//得到字段名???TcxDBDataSummaryItem(Arguments.SummaryItem).FieldName;??
??????if???(ASender.DataController.Values[Arguments.RecordIndex,???tvExpenseLevel.Index]???>???1)???????//只統計Level列=1的值??
??????????and???(TcxDBDataSummaryItem(Arguments.SummaryItem).Kind???=???skSum)???then??
??????????OutArguments.Value???:=???0; //Level???>???1的統計值設為0?
?
本文轉自鵝倌51CTO博客,原文鏈接:?http://blog.51cto.com/kaixinbuliao/979236,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的cxgrid实现分组统计和添加Footer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DoD模型与OSI模型的关系及其协议对应
- 下一篇: Linux watch 监控系统状态