2016-06-10 31 views
0

我创建了一个表的字段,除此之外,我创建了自定义EDT,名为:MyEDT(例如)。如何查看美国东部时间长度?

MyEDTINTEGER类型和我已经扩展了系统标准EDT YearBase。 所以,如果我插入字母字符(看起来像“abecjskjfh”),我得到一个错误。

但我需要一个规则,我只想插入值为4的数字字符,我只想要值看起来像:2000年,2006年,1982年等...。

我可以检查/通过代码控制这一点,方法validateWritevalidateField我insered验证码:

switch (p1) 
{ 
case fieldNum(MyTable, MyField) : 
      if (strLen((strFmt("%1",this.MyField))) != 4) 
      throw error ("Inser only value AAAA"); 
      break; 
} 

但是,这是可能的,或者存在creato或axtends的YEAR EDT只有4数字字符长度?或者,还有另一种方法来检查字段值的长度吗?

谢谢大家,

享受!

回答

3

如果您想使用整数EDT,我认为没有办法限制允许的数字的范围,除了AllowNegative属性。所以你必须像你的问题一样在代码中进行验证。但我会建议更改验证逻辑来​​验证数字范围,而不是将数字转换为字符串,然后验证字符数。这种方式,您也可以确保用户无法进入一年像0000

if (this.MyField< 1900 || this.MyField > 9999) 
{ 
    throw error("Please enter a year between 1900 and 9999"); 
} 

另一种可能是你设置DateYearDateMonthDateDay特性,使得仅在今年显示使用日期EDT。这也有助于输入数据(例如,2被替换为2002),并且如果用户输入例如“abc”,则会给你一个很好的错误对话框。

​​

+0

非常thansk @ FH-Inway,做工精良,很好的解决方案! – ulisses

1

您可以使用X ++ match功能。

match('<:d:d:d:d>','2004')会匹配所有4位数的字符串(0000-9999)。

match('<[12]:d:d:d>','2004')会匹配字符串1000-2999。

另一种方法是使用System.Text.RegularExpressions.Regex.IsMatch('1234', '^\d{4}$')

+0

感谢@Matej,很好的信息! – ulisses

相关问题