2012-06-27 10 views
7

Voglio formattare le posizioni decimali visualizzate e catturate in un DataGridView, ho un numero minimo di posizioni decimali e un numero massimo di posizioni decimali. Per esempio:Come formattare una colonna con numero decimale con max e min in DataGridView?

If caught, "120.0" display "120.00" 
If caught "120.01" display "120.01" 
If caught "120,123" display "120,123" 
If caught "120.1234" display "120.1234" 
If caught "120.12348" display "120.1235" (round) 

Nella colonna DataGridView "txtcDecimal" ha la proprietà (dal progettista)

txtcDecimal.DefaultCellStyle.Format = "N2"; 

txtcDecimal.DefaultCellStyle.Format = "0.00##"; // IS ANSWER. I do not work for an event that interfered 

la maschera "0.00 ##" lavoro come "N2" ottenere solo 2 decimali che fa l'arrotondamento corretto a due cifre decimali ma semplicemente non mi piace quello che mi serve (come mostro nell'esempio)

Come posso farlo in modo semplice senza consumare molte risorse?

Grazie harlam357 & Tom Garske

+0

Nel suo terzo esempio È stata specificata una virgola (,) apposta per indicare un numero intero o era un errore? – harlam357

+0

Si prega di vedere che ho aggiornato la mia risposta per mostrare come è stata implementata in Forms. Sono contento di vedere che hai capito! – Tom

risposta

14

Per formattare tra 2 e 4 decimali posti è possibile utilizzare una stringa di formato personalizzato.

txtcDecimal.DefaultCellStyle.Format = "0.00##" 

di andare un po 'più ...

public partial class Form1 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     var list = new List<Data>(); 
     list.Add(new Data { Prop1 = 1, Prop2 = 1.2 }); 
     list.Add(new Data { Prop1 = 2, Prop2 = 1.234567 }); 

     dataGridView1.Columns.Add("Prop1", "Prop1"); 
     dataGridView1.Columns["Prop1"].DataPropertyName = "Prop1"; 
     dataGridView1.Columns.Add("Prop2", "Prop2"); 
     dataGridView1.Columns["Prop2"].DataPropertyName = "Prop2"; 
     dataGridView1.Columns["Prop2"].DefaultCellStyle.Format = "0.00##"; 
     dataGridView1.DataSource = list; 
    } 

    class Data 
    { 
     public int Prop1 { get; set; } 
     public double Prop2 { get; set; } 
    } 
} 
+0

this Non funziona, aggiorna la mia domanda – ch2o

+0

grazie può vedere il mio errore =) – ch2o

2

Creare una formattazione personalizzata.

public class MyFormatProvider : IFormatProvider, ICustomFormatter 
{ 
    public object GetFormat(Type formatType) 
    { 
    if (formatType == typeof(ICustomFormatter)) 
     return this; 
    else 
     return null; 
    } 

    public string Format(string format, object arg, IFormatProvider formatProvider) 
    { 
    // Check whether this is an appropriate callback    
    if (!this.Equals(formatProvider)) 
     return null; 

    //if argument/ value is null we return empty string 
    if (arg == null) 
     return null; 

    string resultString = arg.ToString(); 

    //transform resultString any way you want (could do operations based on given format parameter) 

    //return the resultant string 
    return resultString; 
    } 
} 

FONTE:How to custom format data in datagridview during databinding

3

Per formattare tra 2 e 4 decimali posti è possibile utilizzare una stringa di formato personalizzato. (Come previsto dal Harlam357)

txtcDecimal.DefaultCellStyle.Format = "0.00##" 

ho verificato con la seguente applicazione di console semplice:

 double myDouble = 13.1; 
     double myDouble2 = 13.12345; 
     Console.WriteLine(myDouble.ToString("0.00##")); 
     Console.WriteLine(myDouble2.ToString("0.00##")); 
     Console.Read(); 

L'uscita era: risposta

13.10 
13.1235 

di Harlam è chiaramente corretta ....

AGGIORNAMENTO: Ecco come implem ENTED in forme:

public Form1() 
    { 
     InitializeComponent(); 

     DataTable dt = new DataTable(); 
     dt.Columns.Add("a"); 
     dt.Rows.Add(123.4); 
     dt.Rows.Add(123.45); 
     dt.Rows.Add(123.456); 
     dt.Rows.Add(123.4567); 
     dt.Rows.Add(123.45678); 
     this.dataGridView1.DataSource = dt; 
     this.dataGridView1.CellFormatting += new DataGridViewCellFormattingEventHandler(dataGridView1_CellFormatting); 
    } 

    void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     if (e.ColumnIndex == 0 && e.RowIndex != this.dataGridView1.NewRowIndex) 
     { 
      double d = double.Parse(e.Value.ToString()); 
      e.Value = d.ToString("0.00##"); 
     } 
    } 

FONTE:http://social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/95e7e7ef-2e71-412f-abe5-ffbee2c12c18/

USCITA:

Example Output from application

+0

nell'applicazione console funziona ma nelle colonne DataGridview non funziona. L'ho provato nell'evento _CellFormating – ch2o

+0

Cosa emette o mostra in DataGridview usando questa stringa? "non funziona" non è chiaro. – Tom

+0

non funziona correttamente, la maschera "0.00 ##" funziona come "n2" ottiene solo 2 decimali – ch2o

Problemi correlati