Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何允许用户对LINQ到SQL WPF数据网格上的列进行排序?_Wpf_Linq_Datagrid - Fatal编程技术网

如何允许用户对LINQ到SQL WPF数据网格上的列进行排序?

如何允许用户对LINQ到SQL WPF数据网格上的列进行排序?,wpf,linq,datagrid,Wpf,Linq,Datagrid,我已成功地使用从Northwind数据库创建的LINQ to SQL类设置了WPF Datagrid,并使用以下代码绑定WPF网格: var customers = from c in _db.Customers select c; TheDataGrid.ItemsSource = customers; 我可以从左向右移动列,删除列,等等 但是,当我单击列标题对其进行排序时,在我的输出窗口中会出现大约20对错误,似乎每列都有一对错误: System.Windo

我已成功地使用从Northwind数据库创建的LINQ to SQL类设置了WPF Datagrid,并使用以下代码绑定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:Path=Orders; DataItem='Customer' (HashCode=4925117);目标元素是 “TextBlock”(名称=“”);目标属性 是“文本”(键入“字符串”)

System.Windows.Data错误:5:BindingExpression生成的值为 对目标属性无效。; Value='System.Data.Linq.EntitySet`1[TestDataGrid566.Model.Order]' BindingExpression:Path=Orders; DataItem='Customer' (HashCode=4925117);目标元素是 “TextBlock”(名称=“”);目标属性 是“文本”(键入“字符串”)

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


这些错误告诉了我什么?我只是没有正确设置LINQ to SQL类,还是这指向了更深层次的问题?

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

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

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

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

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

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

我仍然会收到错误,但至少.ToList()允许它排序,谢谢。如果我正确读取了错误消息,这是绑定中的一个问题。例如,您的Linq2Sql类可能设置得很好(看起来您有一个实体“Customer”,它有一个属性“Orders”,这是一个Order实体的集合),但您试图将该集合绑定到一个-continuedTextBlock文本属性,而该属性无法绑定,因此会发出这些警告。是的,要么你表示你想绑定到Orders集合属性,要么你使用了AutoGenerateColumns选项(该选项不应该存在,在几乎任何实际情况下都是无用的)。我试图关闭autoGeneratecolumns并定义我自己的,但我得到了这个绑定错误:我仍然得到了错误,但至少.ToList()允许它排序,谢谢。如果我正确读取了错误消息,则绑定中存在问题。例如,您的Linq2Sql类可能设置得很好(看起来您有一个实体“Customer”,它有一个属性“Orders”,这是一个Order实体的集合),但您试图将该集合绑定到一个-continuedTextBlock文本属性,而该属性无法绑定,因此会发出这些警告。我会对此进行调查。是的,要么您表示要绑定到Orders集合属性,要么您使用了AutoGenerateColumns选项(该选项不应该存在,在几乎任何实际情况下都是无用的)。我试图取下AutoGenerateColumns并定义我自己的,但出现了以下绑定错误: