Ho sempre ritenuto CR un buon prodotto di reportistica, anche se la sua velocità e le sue performance, ancora oggi sono molto discutibili.

In un piccolo lavoro, mi è stato richiesto di poter visualizzare o meno alcuni records, presenti nel report. Da qui ho pensato di costruire un campo parametro che a sua volta sia un array di valori. In questo modo, per ogni articolo carico il suo codice e di conseguenza la sua visibilità.

La stringa da passare al parametro di CR ha un formato del genere: codice|boolean. Di seguito il codice C# per passare questo parametro come DiscreeteValues:

//Parameter Field *ORDER*
ParameterField codesfld = new ParameterField();
codesfld.Name = "Date_Callback";
for (int x = 0; x < this.Products.Count; x++)
{
   ParameterDiscreteValue codes = new ParameterDiscreteValue();
   codes.Value = "" 
   + ((Ordine)this.Products[x]).Code 
   + "|" 
   + ((Ordine)this.Products[x]).Callback;
   codesfld.CurrentValues.Add(codes);
}

Adesso bisogna creare in CR una field di tipo formula, poichè la field di tipo parametro ci serve per inglobare questi valori. Nella field di tipo formula basterà inserire un codice che ad ogni Row del report controlla determinati valori. A questo punto ho poi impostato la proprietà  Suppress  delle varie field, in base al valore presente nel campo Parametro ...

WhilePrintingRecords;
Global StringVar Array CallBack := {?Date_Callback};
Local NumberVar i;
Local NumberVar x;
Global StringVar dat := "";
// La funzione UBound restituisce le dimensioni dell'argomento
//della matrice
For i := 1 to UBound (CallBack) Do
(   
    If Split(CallBack[i],"|")[1] = {POITEM.ITNBR} Then
    (
        dat := Split(CallBack[i],"|")[2];
        Exit For
    )
);
dat