动态更改列名

Changing column name dynamically

我有一个 Header / 详细信息自定义屏幕,我在其中根据 header 中的下拉选择操作显示哪些网格列。这工作正常,但现在我也想更改一些列名称。使用记录的语法,我无法让它工作。我看不出我做错了什么 - 似乎没有任何区别。我已经附加到进程并在此事件中设置了一个断点,它已经到达终点 - 但系统似乎只是忽略它:

    protected virtual void ACMappingHeader_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        var mh = (ACMappingHeader)e.Row;
        if (mh == null) return;

        if (mh.MappingType == "Option1")
        {
            PXUIFieldAttribute.SetDisplayName<ACMappingDetail.target1CD>(this.MappingDetail.Cache, "Target");

谢谢...

您的显示名称例程看起来是正确的,但是要确保列名实际更新,您需要执行以下操作:

  • 在页面源中,您需要在网格上设置"RepaintColumns=true"值。这可以通过自定义管理器或直接从您的 ASPX 源代码完成。 - 这告诉网格在允许 headers 实际重新显示的回调后刷新列。

您可以参考下面的示例来动态更改网格列Header。

以下示例适用于屏幕 PM401000 – 项目交易查询

public class TransactionInquiryExt : PXGraphExtension<TransactionInquiry>
{
    public void TranFilter_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected baseInvoke)
    {
        if (baseInvoke != null)
            baseInvoke(cache, e);

        PX.Objects.PM.TransactionInquiry.TranFilter row = e.Row as PX.Objects.PM.TransactionInquiry.TranFilter;

        if (row == null) return;

        PXUIFieldAttribute.SetDisplayName<PMTran.description>(Base.Transactions.Cache,
            row.ProjectID.HasValue ? "Description for Project Tran" : "Description");
    }
}

确保将 RepaitColumns 属性 设置为 PXGrid 控件的 True。