CystalReport: come stampo una variabile?

domenica 26 febbraio 2006 - 20.01

max1850 Profilo | Junior Member

Salve.
Utilizzo VB .Net 2003.
Ho creato un report con la procedura guidata di CrystalReport. Ora, mi serve inserire, nello stesso report, anche una variabile stringa tipo "pippo" che varia in funzione a quello che inserisce l'utente. Come la inserisco nel report?
Poi, non riesco a trovare l'opzione per modificare la query sql che la procedura guidata ha utilizzato per creare il report. Dove si trova?

Grazie :)
Max!

freeteo Profilo | Guru

ciao,
per quanto riguarda il passaggio di valori al report puoi usare i campi formula o parametro in fase di costruzione e poi valorizzarli da codice, qualcosa del tipo:

mioReport.DataDefinition.FormulaFields["gruppo"].Text = "mio testo";

per quanto riguarda invece il cambiare la query che hai nella costruzione del report quello non èpossibile, se vuoi filtrare i dati lavora con i campi "RecordSelectionFormula" che puoi modificare da codice ma per la lista dei campi quello non lo puoi fare...

ciao

ps: se puoi posta i problemi relativi a queste cose nella stanza "reportistica", cosi teniamo piu in ordine

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

max1850 Profilo | Junior Member

Ciao. Grazie per la risposta.
In effetti non avevo visto la sezione dedicata ai report...come facciamo a spostare la discussione lì?

Premetto che uso il crystalreport integrato nel vb.net 2003.
Ho fatto qualcosa che mi hai suggerito..ma non ci capisco molto...
Ti riassumo tutto: ho fatto un nuovo progetto in vb con 2 form e 1 report già collegato ad un database access, e funziona tutto perchè ho usato la creazione guidata report
Ora, la prima form ha un bottone che mi apre la seconda. La seconda contiene l'anteprima del report (l'oggetto CrystalReportViewer1) e premendo sull'icona della piccola stampante mi parte la stampa.

Ora, in pratica vorrei fare un report che mi stampa solo 1 record (scelto dall'utente) e non tutta la tabella "fornitori" del mio database.
Per far questo volevo passare il record scelto al report, ma non so se sia la procedura corretta. Si può fare tramite la procedura guidata che ho usato prima?
Come risolvo?

Ciao
Max!

freeteo Profilo | Guru

ciao,
non preoccuparti, lasciamo il post tranquillamente qui ma se ti dovesse ricapitare di aprire post su reportistica sa qual'e' la stanza giusta.

Per quanto riguarda quello che devi fare tu, ovvero stampare 1solo record scelto dall'utente, hai 2 strade:
- passare 1a datatable al report con dentro solo 1a riga
- specificare 1 RecordSelectionFormula che ti filtri per quell'Id preciso

Per la 2a devi anche passare le specifiche impostazioni di connessione al database, in modo che sia il report che va a prendersi i dati e poi tu specifichi il filtro da applicare.
La 1a strada a mio avviso è la migliore inquanto filtri 1a serie di dati tu e te la cavi con meno codice:

Dim mioreport as new ReportdìDocument
mioreport.Load("c:\....\.\...\report.rpt")
mioreport.Database.SetDataSource (miatabella )

dove miatabella l'hai riempita con 1record solo

Prova a darci 1occhiata,ciao



Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

max1850 Profilo | Junior Member

Ciao!
Allora ho risolto così: quando l'utente selezionava il record da stampare lo inserivo in un database temporaneo e stampavo poi quel database che conteneva solo quel record!
Così la cosa è più veloce! ;)))
Grazie dell'aiuto!
Max!

freeteo Profilo | Guru

Quello che fai tu non è 1 buon metodo dal punto di vista del concetto perche appoggiarsi a strutture temporanee finche è in memoria puo' avere 1 senso, avere 1a tabella temporanea (e ancora di piu 1 database temporaneo) dove scrivere dentro 1 record quando puoi fare 1 filtro tu da query o usando le proprieta' del Report assolutamente sbagliato a mio avviso...

ma questo è 1 consiglio,ok che funziona lo stesso, ma ce differenza tra "programmare" e "far funzionare" !!!
ciao

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

max1850 Profilo | Junior Member

Ciao!
Ho notato che ieri ho scritto molto "velocemente".
Ho fatto così: ho creato una tabella nel mio database, la quale contiene solo il record che l'utente seleziona per stamparlo. Quindi il mio database ora conterrà tutte le vecchie tabelle più questa nuova, che ha solo il compito di agevolare la stampa di crystalreport. Così, tramite una query seleziono il record e CrystalReport lo stampa. La query la faccio creare dalla procedura guidata di crystalreport ;)
Che ne pensi?

