2010-03-31 8 views
10

Sto tentando di fare riferimento a un sottooggetto in un'espressione di campo in un report di Studio 2010. Funzionava in versioni precedenti. Quando l'account fa riferimento a un altro oggetto con proprietà, il seguente usato per funzionare.oggetti figlio in rdlc (Studio 2010RC)

=Fields!Account.Value.Name 

(nome è una proprietà dell'oggetto figlio, Account è l'oggetto padre)

La stessa sintassi delle espressioni non funziona più. Come faccio a riferimento le proprietà di un sub-oggetto in Reporting Services in un rdlc in studio 2010.

Grazie

+1

Sto correndo la stessa cosa. Non capisco perché hanno tolto questa funzionalità, molto fastidioso! – AKoran

+1

Apparentemente verrà risolto in VS 2010 SP1, a condizione che le classi siano pubbliche e serializzabili. –

risposta

5

posso confermare che questo bug è stato risolto in VS2010 SP1 ... ma si deve marcare tutte del relativo classi come serializzabili.

È possibile trovare un progetto di esempio su questo sito che mostra una versione funzionante: http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html

L'autore menziona anche che le vostre classi avranno bisogno di un costruttore senza parametri, ma ho ottenuto di lavorare utilizzando le classi senza un costruttore di default . Tuttavia, se hai marcato tutto come serializzabile e vedi ancora il messaggio "#Error", prova con i costruttori senza parametri.

1

Questa probabilmente non è una risposta appropriata, ma quando ritengo che la mancanza di materiale su questo argomento mi incoraggi a pubblicare le mie scoperte.

Diciamo che se ho un elenco annidato di oggetti figlio all'interno dell'oggetto padre. Questa è una situazione molto comune, ad esempio, se si dispone di un oggetto ordine (genitore), si avrà probabilmente un elenco di elementi dell'ordine (figli), come si visualizzano tutte le informazioni con rdlc? Ci sono due modi, 1 usando il sottoreport e 2 è usare il raggruppamento. Mi rendo conto che entrambi possono ottenere la stessa cosa che sta visualizzando un elenco di dettagli su un rapporto.

public class Order{ 
    public int OrderID {get; set;} 
    public string Descrpition {get; set;} 
    public List<OrderItem> OrderItems {get; set;} 
} 
public class OrderItem{ 
    public int OrderItemID {get; set;} 
    public decimal Price{get; set;} 
} 

Il modo più semplice è utilizzare il raggruppamento. Con il raggruppamento, devi creare un nuovo tipo di dati che contenga le proprietà del genitore e dei figli. Credo che in questo modo funzioni anche con l'elenco nidificato di oggetti a più livelli. Può sembrare stupido, ma il più delle volte è necessario creare un nuovo tipo di dato comunque perché il tipo è necessario visualizzare sulla relazione sono diversi dagli oggetti di business:

public class OrderReport{ 
    public int OrderID {get; set;} 
    public string Description {get; set;} 
    public int OrderItemID {get; set;} 
    public decimal Price {get; set;} 
} 

Poi sulla rdlc, basta per creare un gruppo di righe padre e un gruppo di righe figlio, il genitore deve essere raggruppato per ID ordine, il gruppo di righe figlio deve essere impostato su "mostra dettagli". Penso che puoi farlo più volte per ottenere una lista annidata di oggetti a più livelli.