【发布时间】:2011-02-04 21:53:47
【问题描述】:
在我的 c# WPF 应用程序中,我在运行时将列添加到 DataGrid,并通过 LINQ 从我的 SQL 数据库中填充。这工作正常,直到我尝试从我的多对多表中添加数据
这是我的数据库中 3 个相关表的简化版本:
documents: document_id, title
documents_keywords: document_id, keyword_id, value
keywords: keyword_id, name
我在 DataGrid 中想要的是 document.title 的一列,以及基于用户选择的 document.documents_keywords 中每条记录的一列。这是我的代码:
DataGrid dataGrid = new DataGrid();
dataGrid.Columns.Add(new DataGridTextColumn
{
Header = "Title",
Binding = new Binding("title")
});
foreach (string keywordName in keywordsListBox.SelectedItems)
{
dataGrid.Columns.Add(new DataGridTextColumn
{
Header = keywordName,
Binding = new Binding("documents_keywords.FirstOrDefault(kw => kw.keyword.name.Equals(\""+keywordName+"\")).value")
});
}
dataGrid.ItemsSource = from d in db.documents select d;
我得到了关键字标题,但单元格都是空白的。绑定在 FirstOrDefault 失败:
System.Windows.Data Error: 40 : BindingExpression path error: 'FirstOrDefault(d_k => d_k.keyword.name.Equals("Order#"))' property not found on 'object' ''EntityCollection`1' (HashCode=7935090)'. BindingExpression:Path=documents_keywords.FirstOrDefault(d_k => d_k.keyword.name.Equals("Order#")).value; DataItem='document' (HashCode=5781744); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
实现此目的的最佳方法是什么?请原谅我,因为这是我第一次接触 WPF 和 LINQ。
【问题讨论】:
标签: c# wpf linq data-binding