在剃刀应用程序中查看水晶报表中的对象列表

时间:2013-10-27 11:07:11

标签: c# asp.net asp.net-mvc asp.net-mvc-4 crystal-reports

我有一个带Razor的asp.net mvc4应用程序,其中我想添加一个报告Crystal Reports。所以我创建了一个文件夹AspxPages,我添加了一个Aspx视图。此外,我在我的模型中有一个类结果,我想像这样查看List<Result>

List<Element> elem_list = notre_chef.Get_ListElement_By_Project(id_project);
List<Result> model = new List<Result>();
foreach (Element e in elem_list) 
{ 
   Result _r = new Result(e.Id_element);
   model.Add(_r);
}
string strReportName;
string rapportName;

strReportName = "Current.rpt";
rapportName = "Resultat Actuel du test";

ReportDocument rd = new ReportDocument();
// the Rapport path "Rpts/strReportName"

string strRptPath = 
    System.Web.HttpContext.Current.Server.MapPath("~/") + "Rpts//" 
        + strReportName;

rd.Load(strRptPath);
foreach (Result res in model)
{
    rd.SetParameterValue("category", res.Catégorie);
    rd.SetParameterValue("sf", res.Sous_fonctionnalité);
    rd.SetParameterValue("concept", res.Concept);
    rd.SetParameterValue("expert", res.Expert);
    rd.SetParameterValue("property", res.Propriétés);
    rd.SetParameterValue("f", res.Fonction);
    rd.SetParameterValue("avis", res.Avis);
    rd.SetParameterValue("justification", res.Justification);
    if (final == 0)
    {
       rd.SetParameterValue("titre", "Resultat actuel du test");
    }
    else
    {
        rd.SetParameterValue("titre", "Resultat final du test");
    }
}
rd.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
    System.Web.HttpContext.Current.Response, false, rapportName);

return RedirectToAction("Display_Chef_Attempt", new{id_project = id_project});

在报告中,我添加了必填字段。我的问题是,报告中只显示列表中的最后一个对象Result而不是不同页面中的所有列表。

那么问题是什么?我该如何解决?

1 个答案:

答案 0 :(得分:1)

像碰撞一样,你试图用数据填充你的参数,当然报告只会使用最后一条记录。

您要查找的是设置报表文档的数据源,应该是这样的:

rd.SetDataSource(model);

在这里,您可以获得如何将通用集合传递给crystal的完整示例。 Crystal Report with generic Collection,本文应该对您有帮助。