日期:2014-05-17  浏览次数:20814 次

求一算法 (关于 TreeView 的)

如上图:

1。如果某一节点完成了其任务后,则:
该节点自身的图片就由红X变成绿对勾
2。如果所有的子节点都完成了其各自的任务,则:
其父节点的图片也由红X自动变成绿对勾

感觉用链表可以解决之,但貌似又增加了1倍(节点对象)的内存开销,还有更好的方案吗?


------最佳解决方案--------------------
本帖最后由 bdmh 于 2012-11-22 11:19:59 编辑 你必须有个标识来表示是否完成,所以加一个bool型变量即可,甚至你可以用node节点的tag属性值来判断
------其他解决方案--------------------
设置变量
遍历当前完成任务节点上级节点下的所有子节点的字节点,如果全部完成
则上级节点标识完成

循环调用

------其他解决方案--------------------
肯定有个值让你标识是否完成任务,
如果完成你就切换图片地址就是
if(true)
{node.ImageUrl = this.SkinFolder + @"images\Org\Dept2.gif";}//(√)
else
{未完成的图片(X)}
------其他解决方案--------------------
改变一个子结点状态后,在增加一步,遍历这个结点的兄弟结点,如果都完成了,再更改父结点的状态,写成递归,不管有多少级结点都行。
------其他解决方案--------------------
父节点用个数值存储未完成的子节点数量,某一个子节点完成后,就将父节点的该数值减一,再判断如果为零就更新图片,并将再往上一层的父节点的数值减一并判断,直到根节点。
------其他解决方案--------------------
引用:
本帖最后由 bdmh 于 2012-11-22 11:19:59 编辑
            你必须有个标识来表示是否完成,所以加一个bool型变量即可,甚至你可以用node节点的tag属性值来判断
???
------其他解决方案--------------------
引用:
设置变量
遍历当前完成任务节点上级节点下的所有子节点的字节点,如果全部完成
则上级节点标识完成

循环调用
给个代码好吗?
------其他解决方案--------------------
我倒想出一笨方法,每个节点都通过数据库找到子节点的ID集合,然后再3楼方法,还有更好的吗?
------其他解决方案--------------------
12:30结帖,现在散分。。。
------其他解决方案--------------------
引用:
肯定有个值让你标识是否完成任务,
如果完成你就切换图片地址就是
if(true)
{node.ImageUrl = this.SkinFolder + @"images\Org\Dept2.gif";}//(√)
else
{未完成的图片(X)}
@"images\\Org\\Dept2.gif"
------其他解决方案--------------------
这只是图片的路径,我项目中的路径,我复制出来的时候没有去掉。
------其他解决方案--------------------
引用:
这只是图片的路径,我项目中的路径,我复制出来的时候没有去掉。

pictureBoxX.Image = :
Image.FromFile(string.Format("{0}\\image\\未做.gif", Application.StartupPath));
Image.FromFile(string.Format("{0}\\image\\完工.gif", Application.StartupPath));
------其他解决方案--------------------
不是这么写的吧。。你这样是做出来了吗?
要判断完成状态后再来改变图片吧
你都没有判断,怎么就给出了图片的路径。。不懂。
能够给全一点你的代码吗?
------其他解决方案--------------------

看看上图,Appllication.StartupPath是到exe的路径,没包括到gif所在的image,所以,要到下一级的文件夹里找文件,就要:
xxx.Image = Image.FromFile(string.Format("{0}\\image\\未做.gif", Application.StartupPath));
方法了,你试一下。

当任务完成后,该图片就得换成:
xxx.Image = Image.FromFile(string.Format("{0}\\image\\完工.gif", Application.StartupPath)); 

不知我俩说的是否是同一主题,请赐教。
------其他解决方案--------------------
兴许你要的是递归代码?我的业务和你的不一定一样,给你个我的框架吧:


        private void checkTreeNode(int selectValue)//完成2项工作:1.按钮的操作;2:父节点的操作