找回密码
 立即注册

QQ登录

只需一步,快速开始

tuifeishimei

初级会员

8

主题

20

帖子

200

积分

初级会员

积分
200

微信认证勋章

tuifeishimei
初级会员   /  发表于:2019-1-10 19:23  /   查看:3518  /  回复:7
本帖最后由 tuifeishimei 于 2019-1-10 19:28 编辑

最近在用Spread For ASP.net(10.0.4000.2013)的时候,用到了InputMan制品里面的GcDateRangeValidator的控件(10.0.4000.2012),
但是检查日期的范围的时候,发现0001/01/01到0099/12/31这段期间不能被正确的(小于设定的最小值)检查出来。

现象如下,烦请各位高工帮忙看一下有什么问题。

现象1(最小值检查对一部分输入的日期:00010101-00991231没有生效)
image.png504848937.png

现象2(服务器端postback事件里面的检查,检查的范围也是不准)※这个是次要问题,不解决也行。
image.png336293944.png


日本官网的例子里面也是这个问题(现象1)。
image.png444726256.png



代码(主要部分):
  1.     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

  2.         FpSpread1.SaveChanges()

  3.     End Sub


  4.     Private Sub PreRenderHandler(sender As Object, e As EventArgs) Handles Me.PreRender
  5.         Dim sheet As SheetView = FpSpread1.ActiveSheetView
  6.         sheet.RowCount = 10
  7.         sheet.ColumnCount = 1

  8.         sheet.Columns(0).Width = 200
  9.         '表示形式:yyyy年MM月dd日、編集形式:yyyyMMdd

  10.         sheet.Columns(0).CellType = CreateCellTypeWithImeValidatorForDateTime2(Me, 0, 8, "9", ImeMode.Disabled, "yyyy年MM月dd日", "yyyyMMdd")


  11.     End Sub

  12.     ''' <summary>
  13.     ''' 日付CellType作成(年月日、年月、月日)
  14.     ''' </summary>
  15.     ''' <param name="columnIndex">SpreadSheet的列的索引</param>
  16.     ''' <param name="maxLength">最大入力长度</param>
  17.     ''' <param name="characterSet">入力的文字种别限制</param>
  18.     ''' <param name="imeMode">IME设定</param>
  19.     ''' <param name="dateDisplayFotmat">Spread表示格式</param>
  20.     ''' <param name="dateEditFotmat">Spread編集格式</param>
  21.     ''' <returns></returns>
  22.     Private Function CreateCellTypeWithImeValidatorForDateTime2(mPage As Control, columnIndex As Integer, maxLength As Integer, characterSet As String, imeMode As ImeMode, dateDisplayFotmat As String, dateEditFotmat As String, Optional showCalc As Boolean = True) As FarPoint.Web.Spread.DateTimeCellType


  23.         ' 验证Action設定
  24.         Dim dateTimeValidatorActionSp As New GrapeCity.Web.Input.IMExtenders.GcValidatorAction With {
  25.                 .ID = "dateTimeValidatorActionSp"
  26.                 }

  27.         ' 日期以外入力不可的动作
  28.         Dim dateTimeValueProcessSp As New GrapeCity.Web.Input.IMExtenders.ValueProcess With {
  29.             .ValueProcessOption = GrapeCity.Web.Input.IMExtenders.ValueProcessOption.Restore
  30.         }
  31.         dateTimeValidatorActionSp.DefaultActions.Add(dateTimeValueProcessSp)

  32.         Dim dateRangeValidator As New GrapeCity.Web.Input.IMValidators.GcDateRangeValidator With {
  33.                 .MaximumDate = CDate("9999-12-31"),
  34.                 .MinimumDate = CDate("1900-01-01"),
  35.                 .ValidatorActionID = dateTimeValidatorActionSp.ID,
  36.                 .ErrorMessage = "日期的范围不正确,请输入19000101-99991231范围内的值"
  37.                 }

  38.         ' 验证Action設定追加
  39.         If mPage IsNot Nothing Then
  40.             If IsNothing(Me.FindControl("dateTimeValidatorActionSp")) Then
  41.                 Me.Controls.Add(dateTimeValidatorActionSp)
  42.             End If
  43.         End If


  44.         ' 日期型CellType设定及返回
  45.         Dim dtc As New FarPoint.Web.Spread.DateTimeCellType() With {
  46.                 .FormatString = dateDisplayFotmat,
  47.                 .ShowPopupButton = showCalc
  48.         }

  49.         dtc.Validators.Add(dateRangeValidator)
  50.         dtc.EditMode.FormatString = dateEditFotmat
  51.         dtc.ImeMode = imeMode

  52.         Return dtc

  53.     End Function
复制代码

附件是代码的工程。
image.png893229370.png

WebApplication1.zip

841.71 KB, 下载次数: 125

测试用工程

7 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-15 12:17:35
推荐
是的,如果需要验证就需要用正则或者其他验证去辅助处理,服务端也要做好验证。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-14 10:18:23
沙发
您好,问题已提交,正在处理中,有结果会给您反馈
回复 使用道具 举报
tuifeishimei
初级会员   /  发表于:2019-1-14 10:25:23
板凳
dexteryao 发表于 2019-1-14 10:18
您好,问题已提交,正在处理中,有结果会给您反馈

非常感谢!那我等您的结果。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-14 12:38:27
地板
您好,100年前的时间转化在不同浏览器下面的行为不一致,而且转化结果也比较特殊比如
Chrome 下:
new Date('0044/2/2')
Tue Feb 02 2044 00:00:00 GMT+0800 (中国标准时间)
new Date('0055/2/2')
Wed Feb 02 1955 00:00:00 GMT+0800 (中国标准时间)
这个是前端平台的一个限制。
回复 使用道具 举报
tuifeishimei
初级会员   /  发表于:2019-1-14 17:09:35
5#
哦,这样啊,那针对我提的例子,ie11的情况下,服务器端无论怎么处理,都没办法控制100年以前的输入是么。
回复 使用道具 举报
tuifeishimei
初级会员   /  发表于:2019-1-16 19:21:58
7#
dexteryao 发表于 2019-1-15 12:17
是的,如果需要验证就需要用正则或者其他验证去辅助处理,服务端也要做好验证。

sorry回复晚了。大致明白了,谢谢。我考虑一下微软自带的验证控件吧。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-1-18 08:17:52
8#
有问题再发帖
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部