none
winform 开发 设置DataGridView中的列为货币格式 RRS feed

  • 问题

  • dgvVoucherQuery.Columns.Add("Column6", "借方");
    dgvVoucherQuery.Columns.Add("Column7", "贷方");

    新增了这样两列,如何让通过代码控制它们的显示格式为 ¥1,234,567.00 这样。

    DataGridView赋值的时候是遍历一个字符二维数组赋值的。

    其中显示结果有0.0000这样的,能否不显示空值?

    非常感谢。


    2018年1月4日 11:01

答案

  • 有两种方式,一种是Column6,Column7 列为字符串,这时需要将值格式化为字符串,或是设置Column6,Column7为decimal类型是,用下面的第二种方法设置格式。

    第一种方法:

    https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.100).aspx

    列举一些代码供您参考

    decimal value = 123.456m; Console.WriteLine(value.ToString("C2")); // Displays $123.46

    这里显示的是美元,你将线程的culture改成中文即可显示为人民币字符格式。

    decimal value = 123.456m;
    Console.WriteLine("Your account balance is {0:C2}.", value);
    // Displays "Your account balance is $123.46.
    double value = 12345.6789;
    Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));
    
    Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));
    
    Console.WriteLine(value.ToString("C3", 
                      CultureInfo.CreateSpecificCulture("da-DK")));
    // The example displays the following output on a system whose
    // current culture is English (United States):
    //       $12,345.68
    //       $12,345.679
    //       kr 12.345,679

    第二种方法 设置列格式化

    先设置列为decimal类型

    grid1.Columns["Debit"].ValueType = Type.GetType("System.Decimal")
    grid1.Columns["Credit"].ValueType = Type.GetType("System.Decimal")

    grid1.Columns[1].DefaultCellStyle.Format = "c";
    grid1.Columns[1].DefaultCellStyle.Format = "c2";
    grid1.Columns[1].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("en-GB");

    参考

    https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-format-data-in-the-windows-forms-datagridview-control




    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms



    2018年1月5日 0:48

全部回复

  • 有两种方式,一种是Column6,Column7 列为字符串,这时需要将值格式化为字符串,或是设置Column6,Column7为decimal类型是,用下面的第二种方法设置格式。

    第一种方法:

    https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.100).aspx

    列举一些代码供您参考

    decimal value = 123.456m; Console.WriteLine(value.ToString("C2")); // Displays $123.46

    这里显示的是美元,你将线程的culture改成中文即可显示为人民币字符格式。

    decimal value = 123.456m;
    Console.WriteLine("Your account balance is {0:C2}.", value);
    // Displays "Your account balance is $123.46.
    double value = 12345.6789;
    Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));
    
    Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));
    
    Console.WriteLine(value.ToString("C3", 
                      CultureInfo.CreateSpecificCulture("da-DK")));
    // The example displays the following output on a system whose
    // current culture is English (United States):
    //       $12,345.68
    //       $12,345.679
    //       kr 12.345,679

    第二种方法 设置列格式化

    先设置列为decimal类型

    grid1.Columns["Debit"].ValueType = Type.GetType("System.Decimal")
    grid1.Columns["Credit"].ValueType = Type.GetType("System.Decimal")

    grid1.Columns[1].DefaultCellStyle.Format = "c";
    grid1.Columns[1].DefaultCellStyle.Format = "c2";
    grid1.Columns[1].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("en-GB");

    参考

    https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-format-data-in-the-windows-forms-datagridview-control




    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms



    2018年1月5日 0:48
  • 
     //遍历数组显示数据
                for (int m = 0; m <= myArrayTable.GetUpperBound(0); m++)
                {
                    dgvVoucherQuery.Rows.Add(1);
                    for (int n = 0; n <= myArrayTable.GetUpperBound(1); n++)
                    {                    
                        dgvVoucherQuery.Rows[m].Cells[n].Value = myArrayTable[m, n];                    
                    }
                    if (myArrayTable.GetValue(m+1, 2) == null)//去除数组末尾多于的空行
                    {
                        break;
                    }
                }

    您好,感谢您的耐心解答。

    我的DataGridView 是通过遍历一个字符串类型的二维数组取得的。我在定义列的时候加了如下代码,还是没实现效果。

    public void ResetColumn()
            {
                dgvVoucherQuery.Columns.Clear();
                dgvVoucherQuery.Columns.Add("Column1", "日期");
                dgvVoucherQuery.Columns.Add("Column2", "凭证字号");
                dgvVoucherQuery.Columns.Add("Column3", "摘要");
                dgvVoucherQuery.Columns.Add("Column4", "科目代码");
                dgvVoucherQuery.Columns.Add("Column5", "科目名称");
                dgvVoucherQuery.Columns.Add("Column6", "借方");
                dgvVoucherQuery.Columns.Add("Column7", "贷方");
                dgvVoucherQuery.Columns["Column6"].ValueType = Type.GetType("System.Decimal");
                dgvVoucherQuery.Columns["Column6"].DefaultCellStyle.Format = "C2";
               
                //dgvVoucherQuery.Columns[5].DefaultCellStyle.Format = "C2";
                //dgvVoucherQuery.Columns[6].DefaultCellStyle.Format = "C2";
                //dgvVoucherQuery.Columns[5].DefaultCellStyle.NullValue = "";
                //dgvVoucherQuery.Columns[6].DefaultCellStyle.NullValue = "no  entry";
            }

    最终的显示效果还是这样的

    借方                           贷方

    14343.0000               0.0000

    0.0000                      1234.0000

    2018年1月5日 13:30
  • 试着加下语言设定

    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh-cn");


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms


    2018年1月8日 0:57