您可以通过以下两种方式之一来完成:
方法1 - VisibleExp 在此方法中,您可以直接编写选项卡在屏幕的ASPX代码中可见的条件.
<px:PXTabItem Text="Tax Agency Settings" BindingContext="tab"
VisibleExp="DataControls["chkTaxAgency"].Value = 1">
Run Code Online (Sandbox Code Playgroud)
请注意,绑定上下文很重要,因为它指定了您要在VisibleExp中访问哪个元素的DataControl.DataControls也是用户界面字段值的集合,因此您需要指定控件的ID(而不是数据访问类字段).
但是,这种方法在很多方面都非常有限:
"实体而不是表达式中的正常引号 - 不是特别可读.最重要的是,如果您需要禁用特定文档类型的选项卡,则无法将常量硬编码到VisibleExp中.您将明确地编写类似的内容:VisibleExp ="DataControls ["edDocumentType"].Value!= CHK"
硬编码通常被认为是一种非常差的开发实践.它对代码可维护性构成了重大威胁:可能上述代码将在未来破坏某些东西.例如,如果您决定将CHK的文档代码重命名为CHQ.
除此之外,当您突然发现需要隐藏选项卡不仅用于检查而且还用于其他文档类型时,此解决方案不容易推广.这是由于缺少上面提到的复杂条件表达式.
方法2 - AllowSelect 此方法的想法是 - 如果您隐藏选项卡项中的所有控件,Acumatica将自动隐藏没有可见控件的选项卡.
让我们举个例子:假设您需要隐藏一个名为Applications的选项卡,具体取决于在SO303000(发票)中选择的文档类型:
我们感兴趣的选项卡有一个网格控件,其数据成员设置为Adjustments:
<px:PXTabItem Text="Applications" RepaintOnDemand="false">
<Template>
<px:PXGrid ID="detgrid" DataSourceID="ds" SkinID="Details">
<Levels>
<px:PXGridLevel DataMember="Adjustments">
............
</px:PXGridLevel>
</Levels>
</px:PXGrid>
</Template>
</px:PXTabItem>
Run Code Online (Sandbox Code Playgroud)
而不是这个标签项只有一个控件 - PXGrid.还请注意这里所需的财产 - RepaintOnDemand="false".此属性指示项目变为可见后控件刷新选项卡项目内容(和选择数据).不幸的是,将其设置为false会导致某些性能损失.特别是,调整视图'选择将更频繁地调用.
目前,Tab是"聪明的",因为它理解当它的子控件(PXGridLevel)无法对其数据成员执行选择时; 在这种情况下,选项卡会隐藏自己的UI.这就是您可以通过设置AllowSelect与调整对应的缓存属性来控制选项卡的可见性的原因:
Adjustments.Cache.AllowSelect =
doc.DocType != ARDocType.CashSale
&& doc.DocType != ARDocType.CashReturn;
Run Code Online (Sandbox Code Playgroud)
上面的代码写在图的ARInvoice_RowSelected处理程序中,其中ARInvoice是主DAC和页面主记录的类型.因此,每次ARInvoice选中时,选项卡项都将变为可见或不可见,具体取决于文档类型.
这种方法也有其自身的局限性:
RepaintOnDemand
属性设置为false,此方法似乎不起作用(参见上文).资料来源:http://asiablog.acumatica.com/2016/05/hiding-tab-from-user-interface.html