Установка минимального значения ячейки даты в UltraWinGrid

У меня есть 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 здесь не является допустимым свойством. Любой совет?


person Harambe    schedule 22.03.2017    source источник
comment
Я предлагаю вам взглянуть на интерфейс IEditorDataFilter и создать свой собственный класс, реализующий этот интерфейс. Затем установите экземпляр класса в свойство Cell.Editor.DataFilter.   -  person Steve    schedule 22.03.2017
comment
@ Стив, что ты имеешь в виду? Я создал класс, но какой код мне понадобится в функции преобразования, чтобы установить минимальное и максимальное значения?   -  person Harambe    schedule 22.03.2017


Ответы (1)


Да, 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

Когда пользователь вводит неверную дату, вы можете отобразить окно сообщения, чтобы сообщить ему об этом, или использовать Проверка данных.

person wnvko    schedule 23.03.2017