想要制作水晶报表
首先我们要安装这个插件
安装完成之后,我们新建一个文件夹,然后再到这个文件夹里添加,找到新建项,然后在找到下面这个插件完成添加
然后在到那个文件夹里面找到新建项,找到数据,在添加一个数据集
然后在数据集中添加个 datatable 到datatable里面添加你所需要的数据
然后就可以直接制作水晶报表了
制作好水晶报表模板号就可以到控制器中写方法了,以下是引用老师的方法
public ActionResult PrintAchievment(int AcademeID, int GradeID, int ClassID)
{
#region 数据查询
var TbAchievment = from tbAchievement in myModel.PW_Achievement
group tbAchievement by tbAchievement.UserID into tbStudent
select new
{
UserID = tbStudent.Key,
AchievementID = tbStudent.OrderByDescending(M => M.Achievement).FirstOrDefault().AchievementID,
Achievement = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().Achievement,
EligibleTypeID = tbStudent.OrderByDescending(m => m.Achievement).FirstOrDefault().EligibleTypeID,
ExamNumber = tbStudent.OrderByDescending(m => m.ExamNumber).FirstOrDefault().ExamNumber,
};
var listAchiement = (from tbAchiement in TbAchievment
join tbEligibleType in myModel.SYS_EligibleType on tbAchiement.EligibleTypeID equals tbEligibleType.EligibleTypeID
join tbStudent in myModel.PW_Student on tbAchiement.UserID equals tbStudent.UserID
join tbAcademe in myModel.SYS_Academe on tbStudent.AcademeID equals tbAcademe.AcademeID
join tbGrade in myModel.SYS_Grade on tbStudent.GradeID equals tbGrade.GradeID
join tbClass in myModel.SYS_Class on tbStudent.ClassID equals tbClass.ClassID
select new AchievementInfor
{
StudentName = tbStudent.StudentName,
StudentNumber = tbStudent.StudentNumber,
StudentSex = tbStudent.StudentSex,
ClassName = tbClass.ClassName,
ExamNumber = tbAchiement.ExamNumber,
Achievement = tbAchiement.Achievement,
EligibleTypeName = tbEligibleType.EligibleTypeName,
AcademeID = tbAcademe.AcademeID,
GradeID = tbGrade.GradeID,
ClassID = tbClass.ClassID,
}).ToList();
if (AcademeID > 0)
{
listAchiement = listAchiement.Where(m => m.AcademeID == AcademeID).ToList();
}
if (GradeID > 0)
{
listAchiement = listAchiement.Where(m => m.GradeID == GradeID).ToList();
}
if (ClassID > 0)
{
listAchiement = listAchiement.Where(m => m.ClassID == ClassID).ToList();
}
#endregion
DataTable dt = LINQToDataTable(listAchiement);//将listResult转化为DataTable类型数据
PrintReport.ReportDB myDB = new PrintReport.ReportDB();
myDB.Tables["tbAchievement"].Merge(dt); //将dt的数据放入数据集的数据表中
AchievementReport rp = new AchievementReport(); //实例化报表模板
string strRptPath = System.Web.HttpContext.Current.Server.MapPath("~/")
+ "Areas\\ExaminationManagement\\PrintReport\\AchievementReport.rpt"; //获取报表物理文件地址
rp.Load(strRptPath); //把报表文件加载到ReportDocument
rp.SetDataSource(myDB); //设置报表数据源
//
Stream = rp.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
//把ReportDocument转化为文件流
return File(stream, "application/pdf");
}
首先是查询了我们要打印的数据,然后将listresult转化为datatable类型数据,
然后将dt的数据放入数据集的数据表中,
然后在实例化报表模板,在获取报表的物理路径,把报表加载到reportdocument,
设置数据源,再把ReportDocment转化为文件流。
这样就打印水晶报表就完成了。