C# 如何使用PXTimeSpan中的时间格式设置inputmask
我有一个C# 如何使用PXTimeSpan中的时间格式设置inputmask,c#,erp,acumatica,C#,Erp,Acumatica,我有一个StartTime字段,我想用时间格式hh:mm:ss填充该字段,但当我将其应用于PXFormView时,它只显示小时和分钟。如何使其以seconds格式显示timespan?我正在使用以下属性覆盖DAC对象: protected int? _CapacityStart; [PXDBInt()] [PXDefault(0)] [PXUIField(DisplayName = "Start")] 代码来自下面的aspx <px:PXTimeSpan TimeMode="True"
StartTime
字段,我想用时间格式hh:mm:ss
填充该字段,但当我将其应用于PXFormView
时,它只显示小时和分钟。如何使其以seconds
格式显示timespan
?我正在使用以下属性覆盖DAC对象:
protected int? _CapacityStart;
[PXDBInt()]
[PXDefault(0)]
[PXUIField(DisplayName = "Start")]
代码来自下面的aspx
<px:PXTimeSpan TimeMode="True" ID="edCapacityStart" runat="server" DataField="CapacityStart" InputMask="hh:mm:ss" AllowNull="False" Size="S" ></px:PXTimeSpan>
正如Brendan所说,PXTimeSpan控件不允许您添加秒数。但您可以使用DateTime字段 下面是一个自定义属性的代码,该属性允许您在数据库中保存秒而不是分钟
使用系统;
使用PX数据;
名称空间PX.Data
{
#区域PXDBSelectimespanAttribute
///将int?类型的DAC字段映射到int
///数据库列。该字段值表示一个日期,以
///从1900年1月1日到现在已经过去了几秒钟。
///
///该属性将添加到DAC字段的值声明中。
///该字段将绑定到具有相同属性的数据库列
///名字。
///字段值将日期存储为秒数。在UI中,
///字符串通常由允许选择的控件表示
///从具有半小时间隔的时间值列表中。
///
///
///
///[PXDBselectimespan]
///[PXUIField(DisplayName=“运行时”)]
///公共虚拟int?运行时{get;set;]
///
///
公共类PXDBSecTimeSpanAttribute:PXDBTimeSpanAttribute
{
#区域国家
///
///“00:00:00”常数。
///
公共新常量字符串Zero=“00:00:00”;
///
///表示字符串“00:00:00”的BQL常量。
///
公共新密封类零:常量{public zero():基(零){}
#端区态
#区域导体
///
///使用默认参数初始化新实例。
///
公共PXDBSecTimeSpanAttribute():base()
{
_InputMask=“HH:mm:ss”;
_DisplayMask=“HH:mm:ss”;
}
#端区探测器
#区域实施
///
公共覆盖无效字段选择(PXCache发送方,PXFieldSelectingEventArgs e)
{
如果(_AttributeLevel==PXAttributeLevel.Item | | e.IsAltered)
{
e、 ReturnState=PXDateState.CreateInstance(例如,ReturnState、\u字段名、\u IsKey、null、\u InputMask、\u DisplayMask、\u MinValue、\u MaxValue);
}
if(e.ReturnValue!=null&(e.ReturnValue为int | | e.ReturnValue为int?)
{
TimeSpan=新的TimeSpan(0,0,0,(int)e.ReturnValue);
e、 ReturnValue=新的日期时间(1900,1,1)。添加(span);
}
}
///
公共覆盖无效字段更新(PXCache发送方,PXFieldUpdateingEventArgs e)
{
如果(e.NewValue==null | | e.NewValue为int)
{
}
else if(如NewValue为字符串)
{
日期时间值;
if(DateTime.TryParse((字符串)e.NewValue,sender.Graph.Culture,System.Globalization.DateTimeStyles.None,out val))
{
时间跨度=新的时间跨度(val.Hour、val.Minute、val.Second);
e、 NewValue=(int)span.TotalSeconds;
}
其他的
{
e、 NewValue=null;
}
}
else if(例如,NewValue是DateTime)
{
DateTime val=(DateTime)e.NewValue;
时间跨度=新的时间跨度(val.Hour、val.Minute、val.Second);
e、 NewValue=(int)span.TotalSeconds;
}
}
#端域实现
///返回通过添加指定数量的
///至1900年1月1日的秒数。
///要添加到默认日期的秒数。
公共静态日期时间FromSeconds(整数秒)
{
时间跨度=新的时间跨度(0,0,0,s);
返回新的日期时间(1900,1,1);
}
}
#端区PXDBSecTimeSpanAttribute
}
您可以将其添加到自定义项目的“代码”部分,然后在自定义字段中使用它,或者替换现有PXDBInt timespan字段的属性,在该字段中您还可以像这样节省秒数:
[PXDBSecTimeSpan]
[PXUIField(DisplayName=“Start”)]
公共虚拟int?CapacityStart{get;set;}
并使用启用TimeMode的PXDateTimeEdit控件编辑值:
<px:PXDateTimeEdit runat="server" ID="edUsrSpanStart" DataField="UsrSpanStart" TimeMode="True" />
我相信timespan的工作原理是将时间(以分钟为单位)保存到INT字段中。如果分钟是最低的存储值,我不知道如何获得秒数。您可能需要考虑使用日期-时间字段并仅显示时间部分。