找回密码
 立即注册

QQ登录

只需一步,快速开始

rommyjob

高级会员

8

主题

19

帖子

1103

积分

高级会员

积分
1103

活字格认证

rommyjob
高级会员   /  发表于:2014-9-19 10:04  /   查看:7573  /  回复:6
问题描述:我从数据库中加载了一些数据,经过了一些处理,然后想在报表中展示。现在使用了DataTable给C1Report做数据源,但是编译不报错,运行时C1Report是空白的。
尝试的解决步骤:调试状态下,查看了DataTable,数据是已经加载成功的,DataTable中有数据。     
问题:如何才能将自行构造的DataTable传递给C1Report呢?                  
期待回复,谢谢!
  1. DataTable tblDatas = new DataTable("Datas");
  2.                         tblDatas.Columns.Add("ID", Type.GetType("System.Int32"));
  3.                         tblDatas.Columns[0].AutoIncrement = true;
  4.                         tblDatas.Columns[0].AutoIncrementSeed = 1;
  5.                         tblDatas.Columns[0].AutoIncrementStep = 1;

  6.                         tblDatas.Columns.Add("dtGenerate", Type.GetType("System.String"));
  7.                         tblDatas.Columns.Add("Description", Type.GetType("System.String"));

  8.                         for (int i = 0; i < lstInfo.Count; i++)
  9.                         {
  10.                             tblDatas.Rows.Add(new object[] { null,lstInfo[i].dtGenerate.ToString("yyyy年MM月dd日 hh时mm分ss秒") , lstInfo[i].strContent });
  11.                         }

  12.                         c1ReportDaily.DataSource.Recordset = tblDatas;
  13.                         c1ReportDaily.Sections.Header.Visible = false;
  14.                         // assign report to print preview control
  15.                         c1PrintPreviewControlDaily.Document = c1ReportDaily.Document;
复制代码

6 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-9-19 15:06:00
沙发
回复 1楼rommyjob的帖子

在C1Report使用DataTable数据源的步骤如下:
  1. // load DataTable from cache or from a secure/custom provider
  2. DataTable dt = GetMyDataTable();
  3. // load report definition (before setting the data source)
  4. c1r.Load(reportFile, reportName);
  5. // use DataTable as the data source for the C1Report component
  6. c1r.DataSource.Recordset = dt;
复制代码


有一个简单的方法去绑定数据库,可以使用C1Reports Designer。安装产品后,就会在ComponentOne/C1Reports文件夹下找到这个设计器。设计器里可以直接绑定数据源,帮你生成设计界面,并保存成XML。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
rommyjob
高级会员   /  发表于:2014-9-19 15:27:00
板凳
回复 2楼Alice的帖子

我想之所以不显示数据,应该是没有指定报表的定义文件。
c1r.Load(reportFile, reportName);
这个定义文件应该是影响的报表显示数据的格式,
我看了贵公司的帮助,貌似没有描述这个定义文件含义的说明文档。要是有这么个文档就好了。
我去试试看看使用你说的那个设计器弄个界面,把格式信息给抠出来,看看行不行。

先谢谢Alice啦~~
回复 使用道具 举报
rommyjob
高级会员   /  发表于:2014-9-19 15:48:00
地板
回复 2楼Alice的帖子

我想之所以不显示数据,应该是没有指定报表的定义文件。
c1r.Load(reportFile, reportName);

rommyjob 发表于 2014-9-19 15:27:00



经过测试,上述问题确实是由于没有指定报表定义文件导致。
我使用了你说的报表设计器设计了一个报表,并且生成了XML文件,但是我发现有下列两点问题:
1、XML中有数据库的连接信息,这个连接信息在不同的客户的电脑上,有可能是不同的,我总不能部署的时候再手动修改这个XML文件吧?
2、我使用DataTable的主要原因是这里面的数据都是代码运行过程中生成的,事先并没有存储在数据库中,但是设计报表的时候必须要指定数据源,有没有一种方式可以让C1Report不要非得依赖与数据库才能生成这个定义XML文件呢?

谢谢啦
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-9-19 18:13:00
5#
回复 4楼rommyjob的帖子

报表的展示是通过XML的结构。使用数据库,C1ReportDesigner可以根据这个数据库生成字段,生成报表需要的格式。
这个XML也可以自己构建的,不需要根据数据库。你自己完全可以写XML,或是用C1Report设计器设计一个你需要的界面,添加字段,存储成XML文件,导入到C1Report,然后绑定。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
rommyjob
高级会员   /  发表于:2014-10-16 14:20:00
6#
回复 5楼Alice的帖子

摸索了N天,参考了水晶报表的用法,终于搞懂了。原来XML中的数据源只是用来设计报表格式用的。代码运行中可不使用该数据源。结贴感谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-10-16 16:05:00
7#
回复 6楼rommyjob的帖子

好的。此问题结贴。
如果有新问题欢迎发帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部