2010-05-26 13 views
7

Voglio fare un report di cristallo nella mia applicazione di windows C#, il punto è che voglio utilizzare .net oggetti come origine dati del report, ho trovato il suo codice di esempio come di seguito in Internet e utilizzare li e funziona benissimo:Imposta più oggetti come origine dati di un report di cristallo

 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; 

ma voglio inviare oggetto extra per informazioni ad esempio la scuola per queste informazioni ripetute, ma non posso inviare questo oggetto in più, c'è qualche soluzione che posso inviare più oggetti da il rapporto di cristallo? Naturalmente so che posso usare più datatable e dataset per un datasource di report Crystal ma qui voglio solo utilizzare oggetti e IEnumerables come origine dati di un report di cristallo.

risposta

0

Quando si esegue questa operazione in modalità progettazione, indica che non è supportato.

Magari con un Xrif tra origini dati ...

21

se si dispone di molti origine dati come 1.EmployeeClass 2.EmpployeeSkillClass

procedere come segue:

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

// Create istante di ReportDocument:

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

// Imposta l'origine dati su ciascuna tabella. assicurarsi che l'indice di ogni tavolo è raccogliere

// (eseguito su modalità di debug per scoprire che le tabelle [0] Mappa tipo Dipendente o EmployeeSkill)

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

     crystalReportViewer1.ReportSource = report; 

// Fine !!

+0

Volevo sapere se hai un'idea del motivo per cui il mio rapporto sta arrivando vuoto – Enzero

+2

grazie mille, mi hai salvato la vita :)) – ertan2002

+0

@Enzero Ho appena visto la tua domanda. Penso che tu possa avere la risposta. Perdonami per aver risposto tardi – Supitchaya

Problemi correlati