我想在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
。