我的一个表单中有一个UltraWinGrid
,供用户输入增值税税率。有 3 列:
- 率
- 日期从
- 日期至
我需要验证网格,以便在行的"日期开始"单元格中输入值,则用户只能输入"日期开始"值 + 1 天的最小值。
这将以哪种方法进行?我该怎么做?
我试过做
Private Sub ugVatRates_BeforeCellActivate(sender As Object, e As CancelableCellEventArgs) Handles ugVatRates.BeforeCellActivate
Dim dateFrom As Date
If IsDBNull(e.Cell.Row.Cells("DateFrom").Value) = False OrElse e.Cell.Row.Cells("DateFrom").Value <> Nothing Then
dateFrom = e.Cell.Row.Cells("DateFrom").Value
e.Cell.Row.Cells("DateTo").MinValue = dateFrom.AddDays(1)
End If
End Sub
但是,MinValue
在这里不是一个有效的属性 - 有什么建议吗?
是的,MinValue 和 MaxValue 仅由 UltraGridColumn 公开。但是,这在您的情况下不起作用。您可以做的是处理BeforeCellUpdate事件。在这种情况下,检查单元格用户是否尝试更新是 DateTo 单元格以及 DateFrom 是否有值。如果是这样,您可以通过将 e.Cancel 设置为 true 来禁止接受新值,如下所示:
Private Sub ugVatRates_BeforeCellActivate(sender As Object, e As Infragistics.Win.UltraWinGrid.BeforeCellUpdateEventArgs) Handles ugVatRates.BeforeCellUpdate
If e.Cell.Column.Header.Caption = "DateTo" Then
Dim dateFrom As Date
Dim dateTo As Date
If IsDBNull(e.Cell.Row.Cells("DateFrom").Value) = False OrElse e.Cell.Row.Cells("DateFrom").Value <> Nothing Then
dateFrom = e.Cell.Row.Cells("DateFrom").Value
dateTo = Date.Parse(e.Cell.Row.Cells("DateTo").Text)
If dateTo < dateFrom.AddDays(1) Then
' Suppress accepting of new value
e.Cancel = True
End If
End If
End If
End Sub
当用户输入无效日期时,您可以显示一个消息框来通知他,或使用UltraGrid的数据验证。