带有十进制/十六进制格式的DataGridView单元格编辑问题

时间:2010-06-16 15:32:11

标签: vb.net datagridview datagridviewtextboxcell

我有 DataGridView 绑定到 DataTable ,其中1 + 16列定义为整数

默认单元格样式为十六进制2位数(.Format="X2")。

进入单元格编辑时,我想向用户提供以十进制或十六进制格式写入值的可能性。

  1. 十六进制可以写成,例如,0x00,0X01,x02,XFF
  2. 十进制,如0,1,2,15
  3. 出于这个原因,在 EditingControlShowing 中,我将“0x”添加到TextBox值

    Private Sub BankGrid_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs)
    
        Dim grid As DataGridView = DirectCast(sender, DataGridView)
        If Not TypeOf e.Control Is TextBox Then Return
    
        Dim tb As TextBox = DirectCast(e.Control, TextBox)
        tb.Text = "0x" & tb.Text
    
        RemoveHandler tb.KeyPress, AddressOf TextBox_KeyPress
        AddHandler tb.KeyPress, AddressOf TextBox_KeyPress
    
    End Sub
    

    TextBox_KeyPress 子句中,我执行所有输入过滤以避免无效输入。

    我无法理解的是,在编辑完成时,我可以附加哪个事件来检测。我想要与 EditingControlShowing 相反的东西,以便我可以删除“0x”,但我没有找到它。

2 个答案:

答案 0 :(得分:1)

在TextBox和DataGRidView中尝试了所有可能的事件后,我终于找到了一个对我的案例有用的事件。

<强> CellParsing

我复制我的代码也许它可以帮助别人:)

   Private Sub BankGrid_CellParsing(ByVal sender As Object, ByVal e As DataGridViewCellParsingEventArgs)

        Dim grid As DataGridView = DirectCast(sender, DataGridView)
        Dim cell As CustomCell = DirectCast(grid(e.ColumnIndex, e.RowIndex), CustomCell)

        If e.Value Is Nothing OrElse String.IsNullOrEmpty(e.Value.ToString) Then
            e.Value = cell.Value
        Else

            Dim iValue As Integer
            If TryParseNumeric(e.Value.ToString, iValue) Then

                If iValue >= 0 AndAlso iValue <= &HFF Then
                    e.Value = iValue  'value inside the range, accept it'
                Else
                    e.Value = cell.Value 'value outside the range, reload old value'
                End If

            Else                    
                e.Value = cell.Value 'invalid input, reload old value'
            End If

        End If

        e.ParsingApplied = True

    End Sub

答案 1 :(得分:0)

我会使用gridView actionevent CellValueChanged。如果为时已晚,请使用CellValueChanging