Ciao

Max!

freeteo Profilo | Guru

ciao,
rimango dell'idea che puoi lavorare con la query da codice o filtrando sul report come ti dicevo prima...
cmq fai come vuoi se a te va bene questa soluzione...anche se io come "programmatore" te la boccerei

ciao

max1850 Profilo | Junior Member

Ciao!
La mia soluzione mi è venuta così, come prima idea, ma non dico che sia quella giusta anche se funziona! ;)
Se dici che è meglio adottare la tua "impostazione" cercherò di farlo! ;)
Però dobbiamo procedere poco per volta, perchè non ho capito molto bene...
Innanzitutto vediamo come passare una semplice variabile stringa dalla form in VB al crystalreport:
1) Apro il report (creato con la procedura guidata di crystalreport)
2) Dal menù a sinistra clicco su "Campi Formula" e uso Nuovo. Do il nome e poi mi si apre l'Editor elle formule. Qui cosa ci metto?
3) Poi, nella form in VB dalla quale devo passare la variabile cosa scrivo?

Scusami se ti chiedo una procedura "dettaglita" ma sono alle prime armi...

Ciao
Max!

freeteo Profilo | Guru

ciao,
allora quello che mi chiedi tu se è generico per avere 1campo con dentro del testo che metti tu da codice allora devi fare cosi':

- crei il campo formula come hai visto e dentro non ci scrivi niente
- da codice ci arrivi:

mioreport.SetDataSource(miatabella)
mioreport.DataDefinition.FormulaFields["miaformula"].Text = "ecco qui il mio testo"

dove mioreport è il nome del report tuo.

Se invece vuoi filtrare i dati che gli passi per 1 campo che hai a codice:
mioreport.DataDefinition.RecordSelectionFormula[0] = "{db.miocampoid} = 123"

oppure gli setti il datasource con 1a tabella che dalla query risulti il record che vuoi tu:
mioreport.SetDataSource(miatabella)


prova in questi modi...ciao

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

max1850 Profilo | Junior Member

Ciao!
Ho provato in tutti i modi ma non va.
Forse è meglio fare un esempio specifico. Non trattiamo i database, ma solamente il semplice passaggio di una stringa!
Allora..procediamo passo-passo:
1) ho creato un campo formula nel mio report.
2) L'ho chiamato "ProvaMax".
3) Poi all'interno non ci ho messo nessuna formula, e tramite trascinaento l'ho piazzato sul mio report (nell'Intestazione Pagina).
4) Piazzandola lì, ora ha il nome "@ProvaMax".

Poi, in una form quasiasi del mio progetto ho scritto:

'Creo una istanza del mio report
Dim rptMax As New CrystalReport1
'Gli passo la stringa da stampare
rptMax.DataDefinition.FormulaFields("ProvaMax").Text = "ecco qui il mio testo"

ma non va. Ho provato anche a metterci le parentesi quadre come hai detto tu e in altri tanti modi ma questo è l'unico che non mi da errori di sintassi. Però quando vedo l'anteprima (tramite un CrystalReportViewer inserito in una form) la variabile non c'è!
Come mai?

Ciao

freeteo Profilo | Guru

ciao,
scusami per la fretta mi sono dimenticato di dirti che devi aggiungerci anche gli apici altrimenti lui si aspetta il nome di 1campo o qualche altra formula, infatti se lo facessi a design time metteresti "mio testo" e poi salvi la formula e lui prende anche i doppiapici...
Ti manca di digli appunto di mettere come testo anche i doppiapici ovvero cosi'

mioreport.DataDefinition.FormulaFields("miaformula").Text = Chr(34) + "ecco qui il mio testo" + Chr(34)

scusami.
Cmq ti ho allegato anche 1 piccolo progettino che fa questo, se vuoi darci 1occhiata io lho creato sotto la dir c:\progetti tmp\ ma tu basta gli cambi il path alla stringa
ciao

ps:le parentesi quadre erano perche avevo scritto il codice al volo e in c#

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

max1850 Profilo | Junior Member

Ciao!
Ti rigrazio molto dell'allegato...mi ha chiarito moltissimi dubbi!
E grazie della disponibilità..finalmente funziona tutto!!!
Ciao

Max!

freeteo Profilo | Guru

ottimo, mi fa piacere...
a presto, ciao

ps: accetta la risposta, cosi' marchiamo il thread come risolto
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5