仅在数据网格中输入数字
本文关键字:输入 数字 网格 数据网 数据 | 更新日期: 2023-09-27 18:35:51
我试图将特定列中的数据控制为仅数字,但问题是DataGrid中没有KeyPressing事件。我尝试使用KeyUp和KeyDown,但我遇到了另一个问题:
private void DG1_KeyDown(object sender, KeyEventArgs e)
{
float f;
if (!float.TryParse(((char)e.Key).ToString(),out f))
{
e.Handled = false;
}
}//casting returns an incorrect char value for example NumPad4 returns 'K'
与其侦听特定的键,更简单的方法是侦听TextBox
PreviewTextInput
事件。在这里,您可以确定新文本是字母还是数字,然后正确处理它。
private void OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = new Regex("[^0-9]+").IsMatch(e.Text);
}
可以为每个数据网格文本框列设置此设置。
您可能需要手动设计 DataGrid,以便更轻松地将事件与仅数字列相关联。像这样:
<DataGrid ItemsSource="{Binding MyItems}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="NumericOnly">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Number}" PreviewTextInput="OnPreviewTextInput" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>