2009-05-12 4 views
1

Est-il possible dans WPF de lier un ListView (PAS un DataGrid) à un DataSet Matrix (Cross-Tab) dans lequel les colonnes sont inconnues auparavant?Dans WPF, pouvez-vous lier un ListView (PAS DataGrid) à un DataSet Matrix (Cross-Tab)?

Utilisation de la base de données Northwind comme exemple: la recherche simple ci-dessous renvoie un ensemble de données bien connu qui peut facilement être lié à un listview:

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 http://i43.tinypic.com/rlhrh0.png

Pour créer un rapport plus significatif, nous pourrait exécuter le jeu de résultats de la requête ci-dessus (dans un programme de déclaration) pour générer quelque chose comme ci-dessous ci-dessous:

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] 

Quels sont les résultats dans quelque chose comme ceci:

alt text http://i44.tinypic.com/33kpt7q.png

Ma question est, il le possible de lier ce résultat final à un ListView ou un FlowDocument en WPF sans avoir la connaissance préalable des colonnes qui en découlent?

Répondre

2

Vous pouvez générer les GridViewColumns pour ListView par programme et appliquer la liaison à cela. Parcourez les colonnes du DataSet et ajoutez un GridViewColumn correspondant dans 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)}); 
} 
+0

Est-il possible de parvenir à ce résultat en utilisant le modèle de conception M-V-VM? –

Questions connexes