我有一个DataTable,它绑定到WPF中的DataGrid。在XAML中没有生成列,当我在代码中创建DataTable时,一切都完成了。
我有双向绑定,因此用户可以更新DataGrid中的值,它将更新DataTable,虽然这不是我在调试时可以看到的事件,但我的结果显示它按预期工作。
但是,如果列的类型为双精度并且用户输入文本,则保留该单元格的现有DataTable数据,单元格以红色标出,我的调试器输出显示发生了FormatException。
我想要做的是:
a)处理此异常并在我的UI中向用户显示警告
b)有一些自定义验证方法可以在我的代码中设置一个标志,我可以用它来处理错误
我不介意我使用哪种解决方案,我只是不希望用户不注意错误。
感谢。
答案 0 :(得分:0)
如果你想继续使用ado.net和datatables: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处理,但是 事件没有被调用。
那是真的。对我来说只有2个解决方案。首先为输入控件创建行为,您可以确保值始终可转换为基础类型。另一个解决方案就是你的viewmodel你绑定到只具有string类型的属性。这是件好事 - 你因为铸造一个类型而永远不会得到一个bindingexception。你现在要做的是实现IDataErrorInfo,你检查你的字符串属性。当然,当你去模型时,你必须将你的字符串值转换为正确的类型。
直到现在我使用第一种方法,因为我使用了datepicker,数字行为,并且没有任何其他类型。