情况:
我有一个带有一列(col1)的数据网格视图。
在datagrid定义(设计视图)中,我创建了这一行,并将格式设置为C2(或C0,或C - 我全部尝试过)。
然后,我以编程方式加载我的数据网格视图:
dbl_myValue as double
dbl_myValue = 6.99
datagridview1.item(0,0) = dbl_myValue
datagridView正确显示数据:6.99 $
当我在datagridview.item(0,0)上“窥探”时,“Value”属性为Double。
问题:
如果用户手动输入值则不起作用:单击单元格,输入数值(假设为100,不带小数以避免复杂性)然后离开< / em>单元格(所以编辑模式中没有更多)。 格式化不适用。
当我“监视”datagridview.item(0,0)时,“value”属性为STRING。
所以我想这就是问题,但我该怎么办?
我尝试过使用CellValidating并使用以下代码填充它:
Private Sub DataGridView1_CellValidating(....)
Dim c As Control = DataGridView_WorkOrderAddition.EditingControl
c.text = formatNumeric(c.text)
c.text = convert.toDouble(c.text)
但它仍然不起作用。
答案 0 :(得分:3)
是的,当DGV未绑定时,单元格默认存储字符串。设置列的CellType属性可以解决这个问题,Decimal最适合处理货币值。您还需要实现DataError事件,以便警告用户该字符串无法转换。因此:
Public Class Form1
Public Sub New()
InitializeComponent()
DataGridView1.Columns(0).ValueType = GetType(Decimal)
End Sub
Private Sub DataGridView1_DataError(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
MessageBox.Show(e.Exception.Message)
End Sub
End Class