В WPF, можете ли вы связать ListView (НЕ DataGrid) с DataSet Matrix (Cross-Tab)? - PullRequest
1 голос
/ 12 мая 2009

Возможно ли в WPF связать ListView (НЕ DataGrid) с набором данных Matrix (Cross-Tab), в котором столбцы заранее неизвестны?

Используя базу данных Northwind в качестве примера: простой запрос, приведенный ниже, вернет известный набор данных, который можно легко привязать к представлению списка:

SELECT  Year(o.OrderDate) AS [Year], Month(o.OrderDate) AS [Month], 
COUNT(o.OrderID) AS [NumOrders]
FROM Orders o 
GROUP BY Year(o.OrderDate), Month(o.OrderDate)
ORDER BY 1, 2

alt text

Чтобы сгенерировать более значимый отчет, мы можем запустить набор результатов из вышеуказанного запроса (в программе отчетов), чтобы сгенерировать что-то, как показано ниже:

SELECT  [Year], 
SUM(CASE [Month] WHEN 1 Then NumOrders ELSE 0 END) AS 'Jan',
SUM(CASE [Month] WHEN 2 Then NumOrders ELSE 0 END) AS 'Feb',
SUM(CASE [Month] WHEN 3 Then NumOrders ELSE 0 END) AS 'Mar',
SUM(CASE [Month] WHEN 4 Then NumOrders ELSE 0 END) AS 'Apr',
SUM(CASE [Month] WHEN 5 Then NumOrders ELSE 0 END) AS 'May',
SUM(CASE [Month] WHEN 6 Then NumOrders ELSE 0 END) AS 'Jun',
SUM(CASE [Month] WHEN 7 Then NumOrders ELSE 0 END) AS 'Jul',
SUM(CASE [Month] WHEN 8 Then NumOrders ELSE 0 END) AS 'Aug',
SUM(CASE [Month] WHEN 9 Then NumOrders ELSE 0 END) AS 'Sep',
SUM(CASE [Month] WHEN 10 Then NumOrders ELSE 0 END) AS 'Oct',
SUM(CASE [Month] WHEN 11 Then NumOrders ELSE 0 END) AS 'Nov',
SUM(CASE [Month] WHEN 12 Then NumOrders ELSE 0 END) AS 'Dec'
FROM
( 
SELECT  Year(o.OrderDate) AS [Year], Month(o.OrderDate) AS [Month], 
COUNT(o.OrderID) AS [NumOrders]
FROM Orders o 
GROUP BY Year(o.OrderDate), Month(o.OrderDate)
)t0
GROUP BY [Year]

В результате получается что-то вроде этого:

alt text

У меня такой вопрос: возможно ли связать этот конечный результат с ListView или Flowdocument в WPF, не имея предварительных знаний о результирующих столбцах?

Ответы [ 2 ]

2 голосов
/ 12 мая 2009

Вы можете сгенерировать GridViewColumns для ListView программно и применить к нему привязку. Прокрутите столбцы в DataSet и добавьте соответствующий GridViewColumn в ListView.

var gridView = (GridView)list.View;
foreach(var col in table.Columns) {
   gridView.Columns.Add(new GridViewColumn{
      Header=col.ColumnName, 
      DisplayMemberBinding=new Binding(col.ColumnName)});
}
1 голос
/ 15 мая 2009

Вы можете динамически добавлять столбцы в ListView, используя Attached Properties. Прочтите эту статью о CodeProject , это объясняет, что именно ...

WPF DynamicListView - привязка к DataMatrix

...