2010-08-19 139 views
1

我只是找到了我的WPF/Datagrid/Linq方式,並試圖找出如何在我的數據網格中顯示相關表格中的數據。例如,我有3個表:如何在WPF數據網格中顯示相關表格中的數據

  • 客戶:ID,名稱
  • 產品:ID,名稱
  • 訂單:ID,客戶ID,productId參數

,我已經建立了關係在數據庫表中。我已經添加了表格作爲創建我的包裝類的C#數據集。我現在想要將查詢綁定到幾個不同的WPF數據網格,以獲得以下內容:

  • 訂單列表|訂單Id |產品名稱|客戶名稱|
  • 客戶列表|客戶名稱|訂單摘要(例如逗號分隔的字符串列表)|

如何在我的XAML中指定DataContext或ItemsSource以從其他表中顯示此信息?我使用ObjectDataProvider s來提供設計時支持,如果這有所幫助。

我看到這個問題:How to bind WPF Datagrid to a joined table它創建一個新的類來顯示錶的信息。這是我需要做的,而不是指定一個綁定?

編輯:

我已經使用上面的第二種方法取得了一點成功。我不知道我是否可以使用綁定來實現相同的事情,而無需執行明確的select查詢來創建新項目。我已經得到了我映射到數據網格查詢:

var q = from d in dbMan.dataset.Orders 
    select new { 
    id=d.id, 
    productName = d.ProductsRow.name, 
    custName = d.CustomersRow.name }; 

,然後在XAML綁定:

<my:DataGrid.Columns> 
    <my:DataGridTextColumn Header="id" Binding="{Binding id}" /> 
    <my:DataGridTextColumn Header="Product Name" Binding="{Binding productName}" /> 
    <my:DataGridTextColumn Header="Customer Name" Binding="{Binding custName}" /> 
</my:DataGrid.Columns> 

回答

2

我通常只設置DataGrid中的ItemSource到後面的代碼中的DataTable。如果要在多個DataTable之間更改ItemSource,這比XAML容易。

myDataGrid.ItemsSource = myTable.DefaultView; 

任何時候我想改變我的datagrid顯示什麼,我只是更新ItemsSource。這樣我可以以任何我想要的方式操作我的DataTable,然後通過DataGrid查看結果。

更新

要加入兩個表的數據運行LINQ一起創造你在表中所需字段的IEnumberable。然後將您的IEnumerable轉換回DataTable進行顯示。我使用this method將IEnumerable轉換爲DataTable。

+0

我如何獲得這個結合多個表中的字段? – 2010-08-19 21:47:00

+0

謝謝 - 必須進行連接的額外步驟,然後轉換爲DataTable對我來說並不明顯。 – 2010-08-23 07:41:36