C# WPF-在DataGrid中插入记录的自定义验证规则

C# WPF-在DataGrid中插入记录的自定义验证规则,c#,wpf,datagrid,dataset,C#,Wpf,Datagrid,Dataset,现在我有一个窗口来操作我的一个DB表中的记录,它看起来像: 我从数据源选项卡中拖动该DataGrid控件,得到了该控件。该数据源实际上是我在VS 2015中创建的一个数据集项,这意味着一些强类型的数据库操作类是在.xsd文件中自动生成的。因此,您可以看到,基本上,这个Datagrid背后的所有内容都是自动生成的,包括xaml和C#代码。 默认情况下,插入新记录时,将对照其类型检查您在单元格中键入的数据,如果您键入的内容与预期不符,则第一个单元格中将显示红色感叹号。例如,我的表格中的IRD列是

现在我有一个窗口来操作我的一个DB表中的记录,它看起来像:

我从
数据源
选项卡中拖动该
DataGrid
控件,得到了该控件。该数据源实际上是我在VS 2015中创建的一个
数据集
项,这意味着一些强类型的数据库操作类是在.xsd文件中自动生成的。因此,您可以看到,基本上,这个
Datagrid
背后的所有内容都是自动生成的,包括xaml和C#代码。

默认情况下,插入新记录时,将对照其类型检查您在单元格中键入的数据,如果您键入的内容与预期不符,则第一个单元格中将显示红色感叹号。例如,我的表格中的IRD列是int类型,如果您键入数字以外的符号,您将得到红色感叹号


我现在想做的是,限制用户键入8到9位数字,例如,如果用户只键入3位数字:346,他/她将看到红色感叹号,并且无法继续插入记录。

您使用
DataTable
作为
ItemsSource
用于
DataGrid
对吗?如果是,那么让我来演示如何验证单元格:

this.YourDataTable.ColumnChanging += YourDataTableColumnChangingStuff;

private void YourDataTableColumnChangingStuff(object sender, DataColumnChangeEventArgs e)
{
   private void EmployeeDataTable_ColumnChanging(object sender, DataColumnChangeEventArgs e)
    {
         //if you want to leave previous value 
        if ("incorrect value" != e.ProposedValue.ToString())
            e.ProposedValue = e.Row.ItemArray[e.Column.Ordinal];
        else
        {
            //if you want to set new value
            e.ProposedValue = "new value";
        }            
    }
}

谢谢@stepp,我相信我们需要更多,仅仅设置列错误不足以阻止记录插入DataTable.rows集合。我试过了。@VincentZHANG,请随便问任何问题。如果您觉得我的回复对您有帮助,那么您可以将我的回复标记为答案,以简化将来对其他人的搜索。请看这个