DataGrid绑定数字后无法输入小数点的解决办法

探讨WPF DataGrid控件在编辑数字时无法直接输入小数点的问题,提供自定义NumericBox控件解决方案,确保用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WPF中的DataGrid控件,用于显示列表数据,一般来说是很好用的。但是在使用过程中发现,我们发现DataGrid的列单元在绑定数字后,再编辑此列单元时,无法在数字后面键入小数点,这给终端用户带来很大的不便。在网上查了下,很多人碰到这个问题,但没有好的解决办法。

我们可以采用以下语句试验输入效果:

<DataGridTemplateColumn.CellTemplate>

                        <DataTemplate>

                            <TextBox   HorizontalAlignment="Stretch"   Text="{Binding dbValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,NotifyOnTargetUpdated=True}"/>

                        </DataTemplate>

</DataGridTemplateColumn.CellTemplate>

经过多次试验,发现可以此单元可以输入任意键盘文字,除了小数点与逗号,当然你可以拷贝小数,也可以在输入整数后,再在中间加入小数点,但就是不能在数字最后加入小数点。还有另一种解决办法是,定义StringFormat格式,但是定义了后,可以输入小数点了,但格式却永远不变,而且用户在输入时变得很怪异,它的小数位只能替换,不能新加(大家可以试试),这与终端使用者的习惯严重不符。个人认为,这就是微软的一个BUG。

那么,有没有更好的解决办法呢?最好的解决办法是,自己写一个控件,替代原来的TextBox控件。比如自定义一个控件,继承TextBox:

public class NumericBox : TextBox

在绑定到Text时,仍然不成功。结论是,TextBox这个基础控件被DataGrid锁定,不绕开这个TextBox.Text属性的数字绑定,就不可能实现输入小数点的功能。

解决办法是,自定义一个标准属性,绑定双向数字,再将数字转换为字符串,将字符串显示在TextBox.Text中。即:

public new string Text

        {

            get

            {

                return base.Text;

            }

            set

            {

                m_decText = helper.FieldToDecimal(value);

                decimal d = Math.Round(m_decText, this.Decimal);//舍入小数位数

                base.Text = d.ToString();

            }

   }

经测试,OK了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值