7

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)

DataGridView列の「txtcDecimal」には(デザイナーからの)プロパティがあります

txtcDecimal.DefaultCellStyle.Format = "N2";

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

マスク「0.00##」は「n2」として機能し、小数点以下2桁しか取得しません。これは、小数点以下2桁に正しく丸められますが、必要なものが気に入らないだけです(例で示しています)。

多くのリソースを消費せずに簡単な方法でそれを行うにはどうすればよいですか?

ありがとうharlam357&Tom Garske

4

3 に答える 3

18

小数点以下2桁から4桁までのフォーマットには、カスタムフォーマット文字列を使用できます。

txtcDecimal.DefaultCellStyle.Format = "0.00##"

もう少し先に進むには...

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; }
   }
}
于 2012-06-27T15:34:20.700 に答える
3

小数点以下2桁から4桁までのフォーマットには、カスタムフォーマット文字列を使用できます。(Harlam357によって提供されるように)

txtcDecimal.DefaultCellStyle.Format = "0.00##"

次の簡単なコンソールアプリケーションで確認しました。

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

出力は次のとおりです。

13.10
13.1235

ハーラムの答えは明らかに正しいです。

更新:これは私がフォームでそれを実装した方法です:

    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##");
        }
    } 

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

出力:

アプリケーションからの出力例

于 2012-06-27T15:45:45.537 に答える
2

カスタムフォーマッタを作成します。

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;  
   }  
}  

出典: データバインディング中にdatagridviewでデータをカスタムフォーマットする方法

于 2012-06-27T15:25:47.970 に答える