我有3个网格,一个网格作为头部,另一个作为细节,当网格第一次选择记录时,我想刷新2个网格。我试过使用AutoCallBack,但仍然只能刷新 1 个网格,如何自动调用它?
有几种方法可以做到这一点,但一个很好的例子是查看组织 -> 组织结构下的“分配和批准地图”。
在此屏幕中,当您单击“规则”网格时,“条件”网格会自动刷新。
这主要由两个项目控制
1) 顶部/主网格中的 AutoCallback 命令 2) 下部/细节网格中的参数。
例如,在引用的屏幕中有两个网格“topGrid”和“bottomGrid”
topGrid 有以下内容
<AutoCallBack Target="tree" Command="Refresh" ActiveBehavior="True">
<Behavior RepaintControlsIDs="formRuleType,bottomGrid" ></Behavior>
</AutoCallBack>
Run Code Online (Sandbox Code Playgroud)
当topgrid行被选择/更改时,这将刷新bottomGrid。topGrid 定义中的“KeepPosition”和“SyncPosition”标志将在选择行时强制发布(保持“当前”作为当前选择的行。
现在在底部网格中,您有以下内容:
<Parameters>
<px:PXControlParam ControlID="topGrid" Name="routeID" PropertyName="DataValues["AssignmentRouteID"]" Type="Int32" ></px:PXControlParam>
</Parameters>
Run Code Online (Sandbox Code Playgroud)
也就是说“bottomGrid”有一个名为“routeID”的参数,它从topgrid的“AssignmentRouteID”中提取它的值。
如果您查看 bottomGrid 的 BQL(主要数据成员是“规则”,您将看到以下定义:
protected virtual IEnumerable rules([PXDBInt] int? routeID)
{
Run Code Online (Sandbox Code Playgroud)
定义使用已定义的参数,将其传入此处以供选择语句使用以返回正确的记录
使用这种方法将允许您在头部网格选择一行时刷新细节网格。同时,细节网格使用 headgrid 中的一个值作为它的 select 语句的参数。