水晶报表主从表问题

wcfboy1 2010-12-21 10:33:22
我用的dataset.xsd作为数据源
报销设计用到主从表 出库和出库明细 浏览时候报
登录失败。详细资料: crdb_adoplus : 未将对象引用设置到对象的实例。文件 C:\DOCUME~1\wang\LOCALS~1\Temp\UplowReport {518B3CFD-9F92-490A-8950-3E2B6FAF111E}.rpt

但是我把自表数据源和报表字段全部删掉 只留主表就没问题

我后台代码如下

string uplowid = "55";

string sql = string.Format(@"SELECT SerialID, BillId, DepotClass, CreateTime,CheckTime,TotalNum, TotalWeight, Memo, CreatePerson, CheckPerson, State, YSerialID, Flag FROM tblUpLow where serialid={0};", uplowid);
string sql1= string.Format(@"SELECT tblUPLowDetail.DetailID, tblUPLowDetail.MainID, tblUPLowDetail.ProductID,
tblUPLowDetail.LocationID, tblUPLowDetail.Num, tblUPLowDetail.Level,
tblUPLowDetail.Batch, tblUPLowDetail.Weight, tblUPLowDetail.LocationCode,
tblUPLowDetail.DepotID, tblDLocation.LocationName, tblDepot.DepotName,
tblProduct.ProductCode, tblProduct.ProductName
FROM tblUPLowDetail INNER JOIN
tblProduct ON tblUPLowDetail.ProductID = tblProduct.ProductId INNER JOIN
tblDepot ON tblUPLowDetail.DepotID = tblDepot.DepotID INNER JOIN
tblDLocation ON tblUPLowDetail.LocationID = tblDLocation.LocationID where mainid={0};", uplowid);

DataTable dt = ACO.DBUtility.DbHelperSQL.ExecuteDataTable(sql, "tblUpLow");
DataTable dt1 = ACO.DBUtility.DbHelperSQL.ExecuteDataTable(sql1, "tblUpLowDetail");
CrystalReportSource1.ReportDocument.Load(Server.MapPath("~/cryreport/UplowReport.rpt"));
CrystalReportSource1.ReportDocument.SetDataSource(dt);
CrystalReportSource1.ReportDocument.SetDataSource(dt1);
CrystalReportSource1.DataBind();
CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportViewer1.DataBind();


请问是怎么回事
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcfboy1 2010-12-27
  • 打赏
  • 举报
回复
谢谢上面两位,问题解决
东莞寻香苑 2010-12-21
  • 打赏
  • 举报
回复
不好意思,我在上贴做的和你一样了.
设你的水晶报表中存在这两个表tblUpLow,tblUpLowDetail

DataTable dt = ACO.DBUtility.DbHelperSQL.ExecuteDataTable(sql, "tblUpLow");
DataTable dt1 = ACO.DBUtility.DbHelperSQL.ExecuteDataTable(sql1, "tblUpLowDetail");
ReportDocument oCR = new ReportDocument();
oCR.Load(Server.MapPath("~/cryreport/UplowReport.rpt"));
oCR.Database.Tables["tblUpLow"].SetDataSource(dt);
oCR.Database.Tables["tblUpLowDetail"].SetDataSource(dt1);
CrystalReportViewer1.ReportSource = oCR;


当DataSet中有多个表时(或有子报表时),尽可能用这种方式赋值:http://blog.csdn.net/csui2008/archive/2010/06/18/5678281.aspx
省得出错



东莞寻香苑 2010-12-21
  • 打赏
  • 举报
回复
DataTable dt = ACO.DBUtility.DbHelperSQL.ExecuteDataTable(sql, "tblUpLow");
DataTable dt1 = ACO.DBUtility.DbHelperSQL.ExecuteDataTable(sql1, "tblUpLowDetail");
ReportDocument oCR = new ReportDocument();
oCR.Load(Server.MapPath("~/cryreport/UplowReport.rpt"));
oCR.SetDataSource(dt);
oCR.SetDataSource(dt1);
CrystalReportViewer1.ReportSource = oCR;


阿泰 2010-12-21
  • 打赏
  • 举报
回复
CrystalReportSource1.ReportDocument.SetDataSource(dt);
CrystalReportSource1.ReportDocument.SetDataSource(dt1);

第2句代码覆盖掉了第1句代码的效果,达不到一次性传递两个表给报表的目的。
先把两个表放到一个dataset中,然后把ds传递给报表试试

DataSet ds1 = new DataSet();
ds1.Tables.Add(dt);
ds1.Tables.Add(dt1);
CrystalReportSource1.ReportDocument.SetDataSource(ds);

4,815

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