欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决

程序员文章站 2022-03-25 20:16:02
如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行其他操作。 Xaml代码如下: 解决思路是用转换器Converter代替StringFormat: Xmal主要代码: C#主要代码: ......

如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行其他操作。

WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决

xaml代码如下:

<datagridtextcolumn header="借方金额" binding="{binding path=fdebit, stringformat='#,##0.00;-#,##0.00;#'}" width="200" elementstyle="{staticresource dgcellrigth}"/>

解决思路是用转换器converter代替stringformat:

xmal主要代码:

<window.resources>
        <local:numconver x:key="numconverter"/>
</window.resources>
<datagridtextcolumn header="借方金额" binding="{binding path=fdebit, converter={staticresource numconverter}}" width="200" elementstyle="{staticresource dgcellrigth}"/>

c#主要代码:

public class numconver : ivalueconverter
{
    //当值从绑定源传播给绑定目标时,调用方法convert
    public object convert(object value, type targettype, object parameter, cultureinfo culture)
    {
        string strnum = value.tostring();
        if (string.isnullorempty(strnum)) return null;
        decimal decnum = (decimal)value;
        return decnum.tostring("#,##0.00;-#,##0.00;#");
    }

    //当值从绑定目标传播给绑定源时,调用方法convertback
public object convertback(object value, type targettype, object parameter, cultureinfo culture) {
string strnum = value.tostring(); if (string.isnullorempty(strnum)) return null; decimal decnum; if (decimal.tryparse(strnum, out decnum)) { return decnum; } else { return dependencyproperty.unsetvalue; //未设定值,对非法数字进行数字验证,单元格以红色框线提示,等待修改 //return null; //null值,对非法数字进行丢弃。注意这两行代码的区别 } } }