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

AX 2012运行时遍历表单网格列的实现方法问询

在AX 2012表单中运行时遍历网格显示列的实现方法

要获取AX 2012表单网格运行时实际显示的列(而非数据源表的所有字段),可以通过网格控件的API直接遍历当前可见列,代码逻辑如下:

核心实现代码(表单方法示例)

将以下代码放在表单的自定义方法中(比如按钮点击事件、表单初始化后事件),记得替换代码中的myGrid为你表单上的网格控件名称:

public void traverseGridVisibleColumns()
{
    Grid                grid = element.myGrid(); // 替换为你的网格控件名称
    FormGridColumn      gridColumn;
    FormDataSource      formDs;
    SysDictField        dictField;
    int                 columnIdx;
    int                 columnCount;

    if (!grid)
        return;

    // 获取当前网格实际显示的列总数
    columnCount = grid.columnCount();

    // 遍历每一列
    for (columnIdx = 0; columnIdx < columnCount; columnIdx++)
    {
        gridColumn = grid.columnControl(columnIdx) as FormGridColumn;
        if (!gridColumn)
            continue;

        // 获取列绑定的数据源和对应字段
        formDs = gridColumn.dataSourceObject();
        dictField = SysDictField::newTableField(formDs.table(), gridColumn.dataField());

        if (dictField)
        {
            info(strFmt("列序号: %1 | 字段名: %2 | 显示标签: %3",
                columnIdx + 1,
                dictField.name(),
                gridColumn.label())); // 直接取网格列的显示标签,适配用户自定义修改
        }
    }
}

关键逻辑说明

  • grid.columnCount():返回当前网格在UI上实际显示的列数,会自动排除用户隐藏或移除的列
  • grid.columnControl(columnIdx):获取指定索引的列控件,转换为FormGridColumn类型后可访问列的绑定信息
  • gridColumn.dataField():获取该列绑定的字段ID,结合数据源表名可拿到对应字典字段对象
  • gridColumn.label():直接获取该列在UI上显示的标签文本,比从字典字段取更准确(支持用户在网格设置中修改列标签)

与表字段遍历的区别

你原来的代码是遍历数据表的所有字段,而上面的逻辑是直接读取网格控件的运行状态,只返回当前用户能看到的列,完全适配UI上的列调整操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:45:42