Sintesi del Problema:
---------------------------------------------------------------------------------------------------------------------------
Sto cercando di usare una datatable come datasouce per il mio report, ma mi ritorna l'errore:
"system.data.duplicatenameexeption: una colonna denominata 'Item' appartiene già a questa datatable".
Utilizzo Visual Studio 2010 e il relativo SAP Crystal Report.
Dettagli Aggiuntivi:
(in caso vi serva altro codice o altri dettagli chiedete pure)
---------------------------------------------------------------------------------------------------------------------------
Ho creato il mio report con la seguente procedura:
1 - Creato un dataset trascinando la tabella del mio database all'interno della finestra "crea nuovo dataset" di vs2010
2 - Creato un report di crystal tramite wizard passandogli il mio dataset
3 - Creato un form con un report viewer vuoto
Carico i dati nel report con il seguente codice:
Dim report As New ReportDocument
report.Load("rptScheda.rpt")
report.SetDataSource(Schede.ReportSchede.Rows)
crvStampa.ReportSource = report
crvStampa.RefreshReport()
N.B. Report Schede è semplicemente una funzione che, eseguita una stored procedure nel db, ritorna una datatable.
_________________________________________________________________________________________________________
SOLUZIONE:
----------------------------------------------------------------------------------------
Ok, sono riusciuto a trovare una soluzione. I dati al report li passo con il corretto DataSet:
Dim report As New ReportDocument
report.Load("rptScheda.rpt")
Dim dt As DataTable = Schede.ReportSchede
Dim tabella As New Camiceria.CamiceriaDataSet
For Each riga As DataRow In dt.Rows
tabella.Scheda.ImportRow(riga)
Next
report.SetDataSource(tabella)
crvStampa.ReportSource = report
crvStampa.RefreshReport()
Ottenendo un errore runtime a proposito del "crdb_adoplus.dll"
A questo punto grazie ad un articolo letto navigando un po in internet ho aggiunto le seguenti linee di codice al file config della mia applicazione:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
Ora tutto funziona a dovere.