SMART datagrid v.1 > Examples

Back  Forward

Calculated Columns  Example

网格的各个DataColumn连接在DataSet的一个字段上并显示或修改相关值, 而如果使用计算列,就无需直接连接在数据组字段,也可以构成网格列。 

包含在计算列中的数据单元格上显示的值, 每次都是通过指定在valueExpressionvalueCallback的设置进行计算的, 而如果将cached属性指定为true,就可以通过保管所得出的值而提高显示性能。 下列网格中,"合计2"列的cached已被设置为true。 

Grid - 1
rows
Code -1
    var columns = [
        ...
    {    
        "name": "Amount",
        "type": "calced", // 计算列
        "valueType": "number", // 数据类型
        "valueExpression": "unit_price * quantity",
    }, {
        "name": "Amount2",
        "type": "calced",
        "valueType": "number",
        "valueCallback": function (column, row) {
            return row.getValue('unit_price') * row.getValue('quantity');
        },
        "cached": true,
    }, ...
    ]

在列设置中,计算列将"type"设置为"calced", 并且通过valueExpressionvalueCallback,指定将要显示的值。 而且,需要通过指定valueType,设置所计算的值的数据类型。 如果不进行设置,它就会被设置为NUMBER。 

因为显示在计算列中的值是临时的,所以我们不能以这个列为标准进行分组,也几乎不能在页脚等显示合计。 如果非要显示合计,就可以使用ValueColumn.summaryCallback。 上面的网格中,已在"合计2"列设置了summaryCallback。 

Code -2
    "footer": {
        "summaryCallback": function (column) {
            var grid = column.grid();
            var fld = grid.dataSource().getFieldIndex('quantity');
            var fld2 = grid.dataSource().getFieldIndex('unit_price');
            var v = 0;
            for (var i = grid.rowCount(); i--;) {
            	v += grid.getValueAt(i, fld) * grid.getValueAt(i, fld2);
            }
            return v;
        },
        "styles": {
            "numberFormat": "#,##0.00",
        }
    }

查看源代码 JSP 

See Also
CalculatedColumn
CalculatedColumn.valueExpression
CalculatedColumn.valueCallback
ValueColumn.summaryCallback
GridColumn.grid
DataSet
Examples
行概述
衍生字段