当前树根据数据库中对应的数据生成,同一父节点下的兄弟结点根据数据库中对应的一个字段值排序.当在树中选中的当前结点(child2)之前插入一个新结点(add1)时(同时也在数据库中插入了一条记录,并改变了当前结点及后续兄弟点对应的排序字段的值),插入完毕后,我将原选中结点(child2)的父结点(parent1)的expanded属性置为true,但是显示的结果却变成了(图三), 目前我要想显示成正确的情况(图二),除非将TreeView重新构造一遍,但是在重新构造以后又找不着原来选中的节点了.
请问各位老兄有什么简便的方法能在插入节点以后能正确显示成(图二)
图一
parent1
|__child1
|__child2(selected)
图二(正确结果)
parent1(selected)
|__child1
|__add1
|__child2
图三(实际情况)
parent1
|__child1
|__child2(selected)
|__add1
请问各位老兄有什么简便的方法能在插入节点以后能正确显示成(图二)
图一
parent1
|__child1
|__child2(selected)
图二(正确结果)
parent1(selected)
|__child1
|__add1
|__child2
图三(实际情况)
parent1
|__child1
|__child2(selected)
|__add1
解决方案 »
- 请问RAVE能制作出表格式的报表吗???
- 急!程序中的错误:"is not a valid floating piont value && dbgrid 如何设置焦点??
- 在线求助:如何在确定的数值范围内随机取值?
- 用mediaplyaer开发了一个多媒体应用,客户端没有mediaplyaer的情况下怎样打包?
- 问个很菜的问题,我的DELPHI6中为什么没有Midas组件栏?我的Delphi5中有的啊!
- INDY控件中是如何进行抄送发邮件的?BCC、CC是什么意思?
- 连接数据库 ADO和BDE那种比较好,那种用的比较多!!!!!!!!!
- Delphi的日期问题
- 请问各位老师!
- 除了用记时器,还有没有更好的方法实时监视网络是否断开或连接?
- 怎样进行端口扫描?
- 关于软件加密狗如何控制功能模块问题?请教各位高手如何解决。
此处treeview1.selected为child2
写数据库你自己搞定
...........
node:=treeview1.Items.AddChild(treeview1.Selected.Parent,'新建部门');
node:=treeview1.Items.AddChild(treeview1.Selected,'新建部门');
.......
var
nodecel : array[0..10] of TtreeNode;
sqlstr,s1,s2:string;
tempstr :array[0..10] of string;
tempBoolean :array[0..10] of Boolean;
Nodetitle :TtreeNode;
begin
if (xlmc.text='') or (wz.text='') then begin
exit;
end;
screen.Cursor:=crHourGlass;
if Sender<>cmdok then
key.Text:='0';
TreeView1.Items.Clear;
TreeView1.Items.BeginUpdate;
new(nodeid);
dispose(nodeid);
nodecel[0] := TreeView1.Items.AddFirst (nil, xlmc.text);
nodecel[0].ImageIndex := 0;
nodecel[0].SelectedIndex := 3;
if wz.text<>'全部' then
sqlstr:='select 首桩号,首桩米,尾桩号,尾桩米,id from 绿化档案 where 道路='''+copy(xlmc.text,1,pos(':',xlmc.text)-1)+''' and 位置='''+wz.text+''' order by 首桩号,首桩米,尾桩号,尾桩米'
else
sqlstr:='select 首桩号,首桩米,尾桩号,尾桩米,绿化档案.位置,id from 绿化档案 INNER JOIN lib_位置 ON 绿化档案.位置 = lib_位置.位置 where 道路='''+copy(xlmc.text,1,pos(':',xlmc.text)-1)+''' order by 首桩号,首桩米,尾桩号,尾桩米,lib_位置.序号';
ADODataSet1.commandtext:=sqlstr;
ADODataSet1.open;
while not ADODataSet1.eof do
begin
tempBoolean[1]:=false;
s1:=ADODataSet1.FieldByName('首桩号').AsString;
s2:=ADODataSet1.FieldByName('首桩米').AsString;
if ADODataSet1.FieldByName('首桩米').asinteger=0 then
sqlstr:= s1
else
if ADODataSet1.FieldByName('首桩米').asinteger>0 then
sqlstr:= s1 +'(+'+s2+')'
else
sqlstr:= s1 +'('+s2+')';
sqlstr:= sqlstr+'--';
s1:=ADODataSet1.FieldByName('尾桩号').AsString;
s2:=ADODataSet1.FieldByName('尾桩米').AsString;
if ADODataSet1.FieldByName('尾桩米').asinteger=0 then
sqlstr:= sqlstr+s1
else
if ADODataSet1.FieldByName('尾桩米').asinteger>0 then
sqlstr:= sqlstr+s1 +'(+'+s2+')'
else
sqlstr:= sqlstr+s1 +'('+s2+')';
if wz.text='全部' then
begin
if (tempstr[1] <>sqlstr) then
begin
tempstr[1] :=sqlstr;
nodecel[1] := TreeView1.Items.AddChild(nodecel[0], tempstr[1]);
nodecel[1].ImageIndex := 1;
nodecel[1].SelectedIndex := 3;
end;
new(nodeid); nodeid^:=ADODataSet1.FieldByName('id').asinteger;
Nodetitle :=TreeView1.Items.AddChildObject(nodecel[1], ADODataSet1.FieldByName('位置').AsString,nodeid);
Nodetitle.ImageIndex := 2;
Nodetitle.SelectedIndex := 3;
end
else
begin
if (tempstr[1] <>sqlstr) then
new(nodeid); nodeid^:=ADODataSet1.FieldByName('id').asinteger;
Nodetitle :=TreeView1.Items.AddChildObject(nodecel[0], sqlstr,nodeid);
Nodetitle.ImageIndex := 2;
Nodetitle.SelectedIndex := 3;
end;
ADODataSet1.Next;
end;
nodecel[0].Expanded := True;
ADODataSet1.close;
ADODataSet1.CursorLocation:=clUseClient;
ADODataSet1.CursorType:=ctDynamic;
ADODataSet1.LockType:=ltOptimistic;
TreeView1.Items.endUpdate;
screen.Cursor:=crDefault;
end;