限制数据网格单元格中小数位数的数量
本文关键字:小数 单元格 数据 数据网 网格 | 更新日期: 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中,它对我来说工作得很好。