如果只显示单个表的结果,它可以正常工作。
SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name FROM Student", ceConnection);
SqlCeDataAdapter adapter = new SqlCeDataAdapter(command);
DataSet set = new DataSet();
adapter.Fill(set, "Student");
ReportDocument document = new ReportDocument();
document.Load(@"C:\Users\user\documents\visual studio 2012\Projects\Student_Scholarship_management2\Student_Scholarship_management2\MainReport.rpt");
document.SetDataSource(set.Tables[0]);
crystalReportViewer1.ReportSource = document;
现在上面的代码工作正常,因为它只引用了一个表,但是如果我使用下面的查询来访问多个表中的记录
SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name,Campus.C_ID FROM Student INNER JOIN Campus ON Student.Campus_ID=Campus.C_ID", ceConnection);
仅显示来自学生表的那些列。我尝试通过数据库专家导入和链接更多表,但没有用。我已经验证了查询,并且结果很好,只是没有在水晶报告中显示。
我已在数据库专家中添加了该表,并在报表设计器中添加了相关列。不幸的是它只显示一个表中的数据。可能导致这种情况的原因是什么?
答案 0 :(得分:1)
我会看一下你的set命令:
document.SetDataSource(set.Tables[0]);
对我来说,似乎只设置了DataSet中的第一个表。
我在我正在处理的应用程序中有类似的情况,这是我的代码(传递大约10个表):
var data = new DataSet();
//Do stuff to populate the dataset
report.SetDataSource(data);
最后一行将报表的数据源设置为DataSet中的所有表。
答案 1 :(得分:0)
致电时:
adapter.Fill(set, "Student");
在那一刻,构建了数据集中的表模式。因此,如果您在下面填写其他列,则只会考虑第一次填充的列。您的解决方案是替换:
SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name FROM Student", ceConnection);
与
SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name, null as C_ID FROM Student", ceConnection);