我有 DataGridView 绑定到 DataTable ,其中1 + 16列定义为整数。
默认单元格样式为十六进制2位数(.Format="X2"
)。
进入单元格编辑时,我想向用户提供以十进制或十六进制格式写入值的可能性。
出于这个原因,在 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”,但我没有找到它。
答案 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