vb.net - datagridview - 格式化不起作用

时间:2010-11-19 19:03:32

标签: vb.net datagridview formatting

情况

我有一个带有一列(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)

但它仍然不起作用。

1 个答案:

答案 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