【问题标题】:Hiding a tab from the user interface dynamically动态隐藏用户界面中的选项卡
【发布时间】:2016-08-30 00:51:35
【问题描述】:

我有一个带有PXTab 控件的页面,并且想要动态显示或隐藏页面上的各个选项卡。如何在运行时控制选项卡的可见性?

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    您可以通过以下两种方式之一进行操作:

    1. 通过在 ASPX 页面中的 PXTabItem 上设置 VisibleExp 属性
    2. 作者 启用/禁用用作视图的 AllowSelect 属性 该选项卡上显示的网格的 DataMember

    方法 1 – VisibleExp 在这种方法中,您直接在屏幕的 ASPX 代码中编写选项卡应该可见的条件。

    <px:PXTabItem Text="Tax Agency Settings" BindingContext="tab" 
        VisibleExp="DataControls[&quot;chkTaxAgency&quot;].Value = 1">
    

    请注意,绑定上下文很重要,因为它指定了您要在 VisibleExp 中访问哪个元素的 DataControl。 DataControls 也是用户界面字段值的集合,因此您需要指定控件的 ID(不是数据访问类字段)。

    但是,这种方法在很多方面都极其有限:

    • 条件检查仅限于 UI 中可用的控件, 所以不可能以内部状态为条件的可见性 系统的。
    • 有时此方法会要求您包括 “假”数据控件到 ASPX 中,只会被签入 VisibleExp,但实际上不会被用户看到。
    • 似乎不支持包括 AND/OR 在内的复杂条件。
    • 丑陋的&amp;quot;实体而不是表达式中的普通引号——不是 特别易读。

    最重要的是,如果您需要禁用特定文档类型的选项卡,则无法将其硬编码为 VisibleExp。你会明确地写出类似的东西: VisibleExp="DataControls["edDocumentType"].Value != CHK"

    硬编码通常被认为是一种非常糟糕的开发实践。它对代码的可维护性构成了重大威胁:可能上面的代码将来会破坏某些东西。例如,如果您决定将文档代码从 CHK 重命名为 CHQ。

    除此之外,当您突然发现不仅需要隐藏选项卡以进行检查,还需要隐藏其他文档类型时,此解决方案也不容易推广到这种情况。这是由于缺少上述复杂的条件表达式。

    方法 2 – 允许选择 这种方法的想法是 - 如果您隐藏选项卡项中的所有控件,Acumatica 将自动隐藏没有可见控件的选项卡。

    举个例子:假设您需要根据在 SO303000(发票)中选择的文档类型隐藏名为 Applications 的选项卡:

    我们感兴趣的选项卡有一个网格控件,其数据成员设置为调整:

    <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>
    

    并不是说这个选项卡项只有一个控件 - PXGrid。 另请注意此处所需的属性 - RepaintOnDemand="false"。该属性指示控件是否在项变为可见后刷新选项卡项内容(并选择数据)。不幸的是,将其设置为 false 会导致某些性能损失。特别是,调整视图的 Select 将被更频繁地调用。

    目前,Tab 是“智能”的,因为它理解当其子控件 (PXGridLevel) 无法对其数据成员执行选择时;在这种情况下,选项卡会从 UI 中隐藏起来。这就是为什么您可以通过设置与调整对应的缓存的AllowSelect 属性来控制选项卡的可见性:

    Adjustments.Cache.AllowSelect = 
        doc.DocType != ARDocType.CashSale 
        && doc.DocType != ARDocType.CashReturn;
    

    上面的代码写在图的ARInvoice_RowSelected处理程序中,其中ARInvoice是主DAC和页面主记录的类型。因此,每次选择ARInvoice 时,选项卡项都会根据文档类型变为可见或不可见。

    这种方法也有自己的局限性:

    • 您应该永远记住,仅禁用是不够的 AllowSelect,您还应该在需要时启用它。所以你需要 每次调用事件时评估此属性。
    • 如果不设置 PXTabItem 的 RepaintOnDemand,此方法似乎不起作用 属性为 false(见上文)。

    来源:http://asiablog.acumatica.com/2016/05/hiding-tab-from-user-interface.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多