2013-06-20 11 views
5

Korzystanie Crystal Reports, wiążę się raportu głównego z roku, papieru, z zastrzeżeniem w raporcie sub pokażę książek związanych z tym roku i papieru.Wszystko Sub kryształ Zgłoś wiążą się z tymi samymi danymi

Mój problem polega na tym, że w raporcie podrzędnym widzę te same dane dla każdego papieru. Używam tej tabeli danych w jednym zbiorze danych.

używam następujący kod:

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  
} 

Jak mogę uzyskać Podraport wyświetlać poprawne dane dla każdego papieru?

+0

Czy możesz podać część swoich wyników w pytaniu? –

+0

Nie wiem na pewno, ale twój raport może generować produkt kartezjański pomiędzy 'rok' i' papier'. –

Odpowiedz

0

2 miejsca, aby spróbować:

1) Usunąć istniejące źródła danych przed ustawieniem źródła danych Podraport:

subRepDoc.DataSourceConnections.Clear(); 

2) Użyj unikalną nazwę dla tabel zestawu danych:

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

Pamiętaj o odfiltrowaniu sub-raportu według roku i papieru, a następnie ponownie powiązaj tabele z wynikami w podraportach.