2017-02-01 27 views
0

Я пытаюсь добавить некоторые проверки в мой UltraGrid, согласно которому, если пользователь вводит значение в одну ячейку, но не установил значение а CheckBoxColumn к True, MessageBox получает отображается, а текст/значение в этой ячейке очищается, оставив пустую ячейку снова.Clear Text из UltraGridCell, когда данные не Valid

То, что я до сих пор:

Try 
    If e.Cell.Column.Key = "Commission_Rate" Then 
     If e.Cell.Row.Cells("Commission_Override").Value = False Then 
      MessageBox.Show("Before entering a custom rate, please set 'Commission Override' to True", "Override Commission", MessageBoxButtons.OK) 
      e.Cell.Value = "" 
     End If 
    End If 
Catch 
End Try 

MessageBox линия работает нормально, однако, еще один будет отображаться говоря

«Невозможно преобразовать из: System.String в системе. Десятичный "

Ячейка является десятичной ячейкой, поскольку она предназначена для ввода денежного значения, поэтому как установить значение« »для Decimal?

+0

Такие столбцы обычно печатаются на машинке; в этом случае для столбца db, который он отображает, требуется числовое (десятичное), поэтому требуется «0» или какое-то такое. Кроме того, DGV, во всяком случае, обеспечивает RowValidation' его неясно, где это – Plutonix

+0

@Plutonix Когда сетка загружена, она ничего не отображает, не существует способа удалить типизированный символ? – David

+0

_e.Cell.Value = Nothing_ – Steve

ответ

1

Значение, которое вы получаете из базы данных при отсутствии значения, это DBNull.Value. Так что если вам нужна клетка не показывать ничего вам нужно установить такое же значение, как это:

e.Cell.Value = DBNull.Value 

Это заставит сетку, чтобы показать пустую ячейку

[Редактировать] Используйте этот код в BeforeEnterEditMode событии подавить пользователя от редактирования ячейки, если соответствующая ячейка флажка не отмечена:

Private Sub UltraGrid1_BeforeEnterEditMode(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles UltraGrid1.BeforeEnterEditMode 
    Dim cell As UltraGridCell = Me.UltraGrid1.ActiveCell 
    If cell Is Nothing Then 
     Return 
    End If 
    Try 
     If cell.Column.Key = "Commission_Rate" Then 
      If cell.Row.Cells("Commission_Override").Value = False Then 
       MessageBox.Show("Before entering a custom rate, please set 'Commission Override' to True", "Override Commission", MessageBoxButtons.OK) 
       e.Cancel = True 
      End If 
     End If 
    Catch 
    End Try 
End Sub 
+0

Это почти работает ... Он возвращает «MessageBox», и после нажатия «ОК» введенное значение остается в ячейке, пока я не отредактирую другую ячейку в сетке. – David

+0

не уверен, что вы подразумеваете под «Это почти работает». Если вы установите значение ячейки в DBNull.Value, она ничего не покажет в ячейке, как вы сказали, что вам нужно. Однако я не уверен, в каком случае вы вызываете весь этот код. Если вы делитесь дополнительной информацией о своем контексте, мы можем попытаться дать вам решение :) – wnvko

+0

Привет, У меня есть этот код в событии «CellChange», где может быть проблема? Нужно ли находиться в 'BeforeRowUpdate' /' AfterRowUpdate'? – David