数据库中的表结构:
id pid
1 0
2 1
3 1
4 2
6 2
5 4
需要生成这样一个树结构,选取combo,需要查看哪个根节点。此时我选取的是combo中的0,所以显示如下。但是这是我手动添加的,界面如下:
1.通过get_count()方法,把所有Pid加载到combo里面;
2.选取某个数字作为查看时的父节点,触发cre_tree()生成一个tree
3.tree的内容通过get_list()方法得到,并存放在List> tree_list中,tree_list的内容就为:
[1, 2, 4, 5]
[1, 2, 6, null]
[1, 3, null, null]
现在手动添加的代码是死的:
Tree tree = new Tree(shell, SWT.BORDER);
tree.setBounds(30, 36, 382, 201);
List> tree_list = new ArrayList>(GetList.get_list(st));
TreeItem temp = new TreeItem(tree,SWT.NONE);
temp.setText(st);
TreeItem temp_1 = new TreeItem(temp,SWT.NONE);
temp_1.setText(tree_list.get(0).get(0));
TreeItem temp_2 = new TreeItem(temp_1,SWT.NONE);
temp_2.setText(tree_list.get(0).get(1));
TreeItem temp_3 = new TreeItem(temp_2,SWT.NONE);
temp_3.setText(tree_list.get(0).get(2));
。。。。。。
#################################################
请教大家如何将这种结构的内容添加到tree中,谢谢!
我这边没有swt的开发环境,大体看了下代码,主要问题是cre_tree方法。这个方法很乱,而且list中的数据也混乱,根本不需要嵌套list,sql也混乱,需要这么多的left join么?只是根据pid获取所有父节点为pid的数据,一条sql不就行了么?
你的需求也没描述清楚,是combo选择0,只出现父节点为0的所有树节点呢?还是选择0,只展开父节点为0的子节点呢?
建议如下:
一、如果每次选择combo重新查询:
1.调整sql,根据pid获取所有父节点为pid的数据
2.重新定义list,list只保存1查询出来的数据
3.根据list循环构造treeitem
二、如果combo仅仅是控制展开的功能:
1.调整sql,一条sql语句查询所有数据
2.重新定义list,list只保存1查询出来的数据
3.根据list递归构造treeitem
实际上,你根本没用递归的。
如果数据量不多的情况,直接全部获取出来保存到list中,然后递归构造tree就行了。如果你想选择combo展开该节点直接调用触发事件的方法就行了