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