2010-11-19 4 views
1

상황을 작동하지 않습니다 :vb.net - DataGridView에 - 포맷을

나는 하나의 열 (COL1)와 DataGridView에 있습니다.

데이터 격자 정의 (디자인보기)에서이 행을 만들고 형식을 C2 (또는 C0 또는 C - 모두 시도했습니다.)로 설정했습니다.

후, 나는 프로그램 내 데이터 그리드 뷰를로드

dbl_myValue as double 
dbl_myValue = 6.99 

datagridview1.item(0,0) = dbl_myValue 

DataGridView에이 correcly 데이터를 보여줍니다 : 6.99 $

때 datagridview.item에 나는 "스파이"(0,0) , "값"속성은 Double입니다.

문제 : 사용자가 수동으로 값을 입력하면

그것은 작동하지 않습니다 : (복잡성을 피하기 위해 소수점없이,의 100을 가정 해 봅시다) 숫자 값을 입력 셀을 클릭하고 세포를으로 남겨주세요. 모드가 없습니다. 포매팅은 적용되지 않습니다.

datagridview.item (0,0)에서 "spy"할 때, "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 속성을 설정하면이를 해결할 수 있습니다. 소수는 현금 값을 처리하는 데 가장 적합합니다. 문자열을 변환 할 수 없다는 것을 사용자에게 경고 할 수 있도록 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 
관련 문제