主题:  讨论:有什么高招

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#162006/5/24 18:19:50
要求输出的内容见报表扫描图

图片如下:


我自己做了个数据库结构

图片如下:


Pay_Table表:主要是为了便于定制表的,因为表的内容需要更换,第张定制表记录在数据库中。本表可以暂时不用考虑。
Pay_TableItem:是用于记录表项内容的,也就是支出项,ParentItem是内链接,用于记录父类,可形成树开结构。
Pay_Type:记录支出类型,主要用支出费用于追加资金二种
Pay_Pay:记录每一笔支出的数额及支出日期


非常大鱼

Tassadar

职务:普通成员
等级:1
金币:-1.0
发贴:38
#172006/5/25 17:40:08
/*
我上次使用的第三方树控件的建表的方式就和你的一样。
每个节点分别在数据库中保存自己的父节点

不知道你在页面上使用的什么方法来实现树形图

如果数据表这样建立。。
树控件有几层就在数据库中放几个标志列,
比如3层的
一层根节点 3列的数据为 1 0 0
一层的第一个子节点 1 1 0
一层的第二个子节点 1 2 0
            一层的第二个子节点的第一个根节点 是 1 2 1
            一层的第二个子节点的第二个跟节点 是 1 2 2
...
一层的第n个子节点 1 n 0
二层的根节点是 2 0 0
*/

这样在数据的查询上明显容易,但页面上树形图的实现就只能自己画了………..



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#182006/5/26 0:32:30
感谢各位
让大家来讨论这个问题,有得到一些好的思路是最好的。
得到答案还是次要的,主要是动上脑筋,开宽些思路,就不错。

我基本上有个初步的思路,并且开发一专门的类库用来计算这种形式的统计。

用下载的Tree控件可能会很失望的,因为不是针对这种计算。我是用自己开发的树形结构的类库来实现这种功能。.NET很不错,用ASP虽然也可以实现类,但ASP的数组无法添加自己的类(有点失望,ASP没有实现树形结构)

树形结构以前我用专门的文章来说明,用二个类来组成:
TreeNode:节点
TreeList:树形列

TreeNode类:有ID,Name,ParentID,NamePath(名称路径),IDPath(ID路径),Content(扩展属性),ChildNodes(下属子节点),AllChildNods(所有子节点),ChildCount(下属子节点数),AllChildCount(所有子节点数)等属性;有AddNode,RemoveNode,GetAllChildsID(), GetAllChildsIDString()等方法;
TreeList类:有Nodes(所有节点队列),MaxTreeHeight,方法有AddNode,RemoveNode,ResetTreeList等公有方法

用该TreeList类可以实现树形结构,但还没有统计功能
因此另外开发统计树形类,从TreeNode及TreeList类继承

PayNode继承自TreeNode,增加三个属性Data1, Data2, Data3该类是针对这软件开发的
PayTreeList继承自TreeList,该类增加一方法AddData,即通过运算,形成一颗统计树。



类形成了,接下去就是把类与查询结合起来。比如我们查询一组统计数据(DataSet),该数据只有末梢节点的数字。然后把这些统计数据用遍历的方法赋值给PayNode的Data1, Data2, Data3,当然如果没有数据,先置为0(该运算可成为类的一种方法)。此时已经完成数据加入,但还没有统计数据。然后用PayTreeList的AddData()方法进行计算。


剩下的就是显示出来了,这些可以通过专门显示树形的类来显示。我这个TreeList类的Nodes属性其实是ArrayList,所以可以用数据表格来绑定的。

下图为用树形类的表单定制系统

图片如下:

编辑历史:[此帖最近一次被 蓝鲸 编辑过(编辑时间:2006-05-26 00:42:22)]

非常大鱼

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#192006/5/27 1:57:53
终于好了,可以舒口气,不知道速度还行不行。
如果对这方面感兴趣的朋友还可继续讨论。

图片如下:


非常大鱼

浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
#202006/5/28 22:11:51
呵呵,一个比较头疼的东东。这么复杂的报表,速度不好保障吧。如果是我,会先把基数据读出来,再计算,最后呈现报表了。



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#212006/5/29 11:29:53
diffmaker在上个帖子中说
引用:
呵呵,一个比较头疼的东东。这么复杂的报表,速度不好保障吧。如果是我,会先把基数据读出来,再计算,最后呈现报表了。


想着差不多,要用查询的话很复杂的。把查询数据读出来,再计算,最后形成报表。因计算速度肯定比复杂查询要快些。


非常大鱼