【问题标题】:How can I allow user to sort columns on a LINQ-to-SQL WPF Datagrid?如何允许用户对 LINQ-to-SQL WPF 数据网格上的列进行排序?
【发布时间】:2010-10-15 05:39:43
【问题描述】:

我已经成功地使用March 2009 WPF Toolkit 设置了一个 WPF 数据网格,从 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'。考虑使用 Binding 的转换器属性。 绑定表达式:路径=订单; 数据项='客户' (哈希码=4925117);目标元素是 '文本块'(名称='');目标属性 是“文本”(输入“字符串”)

System.Windows.Data 错误:5:BindingExpression 产生的值是 对目标属性无效。; 值='System.Data.Linq.EntitySet`1[TestDataGrid566.Model.Order]' 绑定表达式:路径=订单; 数据项='客户' (哈希码=4925117);目标元素是 '文本块'(名称='');目标属性 是“文本”(输入“字符串”)

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

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

【问题讨论】:

    标签: wpf linq datagrid


    【解决方案1】:

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

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

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

    【讨论】:

    • 我仍然收到错误,但至少 .ToList() 允许它进行排序,谢谢。
    • 如果我正确阅读了错误信息,那是绑定的问题。例如,您的 Linq2Sql 类可能设置得很好(看起来好像您有一个实体 'Customer',它有一个属性 'Orders',它是 Order 实体的集合),但您正试图将该集合绑定到 - 继续
    • TextBlock 文本属性,它不能,因此会给你这些警告。我会调查的。
    • 是的,要么你表明你想绑定到 Orders 集合属性,要么你使用了 AutoGenerateColumns 选项(它不应该存在,它在几乎任何实际情况下都相当无用)。
    • 我尝试关闭 autoGeneratecolumns 并定义我自己的,但我收到此绑定错误:stackoverflow.com/questions/678327/…
    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 2011-09-22
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多