C# 在razor应用程序中查看crystal报表中的对象列表

C# 在razor应用程序中查看crystal报表中的对象列表,c#,asp.net,asp.net-mvc,asp.net-mvc-4,crystal-reports,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Crystal Reports,我有一个带Razor的asp.net mvc4应用程序,我想在其中添加一个报告Crystal Reports。因此,我创建了一个文件夹AspxPages,并添加了一个Aspx视图。此外,我的模型中有一个类结果,我想查看一个列表,如下所示: List<Element> elem_list = notre_chef.Get_ListElement_By_Project(id_project); List<Result> model = new List<Result&g

我有一个带Razor的asp.net mvc4应用程序,我想在其中添加一个报告
Crystal Reports
。因此,我创建了一个文件夹AspxPages,并添加了一个
Aspx
视图。此外,我的模型中有一个类结果,我想查看一个
列表,如下所示:

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});
rd.SetDataSource(model);
List elem\u List=notre\u chef.Get\u List element\u By\u Project(id\u Project);
列表模型=新列表();
foreach(元素列表中的元素e)
{ 
结果_r=新结果(e.Id_元素);
模型。添加(\u r);
}
字符串strReportName;
字符串名称;
strReportName=“Current.rpt”;
reportname=“Resultat Actuel du test”;
ReportDocument rd=新的ReportDocument();
//报告路径“Rpts/strReportName”
字符串strRptPath=
System.Web.HttpContext.Current.Server.MapPath(“~/”+“Rpts/”)
+strReportName;
rd.Load(strRptPath);
foreach(模型中的结果)
{
rd.SetParameterValue(“类别”,res.Catégorie);
rd.SetParameterValue(“sf”,res.Sous_fonctionnalité);
rd.SetParameterValue(“概念”,res.concept);
rd.SetParameterValue(“专家”,res.expert);
rd.SetParameterValue(“属性”,res.Propriétés);
rd.SetParameterValue(“f”,res.foction);
rd.SetParameterValue(“avis”,res.avis);
rd.SetParameterValue(“对齐”,res.justification);
如果(最终==0)
{
rd.SetParameterValue(“滴定”,“结果-实际试验”);
}
其他的
{
rd.SetParameterValue(“滴度”、“最终du试验结果”);
}
}
rd.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
System.Web.HttpContext.Current.Response,false,name);
返回RedirectToAction(“Display_Chef_trunt”,new{id_project=id_project});
在报告中,我添加了必填字段。我的问题是,报告中只显示列表中的最后一个对象
结果
,而不是不同页面中的所有列表


那么问题是什么呢?如何修复它?

就像bump Sai一样,您正试图用数据填充参数,当然报告将只使用最后一条记录

您需要的是设置报表文档的数据源,该数据源应如下所示:

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});
rd.SetDataSource(model);

这里有一个完整的示例,介绍如何将通用集合传递给crystal,这篇文章应该会对您有所帮助。

您似乎确实在
模型中为每个值设置了参数,但是由于您在同一对象(
rd
)上设置了参数,因此只有上一次迭代中的值仍然有效。。。(其他的会被覆盖)。@bump我怎样才能修复它,我是报告新手