仅在数据网格中输入数字

本文关键字:输入 数字 网格 数据网 数据 | 更新日期: 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>