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

