【问题标题】:Clear Text from UltraGridCell when Data is not Valid数据无效时从 UltraGridCell 中清除文本
【发布时间】:2017-02-01 16:16:49
【问题描述】:

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

到目前为止我所拥有的是:

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 转换为 System.Decimal”

该单元格是十进制单元格,因为它是用于输入货币值的,那么Decimal的值如何设置为“”?

【问题讨论】:

  • 这样的列通常是打字的;在这种情况下,它映射到的 db 列需要一个数字(十进制),因此需要“0”或类似的值。无论如何,DGV 还提供了 RowValidation`,但不清楚它在哪里
  • @Plutonix 加载网格时什么都不显示,有没有办法删除输入的字符?
  • e.Cell.Value = Nothing
  • @Steve 没有返回第二个 MessageBox,但它也没有重置值。

标签: string vb.net decimal infragistics ultrawingrid


【解决方案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

【讨论】:

  • 这几乎可以工作......它返回MessageBox,在按下“确定”后,输入的值保留在单元格中,直到我在网格中编辑另一个单元格。
  • 不确定“这几乎可以工作”是什么意思。如果您将单元格的值设置为 DBNull.Value,它将不会像您所说的那样在单元格中显示任何内容。但是,我也不确定您在哪种情况下调用所有这些代码。如果您分享有关您的上下文的更多信息,我们可能会尝试为您提供解决方案:)
  • 您好,我在CellChange 事件中有此代码,这可能是问题所在?需要在BeforeRowUpdate/AfterRowUpdate吗?
  • 好的,从我的角度来看,最好的地方是在 BeforeEnterEditMode 事件中。在这种情况下,您将能够选中复选框,并且如果未选中相关复选框,则不允许单元格进入编辑模式。我在答案中添加了一个代码 sn-p 应该可以解决问题
  • 完美,谢谢!如果需要,我可以修改它,但这是我需要的基本功能
猜你喜欢
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多