在AX 2012的运行时循环遍历网格列



我想在AX 2012表单中的网格控制中循环通过列(字段(。我有这样的逻辑来循环通过字段:

static void Job1(Args _args)
{
SysDictTable    dictTable = new SysDictTable(tableNum(PurchLine));
SysDictField    dictField;
TreeNode        treeNode;
FieldId         fieldId = dictTable.fieldNext(0);
while (fieldId)
{
dictField = dictTable.fieldObject(fieldId);
if (dictField.isSql() && !dictField.isSystem())
{
treeNode = dictField.treeNode();
info(strFmt("%1 | %2 | %3",
dictField.name(),                                               // Field name
treeNode.AOTgetProperty("Label"),                               // Label id
SysLabel::labelId2String(treeNode.AOTgetProperty("Label"))));   // Label string
}
fieldId = dictTable.fieldNext(fieldId);
}
}

这个循环通过表,我需要类似的逻辑来循环通过网格字段,但在RUNTIME中。例如,如果网格数据源有5列,并且在UI中删除了3列,我想循环遍历网格中剩下的这2列。所以我的问题是如何在运行时(而不是从数据源表(获得网格字段?

下面假设您的网格名为"GridOverview";。你这样称呼它:

::outputGridControls(element),其中element是您的表单。

public static void outputGridControls(FormRun _formRun)
{
int                     i;
FormGridControl         formGridControl;
FormControl             formControl;
formGridControl = _formRun.control(_formRun.controlId(identifierStr(GridOverview)));

if (formGridControl)
{
for (i=1; i<=formGridControl.controlCount(); i++)
{
formControl = formGridControl.controlNum(i);

if (formControl && formControl.visible())
{
info(strFmt("%1 (%2)", formControl.name(), formControl.labelText()));
}
}
}
}

上面所做的是对AOT表进行反思,但您需要查看FormRun,而不是实际的表,甚至是DataSource

最新更新