2010-11-19 89 views
1

情況vb.net - datagridview的 - 格式化不工作

我有一列(COL1)一個DataGridView。

在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) ,「價值」屬性是一個雙。

問題:

如果用戶手動輸入一個值它不工作:單擊單元格,輸入一個數值(比如說100,不帶小數點以避免複雜)和然後離開該單元(因此不再在編輯模式)。 格式不適用。

當我在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) 

但它仍然無法正常工作。

回答

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