动态隐藏网格列

时间:2018-10-04 18:00:41

标签: acumatica

我正在尝试动态隐藏网格选项卡中的列,在用户进入列配置并决定显示列之前,它可以正常工作。

一旦用户这样做,我的代码将不再影响列的可见性。

作为POC,我尝试这样做:

   public PXAction<POOrder> HIDEFIELDS;
    [PXUIField(DisplayName = "hide fields")]
    [PXButton(CommitChanges = true)]
    public virtual void hIDEFIELDS()
    {
        PXUIFieldAttribute.SetVisible<POLineExt.usrFinalDestination>(Base.Transactions.Cache, null, false);
        PXUIFieldAttribute.SetVisible<POLineExt.usrDateExportation>(Base.Transactions.Cache, null, false);
        PXUIFieldAttribute.SetVisible<POLineExt.usrContainerNbr>(Base.Transactions.Cache, null, false);
    }

public PXAction<POOrder> Showfields;
[PXUIField(DisplayName = "showfields")]
[PXButton(CommitChanges = true)]
public virtual void showfields()
{
    PXUIFieldAttribute.SetVisible<POLineExt.usrFinalDestination>(Base.Transactions.Cache, null, true);
    PXUIFieldAttribute.SetVisible<POLineExt.usrDateExportation>(Base.Transactions.Cache, null, true);
    PXUIFieldAttribute.SetVisible<POLineExt.usrContainerNbr>(Base.Transactions.Cache, null, true);
}

http://recordit.co/5lYGmjOjHl

如何防止这种行为? PXUIFieldAttribute.SetVisible和PXUIFieldAttribute.SetVisibility有什么区别?

1 个答案:

答案 0 :(得分:0)

Visible 属性确定该列在网格中是否可见(窗体,树等),而 Visibility 属性确定该列在网格中是否可见列配置对话框。

您发现,用户可以使用用户定义的网格列配置覆盖 Visible = False 属性。

要防止用户覆盖 Visible 属性,您必须同时设置 Visible Visibility

PXCache cache = Base.Transactions.Cache;
PXUIFieldAttribute.SetVisibility<POLineExt.usrFinalDestination>(cache, null, PXUIVisibility.Invisible);
PXUIFieldAttribute.SetVisible<POLineExt.usrFinalDestination>(cache, null, false);

您的代码建议您进行动态更改,但我认为 Visibility 属性仅支持静态更改。静态是指该调用在页面加载时仅工作一次,并且将忽略后续调用。约定是将这些调用放在图扩展或新自定义图的构造函数的Initialize()方法重写中:

public override void Initialize()
{
    // Extend base graph to set visibility property here.
}