2013-06-20 9 views
5

Utilizzando Crystal Reports, mi legano un report principalecon anno, carta, soggetto e in un rapporto sub mostro libri relativi a quel anno e carta.tutti i sub Crystal Report si legano con gli stessi dati

Il mio problema è che nel rapporto secondario, sto vedendo gli stessi dati per ogni carta. Io uso questa tabella di dati in un set di dati.

Sto utilizzando il seguente codice:

string query = "Select subjectname ,subjectnamehindi,year, Paper , bookID From paper where unistrID='" + uniid + "' order by year,Optional,paper"; 
cmd = new SqlCommand(query, con); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataSet dsp = new DataSet(); 

da.Fill(dsp, "Main"); 
if (dsp.Tables[0].Rows.Count>0) 
{ 
    rpt.Load(Server.MapPath("Crys.rpt")); 
    rpt.SetDataSource(dsp.Tables[0]); 

    //Get sub report and assign datatable1 to that report 
    foreach (ReportObject repOp in rpt.ReportDefinition.ReportObjects) 
    { 
     if (repOp.Kind == ReportObjectKind.SubreportObject) 
     { 
      string SubRepName = ((SubreportObject)repOp).SubreportName; 
      ReportDocument subRepDoc = rpt.Subreports[SubRepName]; 
      i = 0; 
      c = dsp.Tables[0].Rows.Count; 
      DataSet dsp1 = new DataSet(); 
      while (c > 0) 
      { 
       string bookid = dsp.Tables[0].Rows[i]["bookID"].ToString(); 

       query = "SELECT BookCode, dbo.PaperBook.SalePrice, BookName, DisplayAuthorName FROM dbo.MasterTitle INNER JOIN dbo.PaperBook ON dbo.MasterTitle.BookCode = dbo.PaperBook.BookCode where bookID='" + bookid + "'"; 
       cmd = new SqlCommand(query, con); 
       da = new SqlDataAdapter(cmd); 

       da.Fill(dsp1, "Sub"); 
       subRepDoc.SetDataSource(dsp1.Tables[0]); 
       c = c - 1; 
       i = i + 1;     
      }    
     } 
    } 

    CrystalReportViewer1.ReportSource = rpt; 
    CrystalReportViewer1.DataBind(); 
    // Assign report to the crystal report viewer  
} 

Come posso ottenere il sottoreport per visualizzare i dati corretti per ogni carta?

+0

Puoi includere una parte dei risultati nella tua domanda? –

+0

Non so per certo, ma il tuo rapporto potrebbe generare un prodotto cartesiano tra 'year' e' paper'. –

risposta

0

2 cose da provare:

1) Cancellare le origini dati esistenti prima di impostare l'origine dati sottoreport:

subRepDoc.DataSourceConnections.Clear(); 

2) Utilizzare un nome univoco per le tabelle set di dati:

da.Fill(dsp1, "UNIQUENAME"); 
0

Assicurati di filtrare il tuo rapporto secondario in base all'anno e alla carta, e lega nuovamente le tabelle come ti piacciono nel rapporto secondario.

Problemi correlati