Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改DataGrid中的数字分隔符?_C#_Excel_Winforms_Cultureinfo_Currentuiculture - Fatal编程技术网

C# 如何更改DataGrid中的数字分隔符?

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")

我有一个数字格式的查询。当使用区域设置更改十进制分隔符(.)-->(,)时,请在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一样实现这一点?

我看到了一些问题

  • 您需要在
    CurrentCulture
    NumberFormat
    对象上设置十进制和分组分隔符字符串,而不是
    CurrentUICulture
  • 您需要确保要绑定该数据网格列的基础类型是浮点类型,例如
    decimal
    。我怀疑当前它是一个整数类型,例如
    int
  • 我看到一些问题

  • 您需要在
    CurrentCulture
    NumberFormat
    对象上设置十进制和分组分隔符字符串,而不是
    CurrentUICulture
  • 您需要确保要绑定该数据网格列的基础类型是浮点类型,例如
    decimal
    。我怀疑当前它是一个整数类型,例如
    int

  • 要对列应用自定义数字格式,应执行以下设置:

    • 要将列的数字格式设置为显示千位分隔符,并定义小数点后的位数(例如2位),应将
      “N2”
      指定给
      DefaultCellStyle.format
      列的
      属性

    • 要使用自定义千位分隔符和自定义小数点字符,您应该基于区域性创建一个
      CultureInfo
      ,例如
      “en-US”
      然后更改其
      NumberFormat.NumberDecimalSeparator
      NumberFormat.NumberGroupSeparator
      并将区域性设置为
      列的
      DefaultCellStyle.FormatProvider

    • 此外,如果列是绑定列,请将其
      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";
    

    要对列应用自定义数字格式,应执行以下设置:

    • 要将列的数字格式设置为显示千位分隔符,并定义小数点后的位数(例如2位),应将
      “N2”
      指定给
      DefaultCellStyle.format
      列的
      属性

    • 要使用自定义千位分隔符和自定义小数点字符,您应该基于区域性创建一个
      CultureInfo
      ,例如
      “en-US”
      然后更改其
      NumberFormat.NumberDecimalSeparator
      NumberFormat.NumberGroupSeparator
      并将区域性设置为
      列的
      DefaultCellStyle.FormatProvider

    • 此外,如果列是绑定列,请将其
      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";
    

    我想您应该为
    CurrentCulture
    设置
    NumberFormat
    的属性,而不是
    CurrentUICulture
    。此外,您可能需要将
    true
    作为第二个参数传递给
    CultureInfo
    的构造函数,以便使用重写。实际上,忽略将
    true
    作为第二个参数传递给
    CultureInfo
    构造函数的部分。没有必要。我想您应该为
    CurrentCulture
    设置
    NumberFormat
    的属性,而不是
    CurrentUICulture
    。此外,您可能需要将
    true
    作为第二个参数传递给
    CultureInfo
    的构造函数,以便使用重写。实际上,忽略将
    true
    作为第二个参数传递给
    CultureInfo
    构造函数的部分。“没必要。”普里希夫这篇文章似乎回答了你的问题。如果你对答案有任何疑问,请告诉我。由于您在之前的问题中没有投票或接受任何帖子,请看Hi Reza,我尝试了所有解决方案。但我无法解决我的问题。我已经检查了文化(it),但这个问题仍然存在。Hi@Prithiv解决方案已经过测试。要测试它,只需创建一个未绑定的datagridview,并将这些代码放在
    Load
    事件处理程序的形式中。然后您将有一个带有列的网格,该列使用
    作为千位分隔符,
    作为小数点。在您输入完一个单元格并转到下一个单元格后,您将看到结果。如果您对答案有任何疑问或觉得有帮助,请告诉我:)@Prithiv帖子似乎回答了您的问题。如果你对答案有任何疑问,请告诉我。由于您在之前的问题中没有投票或接受任何帖子,请看Hi Reza,我尝试了所有解决方案。但我无法解决我的问题