数据无效时清除 UltraGridCell 中的文本

Clear Text from UltraGridCell when Data is not Valid

我正在尝试向我的 UltraGrid 添加一些验证,如果用户在一个单元格中键入一个值,但没有将 CheckBoxColumn 的值设置为 True,将显示 MessageBox,并清除该单元格中的 text/value,再次留下一个空白单元格。

我目前拥有的是:

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 行工作正常,但是,然后显示另一行说

"Unable to convert from: System.String to System.Decimal"

该单元格是一个小数单元格,因为它是用来输入货币值的,所以如何将值设置为“” for Decimal?

未提供任何值时,您从数据库中获取的值为 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