Ciao,
potresti caricarti tramite codice il file xml e poi passargli quello con il metodo "SetDataSource" dell'oggetto report.
Infatti il report quando lo visualizzi non ha per forza bisogno di una "connessione", puoi ad esempio passargli tu i dati che vuoi, che possono provenire da qualsiasi sorgente (anche creati in memoria da codice) e il report visualizza quelli, ignorando le impostazioni che hai usato nel disegnarlo.
L'unica cosa fondamentale è che abbiano la stessa struttura, quindi nome colonne, tipo e ordine di queste.
Adesso non so cosa tu abbia usato per creare quel file Xml, io solitamente uso la serializzazione|deserializzazione di oggetti definiti per la mia applicazione tramite XmlSerializer, quindi nel mio caso il codice sarebbe qualcosa di questo tipo:
...
public class Utente
{
public string Nome { get; set; }
public string Cognome { get; set; }
public int Eta { get; set; }
public DateTime DataRegistrazione { get; set; }
}
...
private void Form_Load(object sender, EventArgs e)
{
List<Utente> lista = new List<Utente>();
using (FileStream stream = File.Open("c:\..\utenti.xml", FileMode.OpenOrCreate))
{
XmlSerializer ser = new XmlSerializer(typeof(List<Utente>));
lista = ser.Deserialize(stream) as List<Utente>;
}
ReportDocument report = new ReportDocument();
report.Load(@"c:\...\reportXML.rpt");
report.SetDataSource(lista);
crystalReportViewer1.ReportSource = report;
}
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo