默认[PXDBInt]数据字段为空值?

时间:2016-02-11 15:45:26

标签: acumatica

如何将数字字段允许并默认为空/未指定值?

当我将此字段的控件添加到屏幕时,它在新实体上始终默认为“0”...

[PXDBInt]
[PXDefault(TypeCode.DBNull, "", PersistingCheck=PXPersistingCheck.Nothing)]
[PXUIField(DisplayName="Nullable Int")]

3 个答案:

答案 0 :(得分:1)

此处的问题似乎是该字段是在表单区域还是网格表中。在Grid中,null值呈现为空单元格,如果保留为空,则保持为null。但是,在“表单”区域中,使用“0”呈现空值。如果值被更改,则尝试将其更改回empty / null会导致持久保存到数据库的零值。

我找到的解决方案是在创建控件而不是使用PXNumberEdit类型字段时,将其更改为PXTextEdit字段并将TextMode属性设置为“Number”会产生所需的效果。空值将呈现为空,并与实际零值区分开来。

答案 1 :(得分:0)

除非您使用PXDefault强制值,否则所有字段的默认值均为null。

如果删除[PXDefault]属性,它将自动默认为null。

确保您的值定义为int?而不是int。 “?”将其表示为“可空”

例如:

    #region CurrentConfigRevision
    public abstract class currentConfigRevision : PX.Data.IBqlField
    {
    }
    protected int? _CurrentConfigRevision;
    [PXDBInt]
    [PXUIField(DisplayName="Current Revision")]
    public virtual int? CurrentConfigRevision
    {
        get
        {
            return this._CurrentConfigRevision;
        }
        set
        {
            this._CurrentConfigRevision = value;
        }
    }
    #endregion

除非用户在界面中指定(或通过代码设置),否则它将始终具有空值

答案 2 :(得分:0)

在px:PXNumberEdit控件中有AllowNull属性。 在此实现中,您甚至不需要将PXDefault属性添加到您的字段中。

由于我的任务,我在c#代码中添加了MinValue = 1, MaxValue = 999999,在.aspx中添加了DisplayFormat="n0" MaxLength="6",没有它,它应该可以工作。

    <px:PXNumberEdit runat="server" ID="edUsrCapacity" DataField="UsrCapacity"
DisplayFormat="n0" MaxLength="6" AllowNull="True" />


    [PXDBInt(MinValue = 1, MaxValue = 999999)]
    [PXUIField(DisplayName = Messages.FsEquipment.Capacity)]
    public virtual int? UsrCapacity
    {
        get;
        set;
    }

    public abstract class usrCapacity : BqlInt.Field<usrCapacity>
    {
    }