找回密码
 立即注册

QQ登录

只需一步,快速开始

dadado

初级会员

14

主题

47

帖子

354

积分

初级会员

积分
354

活字格认证

dadado
初级会员   /  发表于:2012-6-26 14:22  /   查看:9494  /  回复:9
之前发过一个DateTimeCellType的输入format check处理的帖子,
最后谈论下来使用限制手动输入的方法来确保输入的内容肯定为日期格式

现在用下来发现有一个问题,在使用
mee.Mask = "99/99/9999"
做限制后,从下拉的日期菜单选中后会出现数据错位的问题,具体可以参考添加文件
推测可能和电脑的系统日期显示格式有关,在YYYY/MM/DD显示时间的电脑上有以上问题出现,
但是将显示时间格式改为DD/MM/YYYY,仍然发生同样问题

不好意思,我使用的是日文的Spread5.0
后台代码如下:
---------------------------------
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim _DataTimeType As FarPoint.Web.Spread.Extender.DateCalendarCellType = New FarPoint.Web.Spread.Extender.DateCalendarCellType
        _DataTimeType.Animated = True
        _DataTimeType.DateFormat = "dd/MM/yyyy"
        _DataTimeType.EnableOnClient = True
        _DataTimeType.ShowEditor = True
        Dim mee As New AjaxControlToolkit.MaskedEditExtender
        mee.Mask = "99/99/9999"
        mee.MaskType = AjaxControlToolkit.MaskedEditType.Date
        _DataTimeType.Extenders.Add(mee)
        _DataTimeType.ShowEditor = True
        Me.FpSpread1.ActiveSheetView.Columns(0).CellType = _DataTimeType
    End Sub
---------------------------------

能否帮忙解决,谢谢!
error.JPG

9 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-6-26 17:53:00
沙发
回复 1楼dadado的帖子

你好,我通过更改系统时间日期格式后,显示正常,下面是我更改的方式:
dateformat.png
回复 使用道具 举报
dadado
初级会员   /  发表于:2012-6-26 19:51:00
板凳
感谢回答,不过程序如果发布在很多台服务器的时候,
不大现实要求客户一台一台电脑重新设置时间,有没有
其他的办法?

现在的需求是,确保输入的数据为日期类型数据,或者可以Check现在
的数据是否是日期类型

谢谢
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-27 10:46:00
地板
回复 3楼dadado的帖子

你好,
使用 正则单元格类型可以校验数据格式。看一下方法是否满足楼主的需求:

  1. FarPoint.Web.Spread.RegExpCellType re = new FarPoint.Web.Spread.RegExpCellType();
  2.             re.ErrorMessage = "输入格式错误:dd/MM/yyyy 例如:12/12/2012";
  3.             re.ValidationExpression = @"\d{2}\\\d{2}\\\d{4}";
  4.             FpSpread1.ActiveSheetView.Cells[0, 0].CellType = re;
复制代码

效果图如下:
dateformat.png
回复 使用道具 举报
dadado
初级会员   /  发表于:2012-6-27 11:41:00
5#
iceman,感谢回答

但是试了一下,主要有两个问题:
1,之前的需求没有说清楚,因为现在需要验证画面中输入的数据是否为日期类型,如果不是就不进行后续处理,正则单元格类型在画面上检验出输入格式有误后,使用FpSpread1.ActiveSheetView.GetValue并无法获取当前画面单元格内的数据(内容为Nothing),也就无法根据数据来判断是否应该进行后续处理,是否有什么方法可以获取Spread的ValidationMessage,或者检验结果之类,通过这个也能够来判断
2,一旦格式输出错误之后,错误信息会一直留在画面上,就算再输入时没有问题,也会出现

感谢帮忙!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-27 16:28:00
6#
回复 5楼dadado的帖子

1.针对楼主的 Case ,如果输入错误就不做操作,输入正确就执行操作。可以使用以下方法:
后台代码:

  1. //之前写的正则表达式和提示格式符合,所以会出现问题 2,已修正
  2.         protected void FpSpread1_UpdateCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  3.         {
  4.             //在此处 根据 e.EditValues 校验
  5.         }
复制代码

前台代码:

  1.     <script language="javascript" type="text/javascript" id="FpSpread1_Script0">
  2.                 function FpSpread1_EditStopped(event){
  3.                     //Add code to handle your event here.
  4.             //编辑结束就会触发该事件,Post 到后台 FpSpread_UpdateCommand 事件中
  5.                     var spread = this.document.getElementById("<%=this.FpSpread1.ClientID%>");
  6.                     spread.Update();
  7.                 }
  8.         </script>
复制代码

Demo 如下:
5014.zip (1.17 MB, 下载次数: 1435)
回复 使用道具 举报
dadado
初级会员   /  发表于:2012-6-28 11:33:00
7#
iceman,感谢回答

根据提供的demo试了一下,但是不知为什么在Cell输入数据,光标移动到其他Cell时,
不会响应FpSpread1_UpdateCommand事件,是不是Spread的版本问题?
我使用的是Spread5.0J
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-28 11:39:00
8#
回复 7楼dadado的帖子

由于我没有日文版测试环境。所以没法测试是否是 Spread 版本问题,楼主可以把 Demo 发到日本技术论坛让他们调试看看。
使用我的 Demo 也无法调用吗?
楼主是否添加 FpSpread1 的 Update 事件?
回复 使用道具 举报
dadado
初级会员   /  发表于:2012-6-28 16:23:00
9#
手头上只有日文版的Spread,所以我将demo中的代码都copy到新建的工程中,
没有效果

等回家再使用中文版spread+demo试试吧,
谢谢iceman
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-6-28 16:53:00
10#
回复 9楼dadado的帖子

dadado 你好,Demo 中 Spread 版本为 Spread for .NET 6 SP3(英文版) &amp;&amp; VS2010.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部