Gestione numeri decimali in una datagridview

giovedì 15 marzo 2012 - 11.26
Tag Elenco Tags  VB.NET  |  Visual Studio 2010

Andriazoo Profilo | Newbie

sto impazzendo...non riesco a formattare una cella all'interno della mia datagrid. mi spiego meglio : ho impostato da codice la mia grid,ho creato le colonne e ho la necessità di inserire dei numeri decimali all'interno di una colonna specifica (Datagrid1.Columns(10).DefaultCellStyle.Format = Format("N2")).
In esecuzione inserisco il valore 5.13 , ad esempio, e all'uscita della cella mi diventa 513,00
Come posso fare?

Gho5t Profilo | Junior Member

Ciao,
il tuo problema sembrerebbe che il .net considera solo la virgola (,) come separatore di decimali, mentre il punto come separatore di migliaia.
Se metti 5,13 dovresti ritrovarti 5,13 all'uscita della cella.
Se un uomo non è disposto a correre qualche rischio per le sue idee, o le sue idee non valgono nulla o non vale nulla lui

Vinsent Profilo | Senior Member

Penso dipenda dal tipo di variabile e da come gli assegni il valore, mi manca la voglia di smazzarmi il codice per un datagrid quindi ti faccio un banale esempio:

Private Sub Button1_Click() Handles Button1.Click 'scrive 5,00 Dim numero As Integer = 5.13 Console.WriteLine(String.Format(numero.ToString("N2"))) 'scrive 513,00 Dim numero2 As Integer = "5.13" Console.WriteLine(String.Format(numero2.ToString("N2"))) 'scrive 513,00 Dim numero3 As Decimal = "5.13" Console.WriteLine(String.Format(numero3.ToString("N2"))) 'codice corretto Dim numero4 As Decimal = 5.13 'scrive 5,13 Console.WriteLine(String.Format(numero4.ToString("N2"))) 'scrive 5.13 Console.WriteLine(String.Format(numero4.ToString("N2", CultureInfo.InvariantCulture))) End Sub

DomA Profilo | Expert

Ciao,
nel tuo caso la chiave sono le
>> CultureInfo
guarda qui:
http://msdn.microsoft.com/it-it/library/ew0seb73.aspx

"SE QUALCUNO HA FAME NON DARGLI DEL PESCE, MA INSEGNAGLI A PESCARE."



http://www.infomidia.it

"Il Web – queste le parole divenute celebri del ricercatore Berners-Lee - è più un'innovazione sociale che un'innovazione tecnica. L'ho progettato perché aiutasse le persone a collaborare, e non come un giocattolo tecnologico. Il fine ultimo del Web è migliorare la nostra esistenza reticolare".


http://www.infomidia.it

Domenico

Andriazoo Profilo | Newbie

ok...siamo già ad un buon punto...nel senso che, se scrivo 53,24 all'uscita della cella mi fa vedere 53,24.
ma io preferirei scrivere 53.24 e visualizzare 53,24.
gestendo all'uscita della cella il valore in questo modo

Dim numero As Decimal
If e.ColumnIndex = 10 Then
numero = TabCli.Item(10, e.RowIndex).Value

Console.WriteLine(String.Format(numero.ToString("N2")))
End If

mi valorizza comunque il numero senza virgola.

DomA Profilo | Expert

Ecco un esmpio in C#

Facciamo le cose con ordine: 1) Sostituisci il punto con la virgola: if (NumberSeparator == ",") valore = valore.Replace('.', ','); else valore = valore.Replace(',', '.'); 2) arrotondi il n° dei decimali double ValArrotondato =Math.Round(double.Parse(valore), 2); dove 2 indica il n° di decimali dopo la virgola

A presto
http://www.infomidia.it

Domenico

Andriazoo Profilo | Newbie

c'è un problema di base,cioè il seguente:
se inserisco nella cella il valore 34.23 all'uscita della cella mi ritrovo questa situazione

Dim numero As Decimal
numero = MyGrid.Item(10, e.RowIndex).Value 'numero = 3423.0

Non posso così applicare i Replace che mi hai indicato....

DomA Profilo | Expert

Prova così:

Dim numero1 As String numero = Replace(MyGrid.Item(10, e.RowIndex).Value.ToString(), ".", ",") Dim number As Decimal = Decimal.Parse(numero)

comunque ti posto un link che utilizza le cultureinfo:

http://msdn.microsoft.com/it-it/library/t7xswkc6.aspx


http://www.infomidia.it

Domenico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5