C# 如何修复datagridview以正确显示双值?

C# 如何修复datagridview以正确显示双值?,c#,.net,datagridview,double,C#,.net,Datagridview,Double,所以我住在匈牙利,我正在用c#制作一个windows窗体应用程序,我在datagridview中使用了一个双值,对我来说,它显示得非常完美。(例3,4)。但我正在为另一个国家,西班牙制作这个节目。对我在西班牙的朋友来说,逗号不会出现在datagridview中。所以对他来说是34 有人知道我应该在代码中添加什么来在“每个国家”中显示逗号吗 3,4的预期产量为3,4,但实际产量为34。(在西班牙) if(File.Exists(“files/returned.txt”)) { 字符串[]allLi

所以我住在匈牙利,我正在用c#制作一个windows窗体应用程序,我在datagridview中使用了一个双值,对我来说,它显示得非常完美。(例3,4)。但我正在为另一个国家,西班牙制作这个节目。对我在西班牙的朋友来说,逗号不会出现在datagridview中。所以对他来说是34

有人知道我应该在代码中添加什么来在“每个国家”中显示逗号吗

3,4的预期产量为3,4,但实际产量为34。(在西班牙)

if(File.Exists(“files/returned.txt”))
{
字符串[]allLines=File.ReadAllLines(“files/returned.txt”);
int n=int.Parse(所有行[0]);
int-dgvCount=0;
dgv2.RowCount=0;
dgv2.RowCount=n;

for(int i=1;i所有使用
Parse
ToString
方法的简单类型都有重载,这些重载接受
IFormatProvider
参数。在这里,您可以使用
CultureInfo
实例(或
NumberFormatInfo
/
DateTimeFormatInfo
),它提供有关特定于区域性的信息,如小数点和千位分隔符

默认的
int.Parse
DateTime.ToString
等重载使用
线程.CurrentCulture
确定此信息,根据区域设置,不同工作站上的信息可能不同

因此有经验法则:

  • 将浮点数或日期时间值作为字符串存储在数据库中(或在您的案例中存储在文本文件中)时,请始终使用特定区域性(最好使用
    CultureInfo.InvariantCulture
    )因此,当在具有不同区域设置的不同计算机上解析您的“数据库”时,您将始终获得一致的结果。例如:
  • //当然,它还必须使用不变区域性存储
    int n=int.Parse(allLines[0],CultureInfo.InvariantCulture);
    
  • 要在UI中显示值,您可以使用当前的区域设置。但与其使用默认的
    ToString
    重载,不如指定区域性以明确目的。例如:
  • myDateTime.ToString(“d”,CultureInfo.CurrentCulture);//d表示短日期格式
    
    至于3,4对34:


    虽然匈牙利语和西班牙语(至少在西班牙)都使用逗号作为小数点,但区域设置必须有所不同(英语?)在计算机上,它将3,4解析为34,因为在英语设置中,逗号被解释为千位分隔符。

    请显示相关代码!已编辑,双精度值在一个文件中,因此我必须读取它们。但对我来说,它显示得非常完美,但在西班牙它忽略了逗号,这就是为什么我如此困惑,因为我曾在许多计算机上尝试过它d在匈牙利工作得很好…听起来像是本地化问题。文本文件是一样的吗?它们包含什么?逗号还是小数点?匈牙利和西班牙都应该使用小数点逗号,但可能其中一台机器的设置不同。我使用逗号,因为C允许逗号将变量加倍。我问了3个问题。这是wers none。Double是一种数字类型,不包含逗号或点。只有输出字符串才包含逗号或点。解析输入字符串取决于应用程序采用的区域性。
    if (File.Exists("files/returned.txt"))
            {
                string[] allLines = File.ReadAllLines("files/returned.txt");
                int n = int.Parse(allLines[0]);
                int dgvCount = 0;
                dgv2.RowCount = 0;
                dgv2.RowCount = n;
    
                for(int i = 1;i<n+1;i++)
                {
                    string[] splitt = allLines[i].Split('\t');
                    DateTime a = DateTime.Parse(dt_from.Value.ToShortDateString());
                    DateTime b = DateTime.Parse(dt_to.Value.ToShortDateString());
    
                    DateTime c = DateTime.Parse(splitt[2]);
    
                    if(tb_returned_sn.Text != "")
                    {
                        if (splitt[1].StartsWith(tb_returned_sn.Text) && DateTime.Compare(a, c) <= 0 && DateTime.Compare(b, c) >= 0)
                        {
                            for (int j = 0; j < 12; j++)
                            {
                                dgv2.Rows[dgvCount].Cells[j].Value = splitt[j];
                            }
                            dgvCount++;
                        }
                    }
                    else
                    {
                        if(DateTime.Compare(a, c) <= 0 && DateTime.Compare(b, c) >= 0)
                        {
                            for (int j = 0; j < 12; j++)
                            {
                                dgv2.Rows[dgvCount].Cells[j].Value = splitt[j];
                            }
                            dgvCount++;
                        }
                    }
                }
                dgv2.RowCount = dgvCount;
                if(dgvCount == 0)
                {
                    MessageBox.Show("NOT FOUND");
                    bt_excel.Enabled = false;
                }
                else
                {
                    bt_excel.Enabled = true;
                }
            }
            else
            {
                MessageBox.Show("The equipments' database does not exist!");
            }
            tb_returned_sn.Focus();