在ax中有许多窗体都有维度显示功能,例如生产订单、销售订单等等…
下面介绍一下,如果在自己开发的窗体中使用维度显示功能。
维度显示,是调用了class InventDimCtrl_Frm来完成的。
步骤:
- 声明InventDimCtrl_Frm 类 InventDimCtrl_Frm inventDimCtrl_Frm;
- 在窗体中添加InventDim表作数据源,并且Join上主数据源
- 设置数据源InventDim数据源LinkType成InnerJoin
- 在Form中的Grid添加一个Group,并将InventDim中字段拖入此Group中。并设置Group的DataSource为InventDim
- 在Form 中添加方法 updateDesign(InventDimFormDesignUpdate mode) 代码如下:
void updateDesign(InventDimFormDesignUpdate mode)
{
InventDimParm inventDimParm;
; - 在窗体Init中调用UpdateDesign方法。
- 在窗体中新建方法 inventDimSetupObject方法,代码如下:
Object inventDimSetupObject()
{
return inventDimCtrl_Frm;
} - 覆盖数据源Prodtable方法 Active()方法,在此处Super()之后执行:
element.updateDesign(InventDimFormDesignUpdate::Active); - 覆盖数据源的ValidateWrite(),在Super之前执行:
Prodtable.InventDimId = InventDim::FindOrCreate(inventDim).InventDimId; - 在数据源ProdTable下的字段ItemID 覆盖方法Modified()写入代码:
Super();
element.UpdateDesign(InventDimFormDesignUpdate::FieldChange);
InventDim.ClearNotSelectedDim(element.inventDimSetupObject().parmDimParmEnabled()); - 最后在Form 中添加剂menuButton设置MenuItem指向 InventDimParmFixed 数据源指向ProdTable;
switch (mode)
{
case InventDimFormDesignUpdate::Init :
if (!inventDimCtrl_Frm)
inventDimCtrl_Frm = new InventDimCtrl_Frm(element);
inventDimCtrl_Frm.parmSkipOnHandLookUp(true);
inventDimParm.initItemDimAllGrp();
inventDimCtrl_Frm.parmDimParmVisibleGrid(inventDimParm);
case InventDimFormDesignUpdate::Active,
InventDimFormDesignUpdate::FieldChange :
inventDimParm.initDimActive(element.inventTable().DimGroupId); inventDimCtrl_Frm.parmDimParmEnabled(inventDimParm);
inventDimCtrl_Frm.formSetControls(true);
break;
default : throw error(strfmt("@SYS54195",funcname()));
}
}