我使用Crystal Report测试了一个应用程序。 我用4个表(主表,项目,解决方案,评估表)创建了1个数据集,这是我的代码
//Master
dsMaster.Tables["master"].ImportRow(dtMaster.Rows[0]);
//Items
DataTable dtItems = getItems(_mdReqMaster.id);
if(dtItems.Rows.Count > 0){
foreach(DataRow dr in dtItems.Rows){
dsMaster.Tables["items"].ImportRow(dr);
}
}
//TeamTech
DataTable dtTechnicians = getTechnicians(_mdReqMaster.id);
if (dtTechnicians.Rows.Count > 0)
{
foreach (DataRow dr in dtTechnicians.Rows)
{
dsMaster.Tables["technicians"].ImportRow(dr);
}
}
//Solution
DataTable dtSolution = getSolution(_mdReqMaster.id);
if (dtSolution.Rows.Count > 0)
{
foreach (DataRow dr in dtSolution.Rows)
{
dsMaster.Tables["solutions"].ImportRow(dr);
}
}
//Evaluate
DataTable dtEvaluate = getEvaluate(_mdReqMaster.id);
if (dtEvaluate.Rows.Count > 0)
{
foreach (DataRow dr in dtEvaluate.Rows)
{
dsMaster.Tables["evaluation"].ImportRow(dr);
}
}
添加的数据请看我的图片:
report.Load(Path.Combine(
HostingEnvironment.MapPath("~/Reports/"), "report.rpt"));
//report.Database.Tables[0].SetDataSource(dsMaster.Tables[0]);
//report.Database.Tables[1].SetDataSource(dsMaster.Tables[1]);
report.SetDataSource(dsMaster);
report.Refresh();
Stream stream = report.ExportToStream(ExportFormatType.PortableDocFormat);
MemoryStream streamReader = new MemoryStream();
stream.CopyTo(streamReader);
return streamReader.ToArray();
输出:
我仅从表母版获取数据。当我使用数据库时。 Tables [0] .SetDataSource(dsMaster.Tables [0])我收到登录错误,看起来我需要将登录设置为报表,并且我认为不需要设置该值,因为我使用数据集。有谁可以帮助我吗?非常感谢。
答案 0 :(得分:0)
您不能将SetDataSource设置为表,而只能设置为数据集。.如果打开CrystalReport,可以在DatabaseFields中看到所有的DataTables吗?尝试为所有DataTables定义Crystal Report详细信息部分。.因此,现在您有4个详细信息部分,到第一部分,尝试将DataTable1中的db字段放到DataTable2中的第二个字段中,依此类推。您的数据现在可见了吗? >
答案 1 :(得分:0)
我的问题是我,我在子报表中使用了另一个表,那么我需要将该数据添加到子报表中