【问题标题】:DataGridView: How to allow comma and dot as a separators at the same timeDataGridView:如何允许逗号和点同时作为分隔符
【发布时间】:2016-01-04 08:51:10
【问题描述】:

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

很简单:

1.908 = 1.908

1,908 = 1.908

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

谢谢。 (对不起我的英语)

【问题讨论】:

  • 欢迎来到 Stack Overflow。您可以使用Replace,但我不建议这样做。因为在这种情况下,用户可能也将. 用作千位分隔符,这对于您使用的文化设置可能会模棱两可。我建议在您的 UI 部分进行一些验证,以提供 proper 格式的小数。

标签: c# winforms datagridview binding formatting


【解决方案1】:

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

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));
        }
    }
}

【讨论】:

    【解决方案2】:

    DataGridView 已经根据当前用户的区域设置进行格式化,至少如果您将数据绑定到对象数据源并且属性是数字(即不是 string)。

    您可以通过在 Windows 中打开 Region and Language 并在例如English (United States) 格式和Swedish (Sweden)。在前一种情况下,输入 2.718 将正确解析,而在第二种情况下 2,718 将正确解析。您必须在不调试 VS 的情况下运行才能加载新设置。

    (如果您正在考虑这样做,我不建议尝试将逗号和点解析为同一用户的小数分隔符。这不是大多数用户的预期行为,如果用户使用它会导致错误也应该使用千位分隔符。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2017-09-30
      • 2023-01-12
      • 2015-08-31
      • 1970-01-01
      相关资源
      最近更新 更多