Impostare dinamicamente la posizione del database dentro al report

sabato 08 gennaio 2011 - 01.47
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Visual Studio 2010  |  Visual Studio 2008  |  Crystal Reports XI

Delfins Profilo | Newbie

Ciao a tutti,

in VB.NET ho una form che mi mostra un report (rubrica.rpt ed esempio) di CrystalReport. Vorrei riuscire ad impostargli dinamicamente la location del database dal quale il rubrica.rpt va a leggere i dati.

Mi spiego. Mettiamo che rubrica.rpt è disegnato in maniera tale da andarsi a prendere i campi cNome e cTelefono della tabella Rubrica del database C:\utente1.mdb.

Io vorrei dinamicamente potergli cambiare la location del database (C:\utente1.mdb) dentro al quale trova la tabella Rubrica (che ovviamente è identica db per db, altrimenti il report darebbe errore, ovvio).

Come posso fare? Dev'esserci un attributo...in VB6 era .Datafiles(0) = "path"

Grazie
Guido Arata
http://www.delfinsblog.it

AndreaKpr Profilo | Senior Member

Ciao.
Una volta che hai caricato il report, l'oggetto ti mette a disposizione l'elenco delle tabelle che sono usate nel report. Devi andare a settare la locazione di ogni tabella.

Ti posto un pezzetto di codice, l'ho scritto al volo devi modificarlo per il tuo contesto.

CrystalDecisions.CrystalReports.Engine.ReportDocument mRpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
mRpt.Load(PathReportName);
Tables mRptTables = mRptDoc.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table mTbl in mRptTables)
mTbl.Location = App.Path & "\TuoDatabase.mdb"


Ri-Ciao.


freeteo Profilo | Guru

Ciao,
è corretto quanto di dice AndreaKpr, se usi mdb devi cambiare la proprietà "Location" per tutte le Tables del report.

Se invece vuoi fare qualcosa di più "formalmente pulito" potresti passare tu i dati al report, dopo che li hai caricati nella tua applicazione tramite una connection ado classica ad esempio.
Questo perchè se devi poi gestire una diversa fonte dati, ad esempio XML o qualcosa di più generico ancora, magari filtrato a runtime in base a qualche logica etc...puoi fare tutto dentro la tua applicazione ed usare il report come "puro" visualizzatore di dati che gli passi, non a conoscenza dell'esatta fonte di questi.
A volte la cosa non è necessaria o può sembrare più "pesante", ma se posso darti un consiglio basato sulla mia esperienza è sempre meglio avere il controllo dell'applicazione piuttosto che demandare operazioni come la connessione al report, che poi ti potresti scontrare con fastidi tipo accessi con password di rete etc...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5