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

Default [PXDBInt] data field to Null value?

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

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

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

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

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

确保您的值定义为 int?而不是 int 。这 ”?”表示为 "nullable"

例如:

    #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

这将始终为空值,除非用户在界面中指定(或通过代码设置)

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

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

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