C# 如何更改DataGrid中的数字分隔符?
我有一个数字格式的查询。当使用区域设置更改十进制分隔符(.)-->(,)时,请在excel工作表中键入(1.5),它将正确更改为(1,5)。C# 如何更改DataGrid中的数字分隔符?,c#,excel,winforms,cultureinfo,currentuiculture,C#,Excel,Winforms,Cultureinfo,Currentuiculture,我有一个数字格式的查询。当使用区域设置更改十进制分隔符(.)-->(,)时,请在excel工作表中键入(1.5),它将正确更改为(1,5)。 我的问题是在DataGridView控件中,我在DataGrid中遵循了相同的过程,但它显示了(1.5)-->(15)。(,)运算符已删除。我需要知道,这是DataGrid的实际行为吗。我们能像excel一样执行吗?我试过下面的代码 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US")
我的问题是在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一样实现这一点?我看到了一些问题
CurrentCulture
的NumberFormat
对象上设置十进制和分组分隔符字符串,而不是CurrentUICulture
decimal
。我怀疑当前它是一个整数类型,例如int
CurrentCulture
的NumberFormat
对象上设置十进制和分组分隔符字符串,而不是CurrentUICulture
decimal
。我怀疑当前它是一个整数类型,例如int
要对列应用自定义数字格式,应执行以下设置:
- 要将列的数字格式设置为显示千位分隔符,并定义小数点后的位数(例如2位),应将
指定给“N2”
列的DefaultCellStyle.format
属性
- 要使用自定义千位分隔符和自定义小数点字符,您应该基于区域性创建一个
,例如CultureInfo
然后更改其“en-US”
和NumberFormat.NumberDecimalSeparator
并将区域性设置为NumberFormat.NumberGroupSeparator
列的
DefaultCellStyle.FormatProvider
- 此外,如果列是绑定列,请将其
设置为数字类型。如果是绑定列,请确保数据库中的基础列具有上述类型之一ValyeType
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";
要对列应用自定义数字格式,应执行以下设置:
- 要将列的数字格式设置为显示千位分隔符,并定义小数点后的位数(例如2位),应将
指定给“N2”
列的DefaultCellStyle.format
属性
- 要使用自定义千位分隔符和自定义小数点字符,您应该基于区域性创建一个
,例如CultureInfo
然后更改其“en-US”
和NumberFormat.NumberDecimalSeparator
并将区域性设置为NumberFormat.NumberGroupSeparator
列的
DefaultCellStyle.FormatProvider
- 此外,如果列是绑定列,请将其
设置为数字类型。如果是绑定列,请确保数据库中的基础列具有上述类型之一ValyeType
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";
我想您应该为
CurrentCulture
设置NumberFormat
的属性,而不是CurrentUICulture
。此外,您可能需要将true
作为第二个参数传递给CultureInfo
的构造函数,以便使用重写。实际上,忽略将true
作为第二个参数传递给CultureInfo
构造函数的部分。没有必要。我想您应该为CurrentCulture
设置NumberFormat
的属性,而不是CurrentUICulture
。此外,您可能需要将true
作为第二个参数传递给CultureInfo
的构造函数,以便使用重写。实际上,忽略将true
作为第二个参数传递给CultureInfo
构造函数的部分。“没必要。”普里希夫这篇文章似乎回答了你的问题。如果你对答案有任何疑问,请告诉我。由于您在之前的问题中没有投票或接受任何帖子,请看Hi Reza,我尝试了所有解决方案。但我无法解决我的问题。我已经检查了文化(it),但这个问题仍然存在。Hi@Prithiv解决方案已经过测试。要测试它,只需创建一个未绑定的datagridview,并将这些代码放在Load
事件处理程序的形式中。然后您将有一个带有列的网格,该列使用
作为千位分隔符,,
作为小数点。在您输入完一个单元格并转到下一个单元格后,您将看到结果。如果您对答案有任何疑问或觉得有帮助,请告诉我:)@Prithiv帖子似乎回答了您的问题。如果你对答案有任何疑问,请告诉我。由于您在之前的问题中没有投票或接受任何帖子,请看Hi Reza,我尝试了所有解决方案。但我无法解决我的问题