关于xsd、dataset和报表的问题,很郁闷,也很急。

black_or_white 2006-10-20 10:59:28
看了不少文章了,用push的方法把自定义返回的DataSet显示在报表中。首先需要定义一个xsd文件,这样才能在数据库专家中,在ado.net数据集中找到类似于数据库表的模版,添加在报表中,用来显示dataset中的内容。现在问题是:我要显示很多的dataset,是不是每显示一个就需要根据dataset返回的类型定义一个xsd架构,然后再一个一个的把这个xsd添加到报表中?
能不能在生成dataset的时候,动态的生成现有的dataset的xml架构,并把这个xsd加载到报表中?代码如何写?
大概意思就是这样。不知道说清楚了没?做水晶报表的高手说说你们都是怎么做的呢?请说关键的地方,任何信息对我都是非常重要的。先谢谢大家!
开发环境:vs2005,Crystal Reports 10,oracle
...全文
249 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
股神 2006-10-20
  • 打赏
  • 举报
回复
路过 顶
njufrog 2006-10-20
  • 打赏
  • 举报
回复
假设有这么一个xsd dataset。
里面包含一张表,叫做“table1”,表里有ID(int), name(string), sex(string), age(int), money(decimal).

此xsd dataset在cr设计中使用后,
相当于cr报表有了个声明: 本表只接受 table1, 及其里面的ID(int), name(string), sex(string), age(int), money(decimal).

随后,你在应用程序里定义一个普通dataset,包括
“table1”:ID(int), name(string), money(decimal), address(string)
和 :"table2":ID(int), name(string), money(decimal), address(string)

此普通dataset被 setdatasource(dataset)后,
cr report 会首先查普通dataset的表名, 找到了table1,不理会table2,
然后,在table1里提取
ID(int), name(string), money(decimal), 因为address(string)没有在设计时出现,也将被排除。

所以,也可以搞一个大的xsd,囊括所有数据字段。
不过你的dataset数据源里的datatable必须和xsd里的table同名,而字段必须是它的子集
black_or_white 2006-10-20
  • 打赏
  • 举报
回复
非常感谢njufrog。让我很受启发。特别是:你的普通DataSet里的DataTable的名称,和里面字段的名称和类型,要和相应的xsd dataset一致

不过还是不明白。

比如说我的一个DataSet1回的表中的列有:
ID(int), name(string), sex(string), age(int), money(decimal).
我可以在xsd中定义一个架构包含这五种类型(名字和列名不一定相同)。
然后我就可以在报表中来显示我这个DataSet了。
如果以后我要是返回一个和刚才那个DataSet1有不一样的列的DataSet2。那我是不是就的另外定义一个符合我这个DataSet2的xsd架构啊?
现实中的DataSet中的结构都不一样(就说他不一样),那么是不是每个DataSet都得定义一个一一对应的xsd架构呢?

或者就是把所有的数据类型都在xsd中定义好,然后根据要显示的DataSet的列类型和顺序结构来在报表中拖放相应的xsd节点?
njufrog 2006-10-20
  • 打赏
  • 举报
回复
这个xsd只是为了规定你报表可以接受的数据类型,也就是定义一个数据接口
你完全可以建立几百个xsd的dataset,不过一旦你的cr报表添加了这些dataset xsd后
他们就完全没有用了,可以从工程里删去。

然后,你的cr报表指定数据源的时候,只需要普通的DataSet,
但是,你的普通DataSet里的DataTable的名称,和里面字段的名称和类型,要和相应的xsd dataset一致

4,818

社区成员

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

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