【发布时间】:2020-09-04 21:17:25
【问题描述】:
我是 Crystal Reports 的新手,并试图维护其他人的代码 - 请耐心等待。我有一个水晶报表,它与具有 2 个相关 DataTables 的 DataSet 相关联。
我按JurorProfile.JurorPK 分组。在我的组标题中,我显示了来自 JurorProfile 数据表的信息。
在报告详细信息中,我有 RowNumber、JurorQuestionAnswers.Question 和 JurorQuestionAnswers.Answer。
在我的 c# 代码中,我正在像这样填充数据:
public void SetDataSource(AdoProvider provider, int sessionPK, int jurorPK)
{
string commandText;
AdoQuery query;
commandText = $@"select j.* from Juror j
where j.JurorPK in (select JurorFK from SessionJurorLink where SessionFK = @sessionId)
{(jurorPK > 0 ? " and jurorPK = @jurorId" ? "")}
";
query = provider.CreateQuery(commandText, null
, provider.CreateParameter("sessionId", DbType.Int32)
, provider.CreateParameter("jurorId", DbType.Int32)
);
AdoReader jReader = query.ExecuteReader(sessionPK, jurorPK);
report.Database.Tables["JurorProfile"]
.SetDataSource((IDataReader)jReader.DataReader);
commandText = $@"select ... from JurorAnswers ...
where sessionFK = @sessionId
{(jurorPK > 0 ? " and jurorFK = @jurorId " : "")}
order by JurorFK, Rank, ParentFK, QuestionPK
";
query = provider.CreateQuery(commandText, null
, provider.CreateParameter("sessionId", DbType.Int32)
, provider.CreateParameter("jurorId", DbType.Int32)
);
AdoReader qaReader = query.ExecuteReader(sessionPK, jurorPK);
report.Database.Tables["JurorQuestionAnswers"]
.SetDataSource((IDataReader)qaReader.DataReader);
}
但是,当我的报告运行时,会显示组标题,并且我会为每个问题打印一个记录号,但不会显示问题和答案。
看起来,Crystal Reports 没有将我的第二个查询的数据结果映射到 DataTable。
更奇怪的是JurorQuestionAnswers DataTable 目前有一个多余的姓和名字段。如果我在详细信息区域中包含这些字段(JurorQuestionAnswers.Lastname、JurorQuestionAnswers.Firstname),它们实际上会显示出来——数据已正确映射。
我做错了什么?
更新 - 链接标签的图片
【问题讨论】:
-
如果你查看report.Database的内容,你能看到数据真的存在吗?我注意到您使用了两个不同的名称:JurorAnswers 和 JurorQuestionAnswers,但我认为没关系 - 但您想检查这些名称是否必须相同......第三也是最后,检查您是否在水晶中链接表格,在第二张图片中显示的选项卡“链接”(这不是问题,但以后可能是一个问题)。
-
如果我添加代码来循环读取阅读器的值——是的,数据就在阅读器中。我尝试检查 report.Database 的内容。它肯定显示了两个表以及它们之间的链接,但我无法找到任何一种保存数据的属性——对于任何一个表。
-
尝试使用以下命令检查数据集:dataset.WriteXml(...)
-
只是为了期待一些想法:我正在考虑这些可能性:(1)数据不存在; (2) 数据集中的列名和表名或类型与为rpt定义的不同(你使用XSD文件吗?); (3) 某些东西正在抑制“不可见”字段(您是否使用了抑制公式?)。
-
我还记得一件事:您可以显示您的“数据库专家”的“链接”选项卡吗?当您使用“预览”功能时会发生什么?
标签: c# crystal-reports