如何允许用户对LINQ-to-SQL WPF Datagrid上的列进行排序?

时间:2009-03-24 15:01:55

标签: wpf linq datagrid

我已经成功设置了一个带有March 2009 WPF Toolkit的WPF Datagrid,从Northwind数据库创建了LINQ-to-SQL类,用这段代码绑定了WPF网格:

var customers = from c in _db.Customers
                select c;
TheDataGrid.ItemsSource = customers;

我可以从左到右移动列,让删除列工作等等。

但是,当我单击列标题对其进行排序时,我在“输出”窗口中得到大约20对错误,看起来好像每列都有一对错误:

  

System.Windows.Data错误:1:无法创建默认转换器   执行“双向”转换   类型   'System.Data.Linq.EntitySet`1 [TestDataGrid566.Model.Order]'   和'System.String'。考虑使用   绑定的转换器属性。   BindingExpression:路径=订单;   的DataItem = '客户'   (的HashCode = 4925117);目标元素是   'TextBlock'(Name ='');目标财产   是'文字'(类型'字符串')

     

System.Windows.Data错误:5:BindingExpression产生的值是   对目标财产无效。   值= 'System.Data.Linq.EntitySet`1 [TestDataGrid566.Model.Order]'   BindingExpression:路径=订单;   的DataItem = '客户'   (的HashCode = 4925117);目标元素是   'TextBlock'(Name ='');目标财产   是'文字'(类型'字符串')

当我创建LINQ-to-SQL类时,我只是将所有表从数据库拖到模型设计器并保存,因此这些类都是默认代码。

这些错误告诉我什么?我是不是没有正确设置LINQ-to-SQL类,还是指向更深层次的东西?

1 个答案:

答案 0 :(得分:4)

我认为您应该将查询转换为列表。

var customers = from c in _db.Customers
                select c;
TheDataGrid.ItemsSource = customers.ToList(); //note the .ToList() call

否则,DataGrid会尝试重新枚举查询,这是一个坏主意,因为查询结果是一个延迟加载的集合。