带有 Valuegetter 的 Ag Grid 聚合函数

Ag Grid aggregation function with Valuegetter

在 AgGrid 中,我尝试在同一列上使用聚合函数和 valuegetter。似乎是因为 valuegetter,我的聚合函数不起作用,我在聚合时只得到 0 或空值。您能否检查我的代码是否有任何可能的解决方案? 谢谢

{ headerName: "Price", filter: "agNumberColumnFilter", valueGetter: priceValueGetter, allowedAggFuncs: ['avg', 'sum', 'min', 'max']};


function priceValueGetter(params) {
    var value = '';

    if (params.data) {
        var EPrice = params.data.a;
        var p1 = params.data.b;
        if (EPrice && p1) {
            value = (EPrice - p1).toFixed(2);
        }
    }
    return value;
}

您的 valueGetter 正在返回一个字符串。 因此,期望数字的内置聚合函数失败了。

改用这个 valueGetter:

function priceValueGetter(params): number {
    if (params.data && params.data.a && params.data.b) {
        return params.data.a - params.data.b
    }
    return null;
}

这不会按照您想要的方式格式化,但您可以通过添加 valueFormatter 来解决这个问题。

另一条建议 - 鉴于您有一个名为 'EPrice' 的变量,我假设您正在处理金钱。您不应该依赖 Java 脚本的原生 'number' 类型来赚钱,因为它本质上是 'float',并且会出现舍入错误。有很多关于如何在 Java 脚本中正确处理货币值的文章 - 我个人使用 Java BigDecimal class 的 Java 脚本端口,称为 'big.js',但还有其他几种解决方案。

编辑 - 在 number 上使用 if 时也要小心 - 如果数字为零,它的计算结果为 false。如果那是你想要的,那很好,但如果不是,请相应地调整你的逻辑。