A meno che qualcuno non abbia una soluzione più rapida/semplice, ecco l'approccio che utilizzo per far funzionare i report Crystal con MS Access in Visual Studio 2010. È leggermente più complicato del normale metodo di selezione di un'origine dati, ma offre più controllo, è il database agnostico e funziona dove gli altri metodi a volte falliscono (soprattutto con MS Access nella mia esperienza).
Descriverò in dettaglio il processo per far funzionare i rapporti dall'inizio alla fine (perché l'intero processo potrebbe essere utile ad altri), ma evidenzierò i bit che potrebbero esserti utili.
1) Installare Crystal Reports dal sito SAP. Assicurati di scaricare il file exe, NON quello msi (non funziona):
http://scn.sap.com/docs/DOC-7824
2) Cambia il Framework di destinazione della tua app in .Net Framework 4 (NON client). Il materiale Crystal non è incluso nel profilo di base.
3) Aggiungere un riferimento alle librerie Crystal (Crystal Reports per .NET)
4) Aggiungere un modulo, su quel modulo posizionare un controllo Crystal Report Viewer (dalla sezione Report della Toolbox):
5) Aggiungere un CrystalReportDocument e assegnarlo al controllo CrystalReportViewer:
Per popolare effettivamente il rapporto con i dati, procedi come segue:
1) Genera lo schema del report eseguendo il codice che prende il datatable del report (da un gateway) ed esporta lo schema. Ad esempio:
<TestMethod()>
Public Sub SchemaTest()
Dim dataSet As DataSet = StaticDataGateway.AccountingIncomeTotals
dataSet.WriteXmlSchema("I:\Myschema.xml")
End Sub
Se hai già creato i tuoi rapporti, probabilmente non ne avrai bisogno. Lo stesso se puoi scrivere l'xml a mano (facile una volta che hai un modello su cui lavorare)
2) Quindi lo carichi nel tuo rapporto per ottenere i campi che puoi quindi manipolare per produrre il tuo rapporto. Per fare ciò, fai clic con il pulsante destro del mouse sui campi del database in Report Field Explorer:
3) Da qui seleziona Database Expert e scegli ADO.net (xml). La scelta logica di Access/Excel DAO in realtà non funziona affatto in VS 2010. Seleziona il file dello schema e caricalo, quindi fai doppio clic sulla Tabella1 per popolare la vista Tabelle selezionate:
4) Ora che hai caricato uno schema, sarai in grado di vedere i campi nel menu a discesa dei campi che puoi trascinare e rilasciare sul tuo report:
5) Infine carichi un set di dati nel tuo report eseguendo il codice nell'evento on load del tuo modulo su cui hai posizionato il controllo reportviewer:
i) Assicurati di produrre un set di dati (non datatable) dal tuo gateway (o ovunque):
Public Shared Function AccountingIncomeTotals() As DataSet
Dim dataSet As New DataSet
Dim dataTable As DataTable = Database.GetDataTable(GetCommand(DBC.Reporting.SPs.AccountingIncomeTotals))
dataSet.Tables.Add(dataTable)
Return dataSet
End Function
ii) Quindi assegnalo all'origine dati sul rapporto:
Private Sub AccountingIncomeTotals_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
AccountingIncomeTotalsReport1.SetDataSource(StaticDataGateway.AccountingIncomeTotals)
End Sub
La sezione precedente sarà probabilmente particolarmente interessante per te perché ti consente di assegnare direttamente l'origine dati al rapporto senza dover utilizzare il pannello dell'interfaccia utente di Crystal Select DataSources.
C'è un'altra cosa richiesta, devi aggiungere "useLegacyV2RuntimeActivationPolicy"Al file app.config:
http:/ /www.codeproject.com/Questions/390643/Error-When-use-of-crystal-report-sap-crystal-13-an
Spero di esserti stato d'aiuto, mi dispiace che sia così coinvolto, se hai domande chiedi pure