我通过指定每个结点的父结点来动态生成一颗自顶向下的树,当结点的编号是从0 开始然后按添加顺序递增时,可以通过运行,可删除某一结点,使原来的递增序列出现断点,从而出现错误,老是提示 Invalid index ,希望各位高手们帮帮忙!我的代码:
procedure TForm1.PopulateTreeView;
var
parentnode,sonnode,treenode:TTreenode;
i:Integer;
begin
tvwFolders.Items.Add(self.tvwFolders.TopItem,'人员权限总栏:');
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from T_树结点表 ');
ADOQuery1.Prepared:=True;
ADOQuery1.Open;
ADOQuery1.First;
while not ADOQuery1.Eof do //如果未到达最后一项,执行循环
begin
i := ADOQuery1.FieldByName('父结点编号').AsInteger; tvwFolders.Items[i].Selected:=True; ------->提示这行有问题!!! tvwFolders.Items.AddChild(tvwFolders.Selected, ADOQuery1.fieldbyname('基本权限').AsString) ; ADOQuery1.Next;
end;end;谢谢了! 希望得到你的可行的方法,先行谢过! 在线等.....
procedure TForm1.PopulateTreeView;
var
parentnode,sonnode,treenode:TTreenode;
i:Integer;
begin
tvwFolders.Items.Add(self.tvwFolders.TopItem,'人员权限总栏:');
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from T_树结点表 ');
ADOQuery1.Prepared:=True;
ADOQuery1.Open;
ADOQuery1.First;
while not ADOQuery1.Eof do //如果未到达最后一项,执行循环
begin
i := ADOQuery1.FieldByName('父结点编号').AsInteger; tvwFolders.Items[i].Selected:=True; ------->提示这行有问题!!! tvwFolders.Items.AddChild(tvwFolders.Selected, ADOQuery1.fieldbyname('基本权限').AsString) ; ADOQuery1.Next;
end;end;谢谢了! 希望得到你的可行的方法,先行谢过! 在线等.....
解决方案 »
- 数据库查询问题
- DataSet中的当前记录发生改变之后,相应的DBGRID绘制有关问题
- 一个应用程序,主窗体是form1,怎么样在这个form1窗体出来之间,界面显示一段mpg文件?
- RemObjects SDK中的TWebDispatcher后如何取得客户端的request信息
- 怎么使得 MDIChild 窗口占满 MDIMain 的整个客户区而又不是最大化?
- 又一个delphi论坛成立了: http://www.91delphi.com 吔!!
- 急急,在线等待,高分,不够再加把数据库中的数据导到Excel中
- 请问:如何将图片压缩成字符?
- 有关TreeView的问题?
- 怎样字符转化,急用
- 如何在Oracle中动态创建数据源?(100分)
- 查询分析器语句
盗用 QSmile(RedFox)兄的代码!
谢谢了二位
procedure TfrmDepartEmp.BuildTree;
var
tNode :TTreeNode;
begin
if dsDept.Active then dsDept.Close;
dsDept.CommandText := 'select * from Departments';
dsDept.Open;
tNode := treeDept.Items.AddChild(nil,'公司人员权限');
tNode.Data := Pointer(0);
tNode.ImageIndex := 0;
tNode.SelectedIndex := 1;
TreeMe(tNode);
end;
procedure TfrmDepartEmp.TreeMe(tNode: TTreeNode);
var
ParentID : Longint;
childNode : TTreeNode;
begin
ParentID := Integer(tNode.Data );
dsDept.First;
while not dsDept.Eof do
begin
if dsDept.FieldByName('父结点编号').AsInteger = ParentID then
begin
childNode := TreeDept.Items.AddChild(tNode,
dsDept.FieldByName('基本权限').AsString);
childNode.Data := Pointer(dsDept.FieldByName('树结点编号').AsInteger);
childNode.ImageIndex := 0;
childNode.SelectedIndex := 1;
//TreeMe(childNode);
end;
dsDept.Next;
end;
childNode := tNode.getFirstChild;
while childNode <> nil do
begin
TreeMe(childNode);
childNode := childNode.getNextSibling;
end;
end;