[VB2005] CrystalReport passaggio di parametri multipli discreti

mercoledì 13 febbraio 2008 - 14.00

hidden Profilo | Newbie

Salve ragazzi sono nuovo di questo forum anche se programmo già da un pò.
Sto sviluppando un piccolo applicativo ma è sorto un problema e volevo chiedervi una mano. Ho un programma contenente un CrystalReportViewer in cui visualizzo un report a cui devo passare dei parametri.
L'unico parametro da passare è nominato Mov però è a volori multipli discreti.

In realtà il programma stampa delle descrizioni di determinati movimenti selezionati dall'utente (senza nessuna regola ben precisa. Cioè l'utente finale ha un elenco dei movimenti seleziona qualli che gli piacciono e il report li stampa).
Il problema è che io devo passare al parametro del report valori multipli e discreti.
Per farlo ho seguito le istruzioni di un 'esercitazione di MSDN posto la soluzione:

Questo il metodo che utilizzo :

Private Sub SetCurrentValuesForParameterField(ByVal MioCampoParametri As ParameterFields, ByVal MyArrayList As ArrayList)
Dim currentParameterValues As ParameterValues = New ParameterValues()
For Each submittedValue As Object In MyArrayList
Dim MyparameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
MyparameterDiscreteValue.Value = submittedValue.ToString()
currentParameterValues.Add(MyparameterDiscreteValue)
Next
Dim myParameterField As ParameterField = MioCampoParametri("Mov")
myParameterField.CurrentValues = currentParameterValues
End Sub

Questo è invece quello che faccio per visualizzare il report

Dim MyArrayList As ArrayList = New ArrayList()
For i As Integer = 0 To KDMov.Rows.Count - 1 Step 1
If KDMov(0, i).Value = True Then
MyArrayList.Add(KDMov(1, i).Value.ToString)
End If
Next
If MyArrayList.Count <= 0 Then

Else
Dim reportPath As String = Application.StartupPath & "\Reports\" & "Tipo2Bolla_trasf_Mat.rpt"
CRV1.ReportSource = reportPath 'Me.Tipo2Bolla_trasf_Mat1
Dim MyParameterFields As ParameterFields = CRV1.ParameterFieldInfo
SetCurrentValuesForParameterField(MyParameterFields, MyArrayList)
End If

La mia perplessità è quella che il programma funziona a volte si a volte no senza una regola ben precisa cioè alcune volte mi visualizza il report correttamente altre volte mi mostra il messaggio

'Caricamento report non riuscito'

ho fatto varie prove è il punto è che a volte funziona altre no. A volte riavviando il programma funziona altre no.

C'è qualche errore nella scrittura del codice che non riesco a visualizzare.

Tengo a precisare che in fase di debug l'errore non mi viene visualizzato in nessun caso. Se avvio il file a parte o lo compilo come libreria e lo chiamo da quanche altro programma allora comincia a fare di "testa sua".
Da cosa può dipendere?
Perchè da debug non mi da errore?

Nella speranza di essermi espresso in modo chiaro nonostante la mole di informazioni vi ringrazio anticipatamente per il vostro aiuto.
Avete qualche idea? sto impazzendo

freeteo Profilo | Guru

ciao,
a mio avviso il report è un visualizzatore "complesso" di dati.
Ma i dati che visualizza glieli passi tu da codice, nel tuo caso, i record che l'utente ha scelto a video.
Io procederei in questo modo:
- creo un report
- nel wizard gli dico di agagnciarsi al database che mi interessa (*)
- se voglio posso dirgli tutta la tabella, oppure un comando ( ad esempio: SELECT nome,cognome FROM etc..)
- disegno il report
- da codice mi carico i dati in una datatable e gliela passo:
ReportDocument report = new ReportDocument(); report.Load("c:\....\file.rpt"); report.SetDataSource(miaDataTable); crystalViewer.ReportSource = report;

il gioco è dfatto, quello che sceglie l'utente viene passato al report sotto forma di record, e visualizzati, senza bisogno di avere parametri o altro...
Questo è l'utilizzo concettualmente piu' corretto del report.


(*) se non hai accesso ad un database, ma lavori in memoria o hai dati che nn ci sono, puoi crearti al volo un db di access con la struttura delle cose che vuoi visualizzare ed attaccarti a quello, tanto dopo da codice gli passerai tu una datatable e quindi il report visualizzera' i dati presenti in essa, dimenticando di essere stato costruito con quel db "temporaneo".
L'importante è solo stare attentiad avere la stessa struttura (oridine,numero e tipo di colonne)


ps: i prossimi problemi di report, anche se su win32, postali sulla stanza apposita del forum (l'ultima in basso) , cosi' teniamo piu' ordinati i threads...



ciao.

Matteo Raumer
[MCAD .net]
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5