【问题标题】:Hide decimal point if no decimal digits present如果不存在小数位,则隐藏小数点
【发布时间】:2013-11-16 16:04:45
【问题描述】:
var qtyMaskedTextEdit = new RepositoryItemTextEdit();
qtyMaskedTextEdit.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;
qtyMaskedTextEdit.Mask.UseMaskAsDisplayFormat = true;
qtyMaskedTextEdit.Mask.EditMask = "#,###.##;(#,###.##)";
grid.RepositoryItems.Add(qtyMaskedTextEdit);
column.ColumnEdit = qtyMaskedTextEdit;

以下格式:"#,###.##;(#,###.##)" 将 123 显示为 123。(末尾有小数点)

如何去掉这个小数点?

【问题讨论】:

  • 试试只用“#,##”

标签: devexpress xtragrid


【解决方案1】:

解决方案 1:
在接下来的修改中,派生控件的创建对我有用:

在构造函数中:

CustomDisplayText += OnCustomDisplayText;

订阅后用空字符串替换逗号/点号:

private void OnCustomDisplayText(object sender, CustomDisplayTextEventArgs e)
        {
            if (MaskType == DevExpress.Xpf.Editors.MaskType.Numeric &&
                MaskUseAsDisplayFormat &&
                !String.IsNullOrEmpty(e.DisplayText) &&
                e.DisplayText.Last().ToString() == NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)
            {
                e.DisplayText = e.DisplayText.Replace(NumberFormatInfo.CurrentInfo.NumberDecimalSeparator, string.Empty);
                e.Handled = true;
            }
        }

MINUS:在编辑模式下逗号/点仍然可见

解决方案 2: 我发现这个问题只发生在十进制类型,这是 .NET 问题,而不是 devexpress。以 double 为例,就没有这样的问题。

有一个 hack 将小数除以 1m(m = 十进制)数字,之后尾随零消失。

public static class NumberExtensions
{
    public static decimal RemoveTrailingZeros(this decimal number)
    {
        return (number / 1m);
    }
}

然后在您的视图模型或模型中使用它,例如

public decimal Number {get {return number.RemoveTrailingZeros(); }}

附:还是不明白1m分割后到底发生了什么,这里是分割前后字节的测试:

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 2013-04-18
    • 2015-07-03
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2021-12-08
    相关资源
    最近更新 更多