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

时间:2014-09-26 13:22:07

标签: wpf datagrid

我有一个DataTable,它绑定到WPF中的DataGrid。在XAML中没有生成列,当我在代码中创建DataTable时,一切都完成了。

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

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

我想要做的是:

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

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

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

感谢。

1 个答案:

答案 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,数字行为,并且没有任何其他类型。