默认 [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>
{
}
如何让数字字段允许并默认为空值/未指定值?
当我将此字段的控件添加到屏幕时,它在新实体上始终默认为“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>
{
}