表格合计指的是对表格中某一列所有的数据执行某个数学操作(如求和,求平均等),并将操作结果以一行数据的形式展现出来,而且这一行的样式可由用户自由指定(比如为了醒目,可以加粗,加色)。
在定义表格时,用summaryRowPosition属性指定结果行所处的位置,其取值为"inner"或"out",设置为inner时,合计行位置紧跟数据行,随垂直滚动条移动;设置为out时,合行行位置在DataGrid的最下面,不随垂直滚动条移动.
在定义表格的每一列时,用summaryType属性指定该列合计的类型,可以设置为sum(求和),count(行数目),max(最大值),min(最小值),average(平均值)共5种运算类型。
在前面说过,合计行的样式可有用户自由指定,这是由于,在定义表格的每一列时,可用summaryRenderer属性指定这一个合计单元格的渲染样式,用户要给它传一个客户端js函数。该js函数包含3个参数.
* v:单元格的数据值
* param:一个持有以下两个属性的对象,用户可以在方法中对其作出改变:
o style:单元格所在的元素的样式,它将被渲染给td。例如:param.style='background-color:green;';
o css:单元格所在的元素的css样式类名
o attr:在单元格内部的容器元素的HTML属性值。例如,设置提示信息:params.attr = 'ext:qtip="Total no. of companies"';
* data:合计行的整行数据下面举一个例子。下面的代码定义了一个合计表格,合计行在表格外部,不随滚动条一起移动。表格有3列,第一列合计类型为“求和”,第二列为“求最大值”,第三列为“求均值”。合计行的渲染样式由totalCount函数指定。
<w:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
.red{
color:red;
}
</style>
<script>
//<![CDATA[
function totalCount(v, params, data) {
params.attr = 'ext:qtip="total count"'; // summary column tooltip example
params.css = 'red';
return v? ' 合计:' + v : '';
}
//]]>
</script>
</w:head>
<w:page title="系统模块管理">
<w:form>
<w:dataGrid id="grid" paged="true" showRowNumber="true" rows="16" toolBarPosition="top" height="220" summaryRowPosition="out">
<w:outputColumn id="a" header="id" summaryType="sum" summaryRenderer="totalCount"/>
<w:outputColumn id="b" header="num" summaryType="max"/>
<w:outputColumn id="c" header="test" summaryType="average"/>
</w:dataGrid>
</w:form>
</w:page>下面是LiteBean的部分代码。其中 Num类是一个辅助类(标准的JavaBean)
......
@Bind(id = "grid")
private UIDataGrid grid;
private List<Num> nums = new ArrayList<Num>();
public GridSummaryBean() {
nums.add(new Num(11, 2.1f, 3.2));
nums.add(new Num(3, 1.8f, 4.6));
......
nums.add(new Num(7, 8.7f, 4.8));
nums.add(new Num(4, 3.2f, 8.68));
nums.add(new Num(8, 9.8f, 9.10));
}
@DataModel(id = "grid")
public List<Num> getNums() {
return nums;
}
......下面是运行结果的截图
