You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AX 2012网格实时记录数统计求助:过滤后计数结果未更新

AX 2012 网格当前行数统计正确实现

你遇到的问题是因为直接调用fds.query()获取的是数据源的基础查询模板,没有包含用户在界面上添加的临时过滤条件(比如快速筛选、高级筛选),所以SysQuery::countLoops始终返回基础查询的总行数,无法反映当前网格的实际显示行数。

以下是两种可靠的实现方式:

方法一:直接使用FormDataSource的recordCount属性

这是最简单高效的方式,直接返回当前网格加载并显示的行数:

FormRun caller;
FormDataSource fds;
int64 rows;

fds = caller.dataSource();
rows = fds.recordCount(); // 返回包含所有过滤条件的当前网格行数

方法二:基于含界面过滤的QueryRun统计

如果需要通过SysQuery类方法统计,需先获取包含用户实时过滤的QueryRun对象:

FormRun caller;
FormDataSource fds;
QueryRun queryRun;
int64 rows;

fds = caller.dataSource();
queryRun = fds.getQueryRun(); // 获取包含界面所有过滤的QueryRun
rows = SysQuery::countTotal(queryRun); // 正确统计过滤后的行数

额外说明

  • SysQuery::countTotal返回负数是因为统计结果超出了int32的取值范围,改用int64类型接收即可正常显示正确数值。
  • SysQuery::countLoops通过循环遍历记录统计行数,效率极低,大数据量场景下强烈不建议使用,优先选择前两种方法。

内容的提问来源于stack exchange,提问作者VGScode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:05:48