关于Spread日期型CellType的Validate的检查结果
本帖最后由 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没有生效)
现象2(服务器端postback事件里面的检查,检查的范围也是不准)※这个是次要问题,不解决也行。
日本官网的例子里面也是这个问题(现象1)。
代码(主要部分):
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
FpSpread1.SaveChanges()
End Sub
Private Sub PreRenderHandler(sender As Object, e As EventArgs) Handles Me.PreRender
Dim sheet As SheetView = FpSpread1.ActiveSheetView
sheet.RowCount = 10
sheet.ColumnCount = 1
sheet.Columns(0).Width = 200
'表示形式:yyyy年MM月dd日、編集形式:yyyyMMdd
sheet.Columns(0).CellType = CreateCellTypeWithImeValidatorForDateTime2(Me, 0, 8, "9", ImeMode.Disabled, "yyyy年MM月dd日", "yyyyMMdd")
End Sub
''' <summary>
''' 日付CellType作成(年月日、年月、月日)
''' </summary>
''' <param name="columnIndex">SpreadSheet的列的索引</param>
''' <param name="maxLength">最大入力长度</param>
''' <param name="characterSet">入力的文字种别限制</param>
''' <param name="imeMode">IME设定</param>
''' <param name="dateDisplayFotmat">Spread表示格式</param>
''' <param name="dateEditFotmat">Spread編集格式</param>
''' <returns></returns>
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
' 验证Action設定
Dim dateTimeValidatorActionSp As New GrapeCity.Web.Input.IMExtenders.GcValidatorAction With {
.ID = "dateTimeValidatorActionSp"
}
' 日期以外入力不可的动作
Dim dateTimeValueProcessSp As New GrapeCity.Web.Input.IMExtenders.ValueProcess With {
.ValueProcessOption = GrapeCity.Web.Input.IMExtenders.ValueProcessOption.Restore
}
dateTimeValidatorActionSp.DefaultActions.Add(dateTimeValueProcessSp)
Dim dateRangeValidator As New GrapeCity.Web.Input.IMValidators.GcDateRangeValidator With {
.MaximumDate = CDate("9999-12-31"),
.MinimumDate = CDate("1900-01-01"),
.ValidatorActionID = dateTimeValidatorActionSp.ID,
.ErrorMessage = "日期的范围不正确,请输入19000101-99991231范围内的值"
}
' 验证Action設定追加
If mPage IsNot Nothing Then
If IsNothing(Me.FindControl("dateTimeValidatorActionSp")) Then
Me.Controls.Add(dateTimeValidatorActionSp)
End If
End If
' 日期型CellType设定及返回
Dim dtc As New FarPoint.Web.Spread.DateTimeCellType() With {
.FormatString = dateDisplayFotmat,
.ShowPopupButton = showCalc
}
dtc.Validators.Add(dateRangeValidator)
dtc.EditMode.FormatString = dateEditFotmat
dtc.ImeMode = imeMode
Return dtc
End Function
附件是代码的工程。
是的,如果需要验证就需要用正则或者其他验证去辅助处理,服务端也要做好验证。 您好,问题已提交,正在处理中,有结果会给您反馈 dexteryao 发表于 2019-1-14 10:18
您好,问题已提交,正在处理中,有结果会给您反馈
非常感谢!那我等您的结果。 您好,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 (中国标准时间)
这个是前端平台的一个限制。 哦,这样啊,那针对我提的例子,ie11的情况下,服务器端无论怎么处理,都没办法控制100年以前的输入是么。 dexteryao 发表于 2019-1-15 12:17
是的,如果需要验证就需要用正则或者其他验证去辅助处理,服务端也要做好验证。
sorry回复晚了。大致明白了,谢谢。我考虑一下微软自带的验证控件吧。 有问题再发帖
页:
[1]