2010-11-19 34 views
1

Die Situation Arbeits:vb.net - Datagridview - Die Formatierung wird nicht

habe ich eine Datagridview mit einer Spalte (col1).

In der Datagrid-Definition (Entwurfsansicht) habe ich diese Zeile erstellt und die Formatierung auf C2 (oder C0 oder C - ich habe sie alle ausprobiert).

dann, ich programmatisch meine Datagrid Ansicht laden:

dbl_myValue as double 
dbl_myValue = 6.99 

datagridview1.item(0,0) = dbl_myValue 

Datagridview zeigt die Daten correcly: 6,99 $

Als ich "Spion" auf der datagridview.item (0,0) , Die Eigenschaft "Value" ist ein Double.

das Problem:

Es funktioniert nicht, wenn der Benutzer manuell einen Wert eingeben: Klicken Sie in der Zelle, geben Sie einen numerischen Wert (mal 100 sagen, ohne Komma Komplexität zu vermeiden) und dann verlassen die Zelle (so nicht mehr in bearbeiten Modus). Die Formatierung trifft einfach nicht zu.

Wenn ich auf dem datagridview.item (0,0), "spioniere", ist die Eigenschaft "value" ein STRING.

Also ich denke, das ist das Problem, aber was kann ich tun?

Ich habe in CellValidating zu gehen versucht, und es mit dem Code Füllung wie:

Private Sub DataGridView1_CellValidating(....) 

Dim c As Control = DataGridView_WorkOrderAddition.EditingControl 

c.text = formatNumeric(c.text) 

c.text = convert.toDouble(c.text) 

Aber es funktioniert immer noch nicht.

Antwort

3

Ja, wenn der DGV nicht gebunden ist, werden Zellen standardmäßig zum Speichern von Strings verwendet. Wenn Sie die CellType-Eigenschaft der Spalte festlegen, kann Decimal für die Verarbeitung von Geldwerten am besten geeignet sein. Sie müssen außerdem das DataError-Ereignis implementieren, damit Sie den Benutzer warnen können, dass die Zeichenfolge nicht konvertiert werden kann. Also:

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 
Verwandte Themen