FineUIPro/Mvc/Core的下個版本(v7.0.0),咱們會爲表格新增行分組功能,這也是不少用戶期待的功能。javascript
上一篇文章,咱們介紹了行分組的基本特性,今天就來說解一下表格行分組的合計。 html
開啓行分組合計,咱們須要以下兩個步驟:java
下面來看一個示例的頁面效果:數據庫
表格標籤訂義:函數
<f:Grid ID="Grid1" IsFluid="true" CssClass="blockpanel" Height="500px" ShowBorder="true" ShowHeader="true" Title="表格" runat="server" EnableCollapse="false" DataKeyNames="Id,Name" DataIDField="Id" DataTextField="Name" EnableRowGroup="true" DataRowGroupField="EntranceYear" RowGroupSummary="true"> <Columns> ...... <f:RenderField ColumnID="Major" DataField="Major" RendererFunction="renderMajor" ExpandUnusedSpace="true" MinWidth="150px" HeaderText="所學專業" RowGroupSummaryText="平均(分組):"> </f:RenderField> <f:RenderField Width="100px" DataField="ChineseScore" FieldType="Int" ColumnID="ChineseScore" HeaderText="語文成績" RowGroupSummaryType="Avg" /> <f:RenderField Width="100px" DataField="MathScore" FieldType="Int" ColumnID="MathScore" HeaderText="數學成績" RowGroupSummaryType="Avg" /> </Columns> </f:Grid>
RowGroupSummaryType對應幾個預約義的合計方式:ui
public enum SummaryType { /// <summary> /// 未定義 /// </summary> Undefined, /// <summary> /// 總和 /// </summary> Sum, /// <summary> /// 最小值 /// </summary> Min, /// <summary> /// 最大值 /// </summary> Max, /// <summary> /// 個數 /// </summary> Count, /// <summary> /// 平均 /// </summary> Avg }
固然,咱們也能夠經過 RowGroupSummaryRendererFunction 屬性,來自定義合計。this
要開啓多行分組合計,咱們須要設置表格的RowGroupSummaryRowCount。server
此時表格列就不能用 RowGroupSummaryText、RowGroupSummaryType兩個屬性了,由於它們無從告知每一行合計的結果,只能使用自定義合計的方式。htm
來看個示例效果(這個示例不只啓用多行分組合計,並且啓用了表格多行合計):blog
表格的標籤訂義:
<f:Grid ID="Grid1" IsFluid="true" CssClass="blockpanel" Height="500px" ShowBorder="true" ShowHeader="true" Title="表格" runat="server" EnableCollapse="false" DataKeyNames="Id,Name" EnableSummary="true" SummaryPosition="Bottom" SummaryRowCount="3" DataIDField="Id" DataTextField="Name" EnableRowGroup="true" DataRowGroupField="EntranceYear" RowGroupSummary="true" RowGroupSummaryRowCount="3"> <Columns> ...... <f:RenderField ColumnID="Major" DataField="Major" RendererFunction="renderMajor" ExpandUnusedSpace="true" MinWidth="150px" HeaderText="所學專業" SummaryRendererFunction="majorSummaryRenderer" RowGroupSummaryRendererFunction="majorRowGroupSummaryRenderer"> </f:RenderField> <f:RenderField Width="100px" DataField="ChineseScore" FieldType="Int" ColumnID="ChineseScore" HeaderText="語文成績" SummaryRendererFunction="chineseScoreSummaryRenderer" RowGroupSummaryRendererFunction="chineseScoreRowGroupSummaryRenderer" /> <f:RenderField Width="100px" DataField="MathScore" FieldType="Int" ColumnID="MathScore" HeaderText="數學成績" SummaryRendererFunction="mathScoreSummaryRenderer" RowGroupSummaryRendererFunction="mathScoreRowGroupSummaryRenderer" /> </Columns> </f:Grid>
標籤有點複雜,是由於同時開啓了行分組和表格的多行合計,能夠從命名上區分:
表格的多行合計:
行分組的多行合計:
同理,表格列的合計渲染函數命名也遵循相似的原則:
表格列的合計渲染函數:
行分組的合計渲染函數:
下面來看下合計渲染函數的客戶端實現:
表格列:
function majorSummaryRenderer(summaryRowIndex) { if (summaryRowIndex == 0) { return "最小值:"; } else if (summaryRowIndex == 1) { return "最大值:"; } else if (summaryRowIndex == 2) { return "平均值:"; } } function chineseScoreSummaryRenderer(summaryRowIndex) { var grid1 = this, result; if (summaryRowIndex == 0) { result = grid1.calcSummaryValue('ChineseScore', 'min'); } else if (summaryRowIndex == 1) { result = grid1.calcSummaryValue('ChineseScore', 'max'); } else if (summaryRowIndex == 2) { result = grid1.calcSummaryValue('ChineseScore', 'avg'); } return result; } function mathScoreSummaryRenderer(summaryRowIndex) { var grid1 = this, result; if (summaryRowIndex == 0) { result = grid1.calcSummaryValue('MathScore', 'min'); } else if (summaryRowIndex == 1) { result = grid1.calcSummaryValue('MathScore', 'max'); } else if (summaryRowIndex == 2) { result = grid1.calcSummaryValue('MathScore', 'avg'); } return result; }
行分組:
function majorRowGroupSummaryRenderer(summaryRowIndex) { if (summaryRowIndex == 0) { return "最小值:"; } else if (summaryRowIndex == 1) { return "最大值:"; } else if (summaryRowIndex == 2) { return "平均值:"; } } function chineseScoreRowGroupSummaryRenderer(summaryRowIndex, rowGroupData) { var grid1 = this, result; if (summaryRowIndex == 0) { result = grid1.calcSummaryValue('ChineseScore', 'min', rowGroupData); } else if (summaryRowIndex == 1) { result = grid1.calcSummaryValue('ChineseScore', 'max', rowGroupData); } else if (summaryRowIndex == 2) { result = grid1.calcSummaryValue('ChineseScore', 'avg', rowGroupData); } return result; } function mathScoreRowGroupSummaryRenderer(summaryRowIndex, rowGroupData) { var grid1 = this, result; if (summaryRowIndex == 0) { result = grid1.calcSummaryValue('MathScore', 'min', rowGroupData); } else if (summaryRowIndex == 1) { result = grid1.calcSummaryValue('MathScore', 'max', rowGroupData); } else if (summaryRowIndex == 2) { result = grid1.calcSummaryValue('MathScore', 'avg', rowGroupData); } return result; }
其中 calcSummaryValue 是由FineUI提供的一個計算合計的內置函數。固然,複雜的邏輯你也能夠本身弄,合計行的數據你都能拿到。
因爲行分組是在客戶端實現的,因此咱們能夠很容易的加上數據庫分頁和排序。
注意:啓用行分組時,不能使用內存分頁。
下面看下示例效果(因爲代碼只是簡單的組合二者,就不在此贅述了):
三石出品,必屬精品