如何在DataGridView中格式化带有max和min的数字十进制的列?

我想格式化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位小数,它正确舍入到两位小数但只是不喜欢我需要的东西(如我在示例中所示)

如何在不消耗大量资源的情况下以简单的方式完成这项工作?

谢谢harlam357和Tom Garske

要格式化2到4位小数,可以使用自定义格式字符串。

 txtcDecimal.DefaultCellStyle.Format = "0.00##" 

再往前走……

 public partial class Form1 { public Form1() { InitializeComponent(); var list = new List(); 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; } } } 

要格式化2到4位小数,可以使用自定义格式字符串。 (由Harlam357提供)

 txtcDecimal.DefaultCellStyle.Format = "0.00##" 

我使用以下简单的控制台应用程序validation了它:

  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/

OUTPUT:

示例应用程序的输出

创建自定义格式化程序。

 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中的数据格式