2010-08-19 14 views
1

Я просто нахожу свой путь с WPF/Datagrid/Linq, и я пытаюсь выяснить, как отображать данные из связанной таблицы в моем datagrid. Например, у меня есть 3 таблицы:Как отображать данные из связанных таблиц в WPF datagrid

  • Клиенты: идентификатор, имя
  • продукты: идентификатор, имя
  • Приказы: идентификатор, CUSTOMERID, PRODUCTID

и я настроил отношения в таблицах БД. Я добавил таблицы как набор данных C#, который создал мои классы-оболочки. Теперь я хочу привязать запрос к нескольким различным файлам данных WPF, чтобы получить следующее:

  • список заказов | Идентификатор заказа | Название продукта | Имя клиента |
  • список клиентов as | Имя клиента | Сводка заказов (например, список строк, разделенных запятыми) |

Как я могу указать DataContext или ItemsSource в своем XAML для отображения этой информации из других таблиц? Я использую ObjectDataProvider s для обеспечения поддержки времени разработки, если это имеет значение.

Я видел этот вопрос: How to bind WPF Datagrid to a joined table, который создает новый класс для отображения информации для таблицы. Является ли это тем, что мне нужно сделать, а не указывать привязку?

EDIT:

Я имел немного успеха с помощью 2-го метода выше. Интересно, могу ли я использовать привязки для достижения того же самого, не требуя явного запроса select для создания новых элементов. У меня есть запрос, который я карту в DataGrid:

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

Я обычно просто установить DataGrids ItemSource к DataTable в коде позади. Это проще, чем XAML, если вы собираетесь менять ItemSource между несколькими DataTable.

myDataGrid.ItemsSource = myTable.DefaultView; 

В любое время, когда я хочу изменить то, что показывает мой datagrid, я просто обновляю ItemsSource. Таким образом, я могу каким-либо образом манипулировать данными DataTable, а затем увидеть результат через DataGrid.

Update

Чтобы объединить данные из обеих таблиц запустить Linq присоединиться к созданию IEnumberable полей, которые вы хотите включить в таблицу. Затем конвертируйте свой IEnumerable обратно в DataTable для отображения. Я использую this method для преобразования IEnumerable в DataTable.

+0

Как мне получить это, чтобы объединить поля из более чем одной таблицы? –

+0

Спасибо - эти дополнительные шаги, необходимые для соединения, а затем преобразование в DataTable не было очевидно для меня. –

Смежные вопросы