限制数据网格单元格中小数位数的数量

本文关键字:小数 单元格 数据 数据网 网格 | 更新日期: 2023-09-27 17:50:59

我有一个用户输入值的数据网格。这里有一列:

<datagrid:ThemedDataGrid   AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="True" ItemsSource="{Binding Model.ItemCollection, UpdateSourceTrigger=PropertyChanged}"  
                             SelectionUnit="FullRow"  
                             SelectedItem="{Binding Model.SelectedItem}" >
                   <datagrid:ThemedDataGrid.Columns >
                       <datagrideditors:DataGridDoubleColumn  Binding="{Binding OFFSET, UpdateSourceTrigger=PropertyChanged}" Header="{DynamicResource Offset}" />
                   </datagrid:ThemedDataGrid.Columns>
    </datagrid:ThemedDataGrid>

我需要允许用户在小数部分只输入5位数。我这样设置了OFFSET属性:

public new double OFFSET 
{
    get { return _offset; }
    set
    {
        int count = 0;
        bool isSeparator = false;
        char a = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
        var formatted = value.ToString().ToCharArray();
        foreach (var y in formatted)
        {
            if (!isSeparator)
            {
                if (y == a)
                {
                    isSeparator = true;
                }
            }
            else
            {
                count++;
            }
        }
        if (isSeparator)
        {
            if (count > 5)
            {
                return;
            }
        }
        _offset = value;
        OnPropertyChanged();
        }
    }

不允许用户输入小数部分的第六位数字,这里用户可以输入任意数量的数字,只有当他输入值时,小数部分的值才会变为小数部分的5位数字。

如何解决这个问题?

限制数据网格单元格中小数位数的数量

我知道英语可能是第二语言,但这不是很清楚

用户不允许输入小数部分的第六位,且在这里,用户可以输入任意数量的数字,并且只有当他需要时才可以输入值时,小数值变为5位数字的值小数部分。

考虑
if (count > 5) { return; }

您没有对DataGrid中的值做任何操作
你需要给_offset分配合适的值并调用OnPropertyChanged();

例如

if (count > 5) 
{ 
    _offset = 5.55555;
    // I leave it to you to properly assign _offset;
    OnPropertyChanged();
    return; 
}
    StringBuilder() sb = new StringBuilder();
    foreach (var y in formatted)
    {
        if (!isSeparator)
        {
            if (y == a)
            {
                isSeparator = true;
            }
        }
        else
        {
            count++;
            if (count > 5) break;
        }
        sb.Append(y);
    }
    if (isSeparator)
    {
        if (count > 5)
        {
            _offset = Double.Parse(sb.ToString());
            OnPropertyChanged();
            return;
        }
    }

如果你使用的是。net 3.5或4.0,那么你可能会遇到UI不更新的问题。
但是在。net 4.5中,它对我来说工作得很好。