水晶报表绑定多个数据表

gxqianqin 2010-03-22 03:21:28
水晶报表绑定到dataset,dataset中包含多个datatable,运行时,总是跳出数据库登入提示,

trvdata tr = new trvdata();
DataSet ds = new DataSet();
DataSet dssource = new DataSet();
string sql=" select W.WO_ID, R.ITEM_ID, R.ROUTE_ID, R.QTY, R.RC_DESC,R.MONOMER, R.RC_ID, P.POWER,R.CREATE_USER, R.DUEDATE FROM WORKING_ORDER AS W JOIN RUNCARD AS R ON W.WO_ID = R.WO_ID JOIN PROD_CODE AS P ON R.RC_ID=P.RC_ID WHERE W.WO_ID LIKE 'DJ2509AA2460%'and W.CREATE_DATE like ";
sql += " '2009/12/03%' AND PATINDEX ( '%-%' , R.RC_ID ) = 0 ";
ds = tr.coomn(sql, "runcard", "m");
DataTable db = new DataTable();
dssource.Tables.Add(ds.Tables[0].Copy());
sql = " select CHECK_IN_QTY, CHECK_OUT_QTY, substring(CHECK_IN_TIME ,1,10) as CHECK_IN_TIME, substring(CHECK_OUT_TIME ,1,10) as CHECK_OUT_TIME, RC_ID, ";
sql += " TRACK_INFO.RCOP_ID from TRACK_INFO join ( select RCOP_ID , MAX(TRACKING_ID) as T_ID from TRACK_INFO where WO_ID in ( SELECT WO_ID FROM WORKING_ORDER ";
sql += " WHERE WO_ID LIKE 'DJ2509AA2460%' AND CREATE_DATE like '2009/12/03%') group by RCOP_ID) as TRACK on TRACK_INFO.TRACKING_ID=TRACK.T_ID";
ds = tr.coomn(sql, "track_info", "m");
dssource.Tables.Add(ds.Tables[0].Copy());
sql += " SELECT W.WO_ID, ATTR_FUNC.FUNC, ATTR_CUP.CUP, ATTR_AQUA.AQUA FROM WORKING_ORDER AS W JOIN ( SELECT WO_ID, WO_ATTR_VAL AS FUNC";
sql += " FROM WO_ATTR WHERE WO_ATTR='產品功能' ) AS ATTR_FUNC ON ATTR_FUNC.WO_ID = W.WO_ID JOIN ( SELECT WO_ID, WO_ATTR_VAL AS ";
sql += " CUP FROM WO_ATTR WHERE WO_ATTR='封包方式') AS ATTR_CUP ON ATTR_CUP.WO_ID = W.WO_ID JOIN ( SELECT WO_ID, WO_ATTR_VAL AS ";
sql += " AQUA FROM WO_ATTR WHERE WO_ATTR='緩衝液') AS ATTR_AQUA ON ATTR_AQUA.WO_ID = W.WO_ID WHERE W.WO_ID LIKE 'DJ2509AA2460%' AND ";
sql += " W.CREATE_DATE LIKE '2009/12/03%' ";
ds = tr.coomn(sql, "wo_attr", "m");
dssource.Tables.Add(ds.Tables[0].Copy());

sql+=" select OP_ID, OP_NAME from OPERATION where ROUTE_ID in ( SELECT distinct ROUTE_ID FROM WORKING_ORDER WHERE WO_ID LIKE 'DJ2509AA2460%' AND CREATE_DATE ";
sql += " like '2009/12/03%') ";
ds = tr.coomn(sql, "rc_op", "m");
dssource.Tables.Add(ds.Tables[0].Copy());

crsreports.Dsruncard prRuncard = new Dsruncard();
prRuncard.SetDataSource(dssource);

this.rccrs.ReportSource = prRuncard;
请大侠给点提示,多谢!
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rommen 2010-03-22
  • 打赏
  • 举报
回复
一起结帖。。。
名字随便取 2010-03-22
  • 打赏
  • 举报
回复
我也顶一下,方便结贴。
阿泰 2010-03-22
  • 打赏
  • 举报
回复
来晚了。。


回一下,方便结贴,呵呵。
gxqianqin 2010-03-22
  • 打赏
  • 举报
回复
已解决,原来是xsd跟datatable名字搞錯了
e表号称水晶报表杀手。e表是一个功能强大的Web报表工具,提供了高效的报表设计方案、强大的Web报表展现能力、灵活的部署机制。使用e表可使复杂报表的设计简单化,以往难以实现的报表可以轻松实现,避免了大量的复杂SQL编写以及编程来准备数据,报表设计的效率大大提高。 e表是纯 .NET的报表工具,在.NET环境下可以无缝嵌入应用系统,因此在.NET应用中比其他非.NET的报表工具有明显优势。 用户可以通过报表设计器直接设计各种复杂格式的报表,在运行时通过报表服务器自动提取数据生成报表,可以通过Web方式展现、打印、导出。 e表内置了一个强大的表单设计器,使用它可以可视化地设计报表的查询条件的输入界面。e表的报表设计器也是在IE浏览器中直接运行的。这样用户可以很方便地将报表设计器嵌入到自己的产品中。 Excel绘表方式能解决报表样式问题,但Excel的这种基于自由单元格的模型和基于二维表的数据库物理表模型没法有机的结合起来。控件拖拽式绘表能很好地从数据库中取数,但又无法处理复杂的报表样式。因而迫切需要一种新的报表实现方式。 e表就是采用了一种新的报表实现方式。在e表中,一个报表被认为是由单元格扩展而来的。即先采用类Excel方式绘制好静态报表。当然在其中预置了一些扩展单元格的公式。而在运行报表时根据公式横向或纵向扩展单元格而得到真正的报表结果。这样就同时兼顾了报表样式和从数据库中自动取数这两个方面。 控件拖拽式报表工具除了样式绘制麻烦之外,还有它最终是由单个数据集循环展开而得到报表的致命弱点,报表的形成是由单个数据集的循环再结合报表格式文件的定义而得到真正的报表结果,它相当于只有一个循环运算点。 而e表因为可以在一个类Excel的静态网格报表上定义无限多的扩展公式,运算报表时这些扩展公式同时扩展,每个扩展公式可以基于不同的数据集。它相当于有无限多个循环运算点。因此报表的表现力大大增强,可以说是复杂统计报表的克星。 一般来说,大多数的报表都需要根据输入的报表参数而得到不同的结果。例如:日报表需要根据输入的日期来得到到底是要哪一天的日报表。这时就需要日期的输入界面,它被称为是查询条件的输入表单。 查询条件的输入界面是千变万化,没有一定之规的。很多报表工具只是提供一个自动生成这个界面的功能。可想而知,自动生成的界面往往无法满足用户的多样化的需求。甚至于有的报表工具就没有此功能,由用户用程序写去。而查询条件输入表单是报表密不可分且又不可或缺的一部分,如果查询条件输入表单没做好的话,往往会造成用户在使用了报表工具后还是需要大量的编码工作。 e表内置了强大的eform可视化自定义web表单工具的主要部分,由它来解决查询条件输入表单的制作问题。它提供了下拉列表,页签控件等丰富的页面控件,完整的数据验证机制,也可以通过自定义事件来实现复杂的控制。通过将输入控件和报表参数进行绑定来将查询条件的输入表单和报表联系起来。它采用可视化的设计界面,既可以通过简单的控件拖拉绑定实现简单的查询条件输入表单,又可以通过写事件的代码来实现复杂的查询条件输入表单。一举解决了查询条件输入表单的多样化问题。

4,816

社区成员

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

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