如何将数字字段允许并默认为空/未指定值?
当我将此字段的控件添加到屏幕时,它在新实体上始终默认为“0”...
[PXDBInt]
[PXDefault(TypeCode.DBNull, "", PersistingCheck=PXPersistingCheck.Nothing)]
[PXUIField(DisplayName="Nullable Int")]
答案 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>
{
}