【问题标题】:Entering negative numbers with leading zero into the DataGrid cell在 DataGrid 单元格中输入带前导零的负数
【发布时间】:2019-08-02 02:25:04
【问题描述】:

DataGrid 列绑定到具有从数据库填充的十进制数据类型的 DataTable 列。

<DataGridTextColumn Binding="{Binding Pay, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay, Header="Sum"/>

更改每个单元格后,我需要计算列中的总和。

private void dgPays_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) {
        if (dtPay == null || dtPay.Rows.Count == 0) {
            return;
        }
        decimal Pay;
        DataRow[] rr = dtPay.Select("IsTotal=1");
        foreach (DataRow r in rr) {
            dtPay.Rows.Remove(r);
        }

        Decimal.TryParse(dtPay.Compute("SUM(Pay)", "").ToString(), out Pay);
        dtPay.Rows.Add(null, null, null, null, null, null, Pay, null, true);
    }

但是,由于此绑定,当用户输入带有前导零“-0.xxxx”的负小数时,输入时减号会丢失,“-0”会转换为“0”。此类数字只能输入“-.xxxx”,自动转换为“-0.xxxx”,不方便用户使用。

DataTable 是从数据库中填充的,然后将值从它保存到数据库中,我无法更改“Mode=TwoWay”绑定。 如果我在单元格编辑结束后更改“UpdateSourceTrigger=PropertyChanged”不起作用“dtPay.Compute("SUM(Pay)", "")"。

如何输入“-0”?

【问题讨论】:

标签: wpf datagrid cell


【解决方案1】:

问题已解决 最初改变了单元格的格式

DataGridTextColumn Binding="{Binding Pay,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay,StringFormat={}{0:+#;-#;''}, Converter={StaticResource decimalConverter}}" Header="Sum" IsReadOnly="False"/>

并添加了转换器

public class DecimalConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        if (value != null) {
            return value.ToString().Replace(",", lib.csGlobals.numSep).Replace(".", lib.csGlobals.numSep);
        }
        return Binding.DoNothing;
    }

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        string data = (value as string).Replace(",", lib.csGlobals.numSep).Replace(".", lib.csGlobals.numSep); 
        if (data == null) {
            return value;
        }
        if (data.Equals(string.Empty)) {
            return 0;
        }
        if (!string.IsNullOrEmpty(data)) {
            decimal result;

            if (data.EndsWith(".") || data.Equals("-0") || data.Equals("-") || data.EndsWith(",")
                || data.Equals("-0.0") || data.Equals("-0,0")
                ) {
                return Binding.DoNothing;
            }
            if (decimal.TryParse(data, out result)) {
                return result;
            }
        }
        return Binding.DoNothing;
    }
}

【讨论】:

    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多