5

Crystal Reports を使用して、メイン レポート年、論文、件名にバインドし、サブ レポートにその年と論文に関連する書籍を表示します。

私の問題は、サブレポートで、各論文に同じデータが表示されていることです。このデータ テーブルを 1 つのデータ セットで使用します。

私は次のコードを使用しています:

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      
}

サブレポートに各論文の正しいデータを表示するにはどうすればよいですか?

4

2 に答える 2

0

サブレポートを年と紙で必ずフィルタリングし、サブレポートで好きなようにテーブルを再度バインドしてください。

于 2016-07-20T12:54:35.280 に答える
0

2 試すこと:

1) サブレポートのデータソースを設定する前に、既存のデータソースをクリアします。

subRepDoc.DataSourceConnections.Clear();

2) データセット テーブルに一意の名前を使用します。

da.Fill(dsp1, "UNIQUENAME");
于 2013-07-16T02:33:05.953 に答える