0

我有一个数字格式的查询。当使用区域设置更改小数分隔符(。)--->(,)时,在 Excel 表中键入(1.5),它将正确更改为(1,5)。
我的问题出在 DataGridView 控件中,我在 DataGrid 中遵循了相同的过程,但它显示了 (1.5) ---> (15)。(,) 运算符已删除。我需要知道,这是 DataGrid 的实际行为。我们可以像excel一样执行吗?我试过下面的代码。

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

CultureInfo culture = CultureInfo.CurrentUICulture;
culture.NumberFormat.NumberDecimalSeparator = ",";
culture.NumberFormat.NumberGroupSeparator = ".";

请参考excel和DataGrid的对比图 在此处输入图像描述

请任何人建议我如何像excel一样实现这一目标???

4

2 回答 2

2

要将自定义数字格式应用于列,您应该执行以下设置:

  • 要为列设置数字格式以显示千位分隔符并定义小数点后的位数(例如 2 位),您应该分配"N2"DefaultCellStyle.Format.Column

  • 要使用自定义千位分隔符和自定义小数点字符,您应该创建CultureInfo基于例如文化的 a "en-US",然后更改其NumberFormat.NumberDecimalSeparatorandNumberFormat.NumberGroupSeparator并将文化设置DefaultCellStyle.FormatProviderColumn.

  • 此外,如果该列是绑定列,请将其设置ValyeType为数字类型。如果它是绑定列,请确保数据库中的基础列具有上述类型之一。

例子

下面的代码将一个未绑定的列添加到网格中,并使用标题为“Column One”的列的格式,它显示1234567.89如下1.234.567,89。它"."用作千位分隔符和","小数点:

this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
{
    ValueType = typeof(double),
    Name = "Column1",
    HeaderText = "Column One"
});
var culture= CultureInfo.CreateSpecificCulture("en-US");
culture.NumberFormat.NumberDecimalSeparator=",";
culture.NumberFormat.NumberGroupSeparator=".";
this.dataGridView1.Columns["Column1"].DefaultCellStyle.FormatProvider = culture;
this.dataGridView1.Columns["Column1"].DefaultCellStyle.Format = "N2";
于 2016-06-24T20:01:16.533 回答
1

我看到一些问题。

  1. 您需要在NumberFormat对象上设置小数点和组分隔符字符串CurrentCulture,而不是CurrentUICulture.
  2. 您需要确保要绑定该数据网格列的基础类型是浮点类型,例如decimal. 我怀疑目前它是一个整数类型,例如int.
于 2016-06-24T19:32:01.500 回答