2010-03-31 18 views
10

Estoy intentando hacer referencia a un subobjeto en una expresión de campo en un informe de studio 2010. Esto solía funcionar en versiones anteriores. Cuando la cuenta hace referencia a otro objeto con propiedades, lo siguiente solía funcionar.objetos secundarios en rdlc (Studio 2010RC)

=Fields!Account.Value.Name 

(Nombre es una propiedad del objeto secundario, la Cuenta es el objeto padre)

La misma sintaxis de expresión ya no funciona. ¿Cómo me refiero a las propiedades de un sub-objeto en servicios de la información en un rdlc en el estudio de 2010.

Gracias

+1

Me encuentro con lo mismo. No entiendo por qué quitaron esta funcionalidad, ¡muy molesto! – AKoran

+1

Aparentemente se arreglará en VS 2010 SP1, siempre que sus clases sean públicas y serializables. –

Respuesta

5

puedo confirmar que este error se ha solucionado en VS2010 SP1 ... pero hay que marcar todas de la correspondiente clases como Serializable.

puede encontrar un proyecto de ejemplo en este sitio que muestra una versión de trabajo: http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html

El autor también menciona que sus clases se necesita un constructor sin parámetros, pero he conseguido que funcione el uso de clases sin un constructor por defecto . Aún así, si ha marcado todo como serializable y sigue viendo el mensaje "#Error", pruébelo con constructores sin parámetros.

1

Probablemente esta no sea una respuesta adecuada, pero cuando siento la falta de material sobre este tema, anímeme a publicar mis hallazgos.

Digamos que si tengo una lista anidada de objetos secundarios dentro del objeto principal. Esta es una situación muy común, por ejemplo, si tiene un objeto de pedido (principal), es probable que tenga una lista de elementos de pedido (hijos), ¿cómo muestra toda la información con el rdlc? Hay dos formas, 1 usando subinforme, y 2 es usar agrupamiento. Me doy cuenta de que ambos pueden lograr lo mismo, que muestra una lista de detalles en un informe.

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;} 
} 

La manera más fácil es utilizar la agrupación. Con la agrupación, debe crear un nuevo tipo de datos que contenga las propiedades de los elementos principal e secundario. Creo que de esta manera también funciona con la lista anidada de objetos de varios niveles. Puede sonar estúpido, pero la mayoría de las veces usted tiene que crear un nuevo tipo de datos de todos modos porque los tipos que hay que visualizar en el informe son diferentes de los objetos de negocio:

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

Luego, en el rdlc, sólo hay para crear un grupo de filas principal y un grupo de filas secundarias, Parent debe estar agrupado por OrderID, el grupo de filas secundario debe configurarse como "mostrar detalles". Creo que puede hacer esto varias veces para lograr una lista anidada de objetos de varios niveles.

Cuestiones relacionadas