>Salve a tutti.
>Sto lavorando ad un report che carica un'XML come base dati.
ok, presumo sia un report Crystal, e ti rispondo per quello, eventualmente correggimi se parli di SqlReporting
>Quello che dovrei riuscire a fare, è la gestione condizionale
>di un parametro contenuto in un tag.
>Mi spiego meglio: se quel parametro è "C" deve stampare una frase;
>se il parametro è uguale ad "N", deve stamparne un'altra, e in
>tutti gli altri casi, compreso il fatto che un tag può anche
>non contenere nulla, stampa, o meglio non dovrebbe stampare niente.
>Tutto questo, se è possibile, dovrebbe essere stampato all'interno
>di un box di testo, e quindi gestito dinamicamente, nel senso
>che non debbono essere prodotte righe bianche nel terzo caso
>prospettato.
per queste cose devi affidarti ad un campo formula, dove discrimini quello da stampare in base al valore del campo di quel record.
Ad esempio:
- fai una nuova formula (nella tab "document outline" dove ci sono i campi, c'è il nodo "formula" ->tastoDX)
- scrivi dentro:
select {campo}
case 'C' : 'stringa 1'
case 'D' : 'frase seconda'
default: 'altro...'
>A rendere le cose ancora più difficile, mi è stato richiesto
>di caricare tali frasi da file di testo, un file per ogni frase
>da poter cambiare in qualsiasi momento senza toccare minimamente
>il report, che quindi andrebbe caricato (il testo) e stampato.
>Non so neanche se la cosa sia fattibile... sto veramente in alto
>mare.
questo effettivamente complica le cose, perchè devi fare questo caricamento delle descrizioni da codice, e passarle al report, magari proprio nella formula che ti ho consigliato prima...una cosa di questo genere:
//--- leggi le stringhe dal file
string[] stringhe = File.ReadAllLines("...");
//--- carichi il report
ReportDocument report = new ReportDocument();
report.Load(@"c:\...\mioReport.rpt");
//--- gli passi i dati
report.SetDataSource(...);
//--- costrusci la stessa formula di prima
//--- scrivendo dentro però il testo che hai letto dal file
report.DataDefinition.FormulaFields["miaFormula"].Text = "select {campo} " +
case 'C' : ' " + stringhe[0] + " ' "
case 'D' : ' " + stringhe[1] + " ' "
default: 'altro...' ";
CrystalReportViewer1.ReportSource = report;
così la formula farà la sua discriminazione del valore da stampare non più fisso da "editor delle formule" di Crystal, ma basato su quello che gli hai detto tu, creando la formula a runtime sostanzialmente...
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo