数据库结构如下:
id parentid,name,money,totalmoney,submoney
0,0,根节点,0,15000,0
1,0,张山,1000,5000,0
2,0,张好,2000,7000,0
3,0,王五,3000,3000,0
4,1,黎明,4000,4000,0
5,2,老刘,5000,5000,0type
tmydata = record
id:integer;
parentid:integer;
name:string;
money:double;
totalmoney:double;
submoney:double;
resume:boolean;
end;
pmydata = ^tmydata;现在想反向计算submoney.
submoney 是当前节点的totalmoney 减去下面所有层次的money.
并且要去掉当前下级节点的money最大值。
function submoney(p:tTreenode):double;
var
i:integer;
d:pcustdata;
begin
d:=pcustdata(p.data);
{
if not d.resum then //resum 起到只计算一次的作用?。
begin
result:=d.money;
exit;
end;
}
if p.Count <1 then
begin
d.submoney := 0; //=0
result := d.money;
d.resum:=false;
exit;
end;
result := d.money;
for i:=0 to p.count -1 do
result := result + submoney(p.Item[i]);
//全部加起来以后用总数去减
d.submoney := d.totalmoney + d.money - result;
d.resum:=false;
end;
我写的这个没有考虑下级节点的最大值。
另外一种。
function submoney(p:tTreenode):double;
var
i:integer;
d:pcustdata;
begin
d:=pcustdata(p.data);
{
if not d.resum then //resum 起到只计算一次的作用?。
begin
result:=d.submoney;
exit;
end;
}
if p.Count <1 then
begin
d.submoney := 0; //=0
result := d.money;
d.resum:=false;
exit;
end;
result := d.submoney;
for i:=0 to p.count -1 do
result := result - submoney(p.Item[i]);//这样减好像只是得到了一层节点的数据,并且减去的数是已经减了之后的数
d.submoney := result;
d.resum:=false;
end;
我这两种写法都好像有错,请帮忙看看
id parentid,name,money,totalmoney,submoney
0,0,根节点,0,15000,0
1,0,张山,1000,5000,0
2,0,张好,2000,7000,0
3,0,王五,3000,3000,0
4,1,黎明,4000,4000,0
5,2,老刘,5000,5000,0type
tmydata = record
id:integer;
parentid:integer;
name:string;
money:double;
totalmoney:double;
submoney:double;
resume:boolean;
end;
pmydata = ^tmydata;现在想反向计算submoney.
submoney 是当前节点的totalmoney 减去下面所有层次的money.
并且要去掉当前下级节点的money最大值。
function submoney(p:tTreenode):double;
var
i:integer;
d:pcustdata;
begin
d:=pcustdata(p.data);
{
if not d.resum then //resum 起到只计算一次的作用?。
begin
result:=d.money;
exit;
end;
}
if p.Count <1 then
begin
d.submoney := 0; //=0
result := d.money;
d.resum:=false;
exit;
end;
result := d.money;
for i:=0 to p.count -1 do
result := result + submoney(p.Item[i]);
//全部加起来以后用总数去减
d.submoney := d.totalmoney + d.money - result;
d.resum:=false;
end;
我写的这个没有考虑下级节点的最大值。
另外一种。
function submoney(p:tTreenode):double;
var
i:integer;
d:pcustdata;
begin
d:=pcustdata(p.data);
{
if not d.resum then //resum 起到只计算一次的作用?。
begin
result:=d.submoney;
exit;
end;
}
if p.Count <1 then
begin
d.submoney := 0; //=0
result := d.money;
d.resum:=false;
exit;
end;
result := d.submoney;
for i:=0 to p.count -1 do
result := result - submoney(p.Item[i]);//这样减好像只是得到了一层节点的数据,并且减去的数是已经减了之后的数
d.submoney := result;
d.resum:=false;
end;
我这两种写法都好像有错,请帮忙看看
解决方案 »
- 各路delphi高手请指教:第三方控件中twDBGridDD, twDBEditDD是什么控件
- 编译的exe文件很大怎么优化
- 关于枚举类型错误!
- 一个比较难的字符串算法,大家过来探讨(1000分)
- 怎么让TDBLookupComboBox在程序开始的时候就有个值??
- 如何设置自己进程内的热建比如:Ctrl+Alt+C,必须用hook?或者别的?
- 求助:一个菜鸟级的问题,请大家帮忙.
- dbgrid里修改cell的值或者删除记录后,有时候会出现记录的重复行的问题!为什么?救急!
- 为何用了2个以上的单元有调用窗体就出现 access violat at address XXXXX in module的错误
- 借用宝地:一excel2000文件,打开时状态栏显示‘打开...’,但工作区域一闪便什么都没有了,工作簿不能显示出来,请问是什么原因?
- 怎样实现"打开文件对话框"外壳扩展功能?
- 独乐乐不如众乐乐
type
tmydata = record
id:integer;
parentid:integer;
name:string;
money:double;
totalmoney:double;
submoney:double;
resume:boolean;
end;
pmydata = ^tmydata;现在想反向计算submoney.
submoney 是当前节点的totalmoney 减去下面所有层次的money.
并且要去掉当前下级节点的money最大值。
function submoney(p:tTreenode):double;
var
i:integer;
d:pcustdata;
begin
d:=pcustdata(p.data);
{
if not d.resum then //resum 起到只计算一次的作用?。
begin
result:=d.money;
exit;
end;
}
if p.Count <1 then
begin
d.submoney := 0; //=0
result := d.money;
d.resum:=false;
exit;
end;
result := d.money;
for i:=0 to p.count -1 do
result := result + submoney(p.Item[i]);
//全部加起来以后用总数去减
d.submoney := d.totalmoney + d.money - result;
d.resum:=false;
end;
我写的这个没有考虑下级节点的最大值。
另外一种。
function submoney(p:tTreenode):double;
var
i:integer;
d:pcustdata;
begin
d:=pcustdata(p.data);
{
if not d.resum then //resum 起到只计算一次的作用?。
begin
result:=d.submoney;
exit;
end;
}
if p.Count <1 then
begin
d.submoney := 0; //=0
result := d.money;
d.resum:=false;
exit;
end;
result := d.submoney;
for i:=0 to p.count -1 do
result := result - submoney(p.Item[i]);//这样减好像只是得到了一层节点的数据,并且减去的数是已经减了之后的数
d.submoney := result;
d.resum:=false;
end;
帮忙看看
//结构体加上一个子节点的地址就很容易操作了。
type
tmydata = record
id:integer;
parentid:integer;
name:string;
money:double;
totalmoney:double;
submoney:double;
resume:boolean;
items:TMyDataArr;
end;
TMyDataArr = array of tmydata;//这里也做了下修改。
不知道能不能行,作为一种参考吧。
上面我写的有错误。
这个数据已经从数据库加载到treeview了。