Sono diversi anni che lavoro con CrystalReport e credo non lo abbandonero' mai. Insomma se si impara ad usarlo correttamente, si possono produrre anche report efficienti in breve tempo.

Stranamente oggi sto sbattendo la testa su un problema basilare e decisamente stupido, del quale pero' ne sono venuto a capo e voglio rendervi partecipi. Allora, per prima cosa dobbiamo parlare di questi DiscreteParameters. In pratica CR ci consente di creare dei controlli nel nostro report che riceveranno uno o piu' valori a run-time, ma non dal DBMS a cui è collegato, ma dal codice ...

Il mio problema oggi era che nonostante io inviassi questo valore al report, lui comunque a run-time mi chiedeva tramite InputBox, un valore per questo campo ... Insolito no?

Ho sperimentato questa soluzione trovata sul forum Microsoft a questo indirizzo Soluzione e sembra funzionare egregiamente:

//Creo un valore
ParameterDiscreteValue val = new ParameterDiscreteValue();
val.Value = "Utente di test.";
//Replico la field presente nel report
ParameterField fld = new ParameterField();
fld.Name = "ID_User";
fld.CurrentValues.Add(val);
fld.HasCurrentValue = true;

A questo punto ho bisogno di un oggetto reportDocument al quale passare questa nuova Field, ma siccome esiste già nel report originario, la cancello e la reinserisco:

//Carico il report DOCUMENT
this.crystalReportViewer1.ReportSource = rpt;                
//Pulisco le Field create in Design
this.crystalReportViewer1.ParameterFieldInfo.Clear();
//Assegno quelle create a Run-time
this.crystalReportViewer1.ParameterFieldInfo.Add(fld);
this.crystalReportViewer1.Show();