In WPF, si può associare un controllo ListView (non DataGrid) ad un (Cross-Tab) DataSet Matrix?

StackOverflow https://stackoverflow.com/questions/853710

Domanda

E 'possibile in WPF associare un ListView (non un DataGrid) a una matrice (Cross-Tab) DataSet in cui le colonne sono sconosciuti in precedenza?

Utilizzando il database Northwind come esempio: il semplice query di seguito restituirà un set di dati noto che può essere facilmente associato a una 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

Per generare un rapporto più significativo, potremmo correre il set di risultati della query precedente (in un programma di segnalazione) per generare qualche cosa come di seguito illustrato di seguito:

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]

che si traduce in qualcosa di simile a questo:

alt text

La mia domanda è, è possibile associare questo risultato finale per un controllo ListView o un FlowDocument in WPF senza avere una conoscenza preventiva delle colonne risultanti?

È stato utile?

Soluzione

È possibile aggiungere colonne dinamicamente a un controllo ListView utilizzando proprietà associate. Dai un'occhiata a questo articolo sul CodeProject spiega esattamente che ...

WPF DynamicListView - Associazione a un DataMatrix

Altri suggerimenti

È possibile generare i GridViewColumns per la ListView programatically e applicare il legame a questo. Loop attraverso le colonne del DataSet e aggiungere una corrispondente GridViewColumn nella 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)});
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top