将负零,前导零输入到DataGrid单元格中

问题描述 投票:1回答:1

[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个回答
0
投票

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

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.