C# DataGridView:如何允许逗号和点同时作为分隔符

C# DataGridView:如何允许逗号和点同时作为分隔符,c#,winforms,datagridview,binding,formatting,C#,Winforms,Datagridview,Binding,Formatting,我有一个绑定到属性的DataGridViewTextBoxColumn。我想允许用户输入数字,不管他用什么来分隔小数。此外,我不需要空格或逗号来分隔千个字符 很简单: 1.908=1.908 1908=1.908 如果无法指定格式字符串,我可以在绑定之前替换(“,”,“)?还是其他方式 多谢各位。(对不起,我的英文版)至少在数据绑定到对象数据源且属性为数字(即不是字符串)的情况下,DataGridView已根据当前用户的区域设置进行格式化 您可以通过在Windows中打开区域和语言,并在英语(美

我有一个绑定到属性的DataGridViewTextBoxColumn。我想允许用户输入数字,不管他用什么来分隔小数。此外,我不需要空格或逗号来分隔千个字符

很简单:

1.908=1.908

1908=1.908

如果无法指定格式字符串,我可以在绑定之前替换(“,”,“)?还是其他方式


多谢各位。(对不起,我的英文版)

至少在数据绑定到对象数据源且属性为数字(即不是
字符串)的情况下,
DataGridView
已根据当前用户的区域设置进行格式化

您可以通过在Windows中打开
区域和语言
,并在
英语(美国)
格式和
瑞典语(瑞典)
格式之间切换来测试这一点。在前一种情况下,输入
2.718
将正确解析,而在第二种情况下
2718
将正确解析。要加载新设置,您必须在VS中运行而不进行调试


(我不建议尝试将逗号和点作为同一用户的十进制分隔符进行解析,如果您正在考虑这样做的话。对于大多数用户来说,这不是预期的行为,如果用户碰巧也使用千位分隔符,这将导致错误。)

创建另一个字符串类型的属性,该属性将绑定到该列。
然后通过此函数设置/读取原始属性的值

public class YourBindableItem
{
    public decimal OriginalValue { get; set; }

    public decimal ParsedValue 
    {
        get { return this.OriginalValue.ToString(); }
        set
        {
            string forParse = 
                value.Replace(",", Globalization.CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
            decimal temp = 0;
            if(decimal.TryParse(forParse, 
                                out temp,
                                Globalization.CultureInfo.InvariantCulture) == true)
            {
                this.OriginalValue = temp;
            }
            //if value wasn't parsed succesfully, original value will be returned
            this.RaiseOnPropertyChanged(nameOf(this.ParsedValue));
        }
    }
}

欢迎来到堆栈溢出。您可以使用
Replace
,但我不建议这样做。因为在这种情况下,用户可能会将
作为千位分隔符,这对于您使用的区域性设置来说可能是不明确的。我建议在UI部分进行一些验证,以提供正确的十进制格式。