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
相关产品推荐
相关产品推荐

