当直接绑定到DataTable时正在验证DataGrid数据-C#/WPF



我有一个DataTable,我将它绑定到WPF中的DataGrid。XAML中不生成列,所有操作都是在代码中创建DataTable时完成的。

我有双向绑定,所以用户可以更新DataGrid中的值,它将更新DataTable,尽管这不是我在调试时看到的事件,但我的结果显示它按预期工作。

但是,如果列的类型是double,并且用户输入文本,则该单元格的现有DataTable数据将被保留,该单元格将以红色显示,并且我的调试器输出显示发生FormatException。

我想做的是能够:

a) 处理此异常并在我的UI 中向用户显示警告

b) 有一些自定义的验证方法,可以在我的代码中设置一个标志,我可以在某个时候使用它来处理错误

我不介意使用哪种解决方案,我只是不希望用户没有注意到错误。

谢谢。

如果你想继续使用ado.net和数据表,那么:http://msdn.microsoft.com/en-us/library/1120xds5.aspx

编辑:

  this.MyTable.ColumnChanging += MyTableColumnChangingStuff;
    private void MyTableColumnChangingStuff(object sender, DataColumnChangeEventArgs e)
    {
        if(e.Column.ColumnName == "MyColumnTestName")
        {
           var errormsg = MyValidateTestNameMethod(e.ProposedValue);
           e.Row.SetColumnError(e.Column.ColumnName, errormsg);
        }
        //...
    }

编辑2:

谢谢,只是尝试了一下,虽然活动在什么时候被召集我修改了正确类型的数据,如果用户输入的数据类型错误。和以前一样,盒子突出显示为红色,格式异常由wpf处理,但未调用事件。

这是真的。对我来说只有两个解决方案。首先为输入控件创建行为,确保值始终可以转换为您的底层类型。另一个解决方案是您的视图模型,在该模型中,您绑定到的只是字符串类型的属性。这样做的好处是,您永远不会因为类型转换而得到bindingexception。现在您要做的是在检查字符串属性的地方实现IDataErrorInfo。当然,当您进入模型时,您必须将字符串值强制转换为正确的类型。

到目前为止,我使用第一种方法,因为我使用日期选择器、数字行为,并且没有任何其他类型。

相关内容

  • 没有找到相关文章

最新更新