文章來源:http://blog.csdn.net/ghs79/article/details/73614139編輯器
1、設置數據關係ide
一、要利用DBGridEh的datagroup功能,必須是關聯數據集MemTableEh1;不但是傳統的ADOQuery,Clientdataset等。.net
二、好在MemTableEh1有自動從其它數據集中取數據的功能,設置好對應關係,便可完成數據的轉換。我是從ADO取的數據,因此關係以下。設計
ADOQuery1.connection := ADOconnnect1;orm
//設置數據轉換關係blog
SQLDataDriverEh1.providerdataset := ADOQuery1;事件
MemTableEh1.datadriver := SQLDataDriverEh1;io
MemTableEh1.active := True;//到此能夠取到數據。變量
//下面設置數據顯示sed
DBGridEh1.datasource := datasource1;
DataSource1.dataset := MemTableEh1;
2、設置datagroup顯示
都是在設計期,在 Object Inspector 裏面,針對 DbGridEh1 的 DataGrouping 屬性,拉開後,設置裏面的屬性:
1. Active - True;
2. GroupPanelVisible - True; 注意若是隻設置這兩項,則運行時,它會顯示一個 Panel 在 DBGrid 的頂上,並有英文提示,拖一個字段到這裏,它會自動根據這個字段進行分組顯示。
3. GroupLevels 點開,在彈出來的窗口裏面,增長一條,相似增長一個字段同樣的操做。
3.1. 在增長的這一條的屬性裏面,選擇 ColumnName,下拉開,若是 DBGridEh1 已經在設計期加了靜態字段,這裏就會看到幾個字段,挑選須要用來做爲分組依據的字段。DBGridEh1 將會用這個字段來進行分組。
4. 分組統計:Footers 點開,彈出一個窗口,相似字段編輯器。增長一條。
4.1. 選中增長的一條,屬性裏面選擇 ColumnItems,會彈出窗口,窗口裏面是前述的三個字段(必須是設計期已經爲 DBGridEh1 增長了靜態字段)。
4.2. 選擇 須要合計的 字段,屬性裏面的 ValueType 下拉選擇 gfvSumEh。就會在分組的 Footer 裏面顯示這一組的合計數字(小計)。
5. DefaultStateExpanded - True 表格會加載後自動展開。不然加載後,是收縮的,只顯示組,不顯示組裏面的記錄。
3、至此已經能夠顯示分組數據,可是對於須要計算比值的(如毛利率、佔比等)卻無能爲力,經過事件DBGridEh1DataGroupFooterToDisplayText來修正。
一、先定義一個單元內的變量cb, ss: Currency;二、procedure TForm1.DBGridEh1DataGroupFooterToDisplayText( Grid: TCustomDBGridEh; Column: TColumnEh; GroupFooter: TGridDataGroupFooterEh; FooterColumnItem: TGridDataGroupFooterColumnItemEh; var AValue: Variant; var DisplayValue: String; var Processed: Boolean);begin //修正分組合計的值 if Column.FieldName = 'DML' then begin if ss <> 0 then begin DisplayValue := '毛利率:' + FormatFloat('##.##%', cb/ss * 100 ); Processed := True; //告訴系統,按我修正後的內容顯示 end; end else if Column.FieldName = 'DMONEY_IN' then cb := AValue //記錄變量值 else if Column.FieldName = 'DMONEY_SS' then ss := AValueend;