2010-05-26 21 views
7

Quiero hacer un informe de cristal en mi aplicación C# windows, el punto es que quiero usar objetos .net como fuente de datos de informe, encontré su código de ejemplo como el siguiente en internet y uso ellos y trabaja muy bien:Establecer varios objetos como fuente de datos de un informe de cristal

 ArrayList Mainlst = new ArrayList(); 
     Mainlst.Add(new testOBJ { Firstname = "test1", Lastname = "test11" }); 
     Mainlst.Add(new testOBJ { Firstname = "test2", Lastname = "test21" }); 
     Mainlst.Add(new testOBJ { Firstname = "test3", Lastname = "test31" }); 
     Mainlst.Add(new testOBJ { Firstname = "test4", Lastname = "test41" }); 
     Mainlst.Add(new testOBJ { Firstname = "test5", Lastname = "test51" }); 
     testCrystalReport rpt = new testCrystalReport(); 
     rpt.SetDataSource(Mainlst); 
     crystalReportViewer1.ReportSource = rpt; 

pero quiero enviar un objeto extra por ejemplo, información de la escuela por esta información repetida, pero no pueden enviar este objeto adicional, ¿hay alguna solución que puedo enviar varios objetos a el informe de cristal? Por supuesto, sé que puedo usar múltiples tablas de datos y conjunto de datos para un origen de datos de informes de cristal, pero aquí solo quiero usar objetos e IEnumerables como fuentes de datos de un informe de Crystal.

Respuesta

0

Cuando hace esto en modo de diseño, le dice que no es compatible.

Tal vez con una referencia externa entre las fuentes de datos ...

21

si tiene muchos fuente de datos tales como 1.EmployeeClass 2.EmpployeeSkillClass

hacer lo siguiente:

 List<EmployeeClass> employeeList = new List<EmployeeClass>(); 
     employeeList.Add(new EmployeeClass() { EmpNo = "001", EmpName = "Supitchaya" }); 

     List<EmpployeeSkillClass> employeeSkillList = new List<EmpployeeSkillClass>(); 
     detList.Add(new EmpployeeSkillClass() { EmpNo = "001", Skill="C#" }); 
     detList.Add(new EmpployeeSkillClass() { EmpNo = "001", Skill="Java" }); 

// Crear instante de ReportDocument:

 ReportDocument report = new RptEmployee(); //Crsytal report file 

// Establecer origen de datos para cada tabla. asegúrese de que el índice de cada tabla se recogen

// (se ejecutan en modo de depuración para encontrar que las tablas [0] mapa con Empleado tipo o EmployeeSkill)

 report.Database.Tables[0].SetDataSource(employeeList); 
     report.Database.Tables[1].SetDataSource(employeeSkillList); 

     crystalReportViewer1.ReportSource = report; 

// Finalizar !!

+0

Quería saber si tiene una idea de por qué mi informe está vacío – Enzero

+2

muchas gracias, me salvó la vida :)) – ertan2002

+0

@Enzero Acabo de ver su pregunta. Creo que puedes tener la respuesta. Lo siento por la respuesta tardía – Supitchaya

Cuestiones relacionadas