I have a table1 with a field 'treenode'.Please teach me How to read all items (record) to "Addchild" to treewiew, start from Treeview1.items[0]. Using ADOTable1 any dataTable using same Fuction some source for if u need:ID FolderID and ParentID is Table's field, save node dataand must create index for it.FolderTable is my database table.procedure TBook.FillFolderTreeView; // using recursion to fill Treeview // u need this child method procedure FillTreeNode(TreeNode: TTreeNode); var I, FolderID: Integer; Node: TTreeNode; begin FolderID := Integer(TreeNode.Data); FolderTable.Filter := 'ParentID=' + IntToStr(FolderID); FolderTable.Filtered := True; FolderTable.First; for I := 0 to FolderTable.RecordCount - 1 do begin Node := TreeView.Items.AddChild( TreeNode, FolderTable.FieldByName('Name').AsString); Node.Data := Pointer(FolderTable.FieldByName('ID').AsInteger); Node.SelectedIndex := 1; FolderTable.Next ; end; for I := 0 to TreeNode.Count - 1 do begin FillTreeNode(TreeNode.Item[I]); end; end;begin //initialize TreeView TreeView.Items.BeginUpdate ; TreeView.Items.Clear ; //Fill Node and Expand all nod FillTreeNode(TreeView.Items[0]); TreeView.FullExpand; TreeView.Items.EndUpdate ; TreeView.Items[1].Selected := True; end; Comment from leeon Date: 05/05/2003 10:54AM PDT this is a new folder's method.u maybe know how to do it.read this source and i post source later, Inputform is writing strings form.don't care that.procedure TBook.NewFolderExecute(Sender: TObject); var ParentID: Integer; FolderName: String; TreeNode: TTreeNode; begin if TreeView.Selected = nil then Exit; ParentID := Integer(TreeView.Selected.Data); if ShowInputForm(FolderName, SNewFolder, SFolderName) then begin FolderTable.Filtered := False; FolderTable.Append; FolderTable.FieldByName('ParentID').AsInteger := ParentID; FolderTable.FieldByName('Name').AsString := FolderName; FolderTable.Post ; TreeNode := TreeView.Items.AddChild(TreeView.Selected, FolderName); TreeNode.Data := Pointer(FolderTable.FieldByName('ID').AsInteger); TreeNode.SelectedIndex := 1; TreeNode.MakeVisible ; TreeNode.Selected := True; end; end; Comment from z27 Date: 05/05/2003 05:27PM PDT Thank you very much! Comment from leeon Date: 05/05/2003 07:26PM PDT :) u r welcome.here is delete folder methodyou'd better read this careful//cardtable is File table, FolderTable save it's dataprocedure TBook.DeleteFolderExecute(Sender: TObject); var TreeNode: TTreeNode; FolderID, R: Integer; begin if TreeView.Selected = nil then Exit; TreeNode := TreeView.Selected ; if TreeNode.AbsoluteIndex in [0,1] then Exit; R := MessageBox( Application.Handle, PChar(SQueryDeleteFolder), PChar('Are you sure to delete the folder?'), 36); if R = ID_NO then Exit; FolderID := Integer(TreeNode.Data); FolderTable.Filtered := False; FolderTable.IndexName := ''; if FolderTable.FindKey([FolderID]) then begin FolderTable.Delete ; CardTable.Filtered := False; CardTable.IndexName := 'ByFolderID'; while CardTable.FindKey([FolderID]) do begin CardTable.Delete; end; TreeNode.Delete ; end; end;
ftp://202.117.210.28/file/dbtreed7.rar 是D7的版本
ftp://202.117.210.28/file/dbtree13.rar 是其它的版本
"Addchild" to treewiew, start from Treeview1.items[0].
Using ADOTable1
any dataTable using same Fuction some source for if u need:ID FolderID and ParentID is Table's field, save node dataand must create index for it.FolderTable is my database table.procedure TBook.FillFolderTreeView; // using recursion to fill Treeview
// u need this child method procedure FillTreeNode(TreeNode: TTreeNode);
var
I, FolderID: Integer;
Node: TTreeNode;
begin
FolderID := Integer(TreeNode.Data); FolderTable.Filter := 'ParentID=' + IntToStr(FolderID);
FolderTable.Filtered := True;
FolderTable.First; for I := 0 to FolderTable.RecordCount - 1 do
begin
Node := TreeView.Items.AddChild(
TreeNode, FolderTable.FieldByName('Name').AsString); Node.Data := Pointer(FolderTable.FieldByName('ID').AsInteger);
Node.SelectedIndex := 1;
FolderTable.Next ;
end; for I := 0 to TreeNode.Count - 1 do
begin
FillTreeNode(TreeNode.Item[I]);
end;
end;begin
//initialize TreeView
TreeView.Items.BeginUpdate ;
TreeView.Items.Clear ; //Fill Node and Expand all nod
FillTreeNode(TreeView.Items[0]);
TreeView.FullExpand;
TreeView.Items.EndUpdate ; TreeView.Items[1].Selected := True;
end;
Comment from leeon Date: 05/05/2003 10:54AM PDT
this is a new folder's method.u maybe know how to do it.read this source and i post source later, Inputform is writing strings form.don't care that.procedure TBook.NewFolderExecute(Sender: TObject);
var
ParentID: Integer;
FolderName: String;
TreeNode: TTreeNode;
begin
if TreeView.Selected = nil then Exit;
ParentID := Integer(TreeView.Selected.Data); if ShowInputForm(FolderName, SNewFolder, SFolderName) then
begin
FolderTable.Filtered := False;
FolderTable.Append;
FolderTable.FieldByName('ParentID').AsInteger := ParentID;
FolderTable.FieldByName('Name').AsString := FolderName;
FolderTable.Post ; TreeNode := TreeView.Items.AddChild(TreeView.Selected, FolderName);
TreeNode.Data := Pointer(FolderTable.FieldByName('ID').AsInteger);
TreeNode.SelectedIndex := 1;
TreeNode.MakeVisible ;
TreeNode.Selected := True;
end;
end;
Comment from z27 Date: 05/05/2003 05:27PM PDT
Thank you very much!
Comment from leeon Date: 05/05/2003 07:26PM PDT
:) u r welcome.here is delete folder methodyou'd better read this careful//cardtable is File table, FolderTable save it's dataprocedure TBook.DeleteFolderExecute(Sender: TObject);
var
TreeNode: TTreeNode;
FolderID, R: Integer;
begin
if TreeView.Selected = nil then Exit;
TreeNode := TreeView.Selected ;
if TreeNode.AbsoluteIndex in [0,1] then Exit; R := MessageBox(
Application.Handle,
PChar(SQueryDeleteFolder),
PChar('Are you sure to delete the folder?'),
36);
if R = ID_NO then Exit; FolderID := Integer(TreeNode.Data);
FolderTable.Filtered := False;
FolderTable.IndexName := ''; if FolderTable.FindKey([FolderID]) then
begin
FolderTable.Delete ; CardTable.Filtered := False;
CardTable.IndexName := 'ByFolderID';
while CardTable.FindKey([FolderID]) do
begin
CardTable.Delete;
end; TreeNode.Delete ;
end;
end;