關於treeview的問題,請幫忙解決!(9分)

  • 主题发起人 主题发起人 empty023
  • 开始时间 开始时间
E

empty023

Unregistered / Unconfirmed
GUEST, unregistred user!
剛寫了下一個treeview程序,程序運行時提示有list index out of bounds(-1)的錯誤,其中數據庫中的id,pid,caption都定義的是varchar2類型,id代表節點,pid代表父節點,請大家幫忙解決,多提意見。
代碼如下:
procedure MakeTree(Query: TADOQuery; TableName: string; TreeView: TTreeView);
procedure AddTreeNode(Query: TADOQuery; TreeView: TTreeView; bj: boolean = false);
procedure Treechange(query: TADOQuery; node: TTreenode);
implementation
uses Unit1;
var
list: TStringList; //用于記錄各個id及其在樹中所對應的節點,從而實現快速查找
procedure MakeTree(Query: TADOQuery; TableName: string; TreeView: TTreeView);
begin
TreeView.Items.BeginUpdate;
list.Clear;
TreeView.items.clear;
if query.Active then query.Close;
Query.SQL.Text := 'SELECT * FROM ' + TableName + ' ORDER BY ID';
Query.Open;
query.DisableControls;
TreeView.Items.Clear;
list.Clear;
list.Sorted := True;
query.First;
while not Query.Eof do
begin
addtreenode(Query, TreeView); //依次增加所有節點
Query.Next;
end;
TreeView.Items.EndUpdate;
query.EnableControls;
if treeview.Items.Count < 1 then exit;
treeview.Select(treeview.Items.Item[0]);
treeview.SetFocus;
end;

procedure addtreenode(Query: TADOQuery; TreeView: TTreeView; bj: boolean = false);
var
index: integer;
Node: TTreeNode;
begin
if Query.FieldByName('PID').AsString = '0' then //ParentID=0,頂層節點
Node := TreeView.Items.AddChildObject(nil, Query.FieldByName('CAPTION').AsString, query.GetBookmark)
//增加節點,並將本節點所對應的記錄標簽數據放到節點所提供的附加數據中
else
begin
Index := list.IndexOf(Query.FieldByName('PID').AsString);
Node := TreeView.Items.AddChildObject(TTreeNode(list.Objects[Index]),
Query.FieldByName('CAPTION').AsString, query.GetBookmark);
//增加子節點,并將本節點所對應的記錄標簽數據放到節點所提供的附加數據中
end;
//增加當前節點的信息到列表中,以實現在列表中快速查找節點的功能。
list.AddObject(Query.FieldByName('ID').AsVariant, Node);
if bj then
begin
treeview.Select(node);
treeview.SetFocus;
end;
end;
procedure Treechange(query: TADOQuery; node: TTreenode);
begin
query.GotoBookmark(node.Data);
end;
initialization
list := TStringList.Create;
finalization
list.Free;
end.
 
后退
顶部