Ciao,
mi pare di capire che i tuoi 3 messaggi siano legati, quindi ti propongo una riflessione a livello concettuale:
io non mi preoccuperei tanto di poter convertire i dati xml che hai come sorgente con crystal ma piuttosto cambierei approccio:
Il report di per sè è un ripetitore di dati, basati su una struttura nota. Non importa la sorgente dati (che puoi cambiare a codice passandoli tramite la proprietà "datasource") l'importante è che i dati che deve visualizzare abbiano la stessa struttura.
Chiaramente se non gli passi niente il report va in cerca dei dati da solo, usando le impostazioni che hai usato per disegnarlo, ma tipicamente a runtime nei computer dell'utente finale, non sono mai le stesse che hai usato durante lo sviluppo.
Quindi puoi costruire un report basato su un database temporaneo, con i campi di formato da te definito, con il quale disegni e testi il report.Quando è ok il report, lo integri nella tua applicazione con un codice dove lo carichi e gli passi i dati per poi visualizzarlo in una maschera,ma i dati che gli passi possono essere elaborati a runtime, quindi ad esempio letti da xml, ma convertiti nei tipi corretti, e poi aggiunti come righe di una datatable.
Come sempre ricorda il nome e il tipo di dati (colonne della DataTable "tabella") devono essere gli stessi con cui l'hai costruito, il fatto che siano letti da xml, generati da codice, da mysql, oracle, file csv etc...non ha importanza...usi una datatable e poi gli passi i dati al report prima di visualizzarlo:
Dim tabella as new DataTable()
...riempi i dati nella tabella...
Dim mioreport as new ReportDocument()
mioreport.Load("c:\...\mioreport.rpt")
mioreport.SetDataSource (tabella)
CrystalReportViewer1.ReportSource = mioreport
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo