Errore: caricamento report non riuscito

martedì 30 agosto 2011 - 18.15
Tag Elenco Tags  VB.NET  |  .NET 1.0  |  .NET 1.1  |  .NET 2.0  |  .NET 3.0  |  .NET 3.5  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010  |  SQL Server 2008 R2  |  Crystal Reports 8.5  |  Crystal Reports 10.0  |  Crystal Reports XI  |  Crystal Reports 2008

victordotnet Profilo | Newbie

Salve ragazzi son imballato su questa form da un giorno e visto che non riesco a risolvere il tutto spero mi possiate dare una mano nel più breve tempo possibile.
In pratica ho una form chiamata cassa dove inserisco i dati in un datagrid e una volta salvati li devo stampare.Mi sono creato un modulo crystal report con la procedura guidata e ho posizionato con un tabcontrol il componente crystal report e selezionato il report che mi sono costruito. ho seguito una guida trovata in questo forum ma mi da sempre un errore, quello descritto nell'oggetto. Come posso risolvere? Vi posto un pò di codice sperando di essere stato chiaro. in attesa un saluto a tutti....vic
--------------------------------------
If MsgBox("Vuoi stampare la ricevuta?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
'lancia procedura stampa pasando l'id del record
'procedure chiamata report()
ReportRicevuta()

End If
Private Sub ReportRicevuta()
Dim table As New DataTable
Dim idcassa As Integer = 0
Dim irigaricevuta As Integer = 0
Dim tbCurrent As CrystalDecisions.CrystalReports.Engine.Table
Dim tliCurrent As CrystalDecisions.Shared.TableLogOnInfo

' ricava id della registrazione
irigaricevuta = CassaDataGridView.CurrentRow.Index
idcassa = CassaDataGridView.Item(0, irigaricevuta).Value()

'definisce il nuovo report
ricevuta2 = New ReportDocument()
ricevuta2.Load("../ricevutadicassa.rpt")

' ricava la tabella con i dati da stampare
table = CaricaDatiPerReport(idcassa)
' inserisce nei dati del report la login e passw ecc.. per la connessione
' assegna ad ogni elemento del report come sorgente dati la tabella ricavata
For Each tbCurrent In ricevuta2.Database.Tables
tliCurrent = tbCurrent.LogOnInfo
MsgBox(tliCurrent.TableName, MsgBoxStyle.Information)
' inserisce nei dati del report la login e passw ecc.. per la connesisone
With tliCurrent.ConnectionInfo
.ServerName = MDIParent1.iphostsql
.UserID = MDIParent1.loginsql
.Password = MDIParent1.passwsql
.DatabaseName = MDIParent1.dbname
End With

If Not tbCurrent.TestConnectivity Then
MsgBox("errore di connesione", MsgBoxStyle.Information)
End If
' assegna ad ogni elemnto dle report come sorgente dati la tabella ricavata
tbCurrent.SetDataSource(table)
tbCurrent.ApplyLogOnInfo(tliCurrent)
Next tbCurrent
StampaRpt.CrystalReportViewer1.ReportSource = ricevuta2
StampaRpt.CrystalReportViewer1.RefreshReport()
StampaRpt.Show()
End Sub
Private Function CaricaDatiPerReport(ByVal idcassa As Integer) As DataTable
Dim PERCORSO As String
Dim reader As SqlDataReader
Dim mydatatable As New DataTable 'costruisco una nuova tabella

'dati connessione DB
Dim connection1 As String = MDIParent1.CON1.ToString
Dim SQLCon As New SqlClient.SqlConnection
SQLCon.ConnectionString = connection1
SQLCon.Open()

Dim command As New SqlCommand("select * from cassa where idcassa=" & idcassa & " order by idricevuta", SQLCon) 'seleziono tutte le righe della tabella
reader = command.ExecuteReader() 'leggo tutte le righe della tabella per le quali il codice è quello selezionato

mydatatable.Load(reader) 'copio le righe lette e memorizzate in reader nella nuova tabella

PERCORSO = Application.StartupPath

CaricaDatiPerReport = mydatatable

End Function
__________________________________________________________________

freeteo Profilo | Guru

Ciao e perdona il ritardo nella risposta.
Diciamo che tu imposti troppe cose della table del report , nel senso che imposti sia le LogonInfo che il DataSource direttamente con la tua table, i 2 sono metodi diversi per ottenere lo stesso risultato.

Come prima cosa quindi ti consiglierei, prova ad impostare solo la datatable e togliere il codice relativo alle logoinfo, cambia qualcosa?

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

victordotnet Profilo | Newbie

ok allora dopo un pò ho risolto, in pratica al report dò solo il nome del report cioè ricevuta.rpt e non /ricevuta.rpt. Fatto questo poi quandomi sono costruito il report mi copio e incollo il file .rpt che mi sono creato nella cartella bin debug e il gioco è fatto. Grazie per la risposta. A presto

freeteo Profilo | Guru

>questo poi quandomi sono costruito il report mi copio e incollo
>il file .rpt che mi sono creato nella cartella bin debug e il
>gioco è fatto.
ti basta impostare dentro a visual studio che te lo copi, senza farlo tu a mano:
selezioni il file rpt dentro a visual studio->finestra proprietà->copy to outuput directory->metti "always" e così lui ad ogni compilata ti copia il file dove serve.
ps: se hai una directory nel progetto te la crea, se è nella root te lo mette in corrispondenza dell'exe per intenderci...



>Grazie per la risposta. A presto
di niente, siamo qui per questo.


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