好象没有必要递归吧,非递归也不反对。 procedure TForm1.Delete(node: TTreeNode); var T: TTreeNode; begin if node.HasChildren then begin t:= node.getFirstChild; delete(t); end; TreeView1.Items.Delete(node); end;
procedure TForm1.Delete(node: TTreeNode); var T: TTreeNode; begin while node.HasChildren do begin t:= node.getFirstChild; delete(t); end; TreeView1.Items.Delete(node); end;
不递归的 procedure Delete(node: TTreeNode); begin TreeView1.Items.Delete(node); end;
可以不用递归(当然用也是可以的): var ParentNode,CurrentNode: TTreeNode; L,C: Integer; begin // ParentNode := ; if not ParentNode.HasChildren then Exit; C := 0; CurrentNode := ParentNode.GetNext; L := CurrentNode.Level; while L > ParentNode.Level do begin Inc(C); CurrentNode := ParentNode.GetNext; L := CurrentNode.Level; end; //删除数据库中ID为ParentNode.AbsoluteIndex到 ParentNode.AbsoluteIndex+C的记录 ParentNode.Delete; end;———————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 ————————————————————————————————————
删除时可不用递归 创建树时可能用递归全局变量: delid:string //保存要删除的所有idprocedure deleteA(Node:TTreeNode); begin //删除树节点 deleteNode(Node); //删除数据库纪录 delid:='('+Copy(delid,1,Length(delid)-1)+')'; With Tquery.Create(self) do begin DataBaseName:='XXXXXXXXXXXXXX' Sql.text:='delete from xxc where id in '+delid; ExecSql; free; end; end;
procedure deleteNode(node: TTreeNode); var T: TTreeNode; p:^Integer; begin while node.HasChildren do begin t:= node.getFirstChild; deleteNode(t); end; p:=Node.Data; delid:=delid+p^+',' Dispose(p); TreeView1.Items.Delete(node); end;不递归时根据TTreeNode.Level 纪录某一个节点下的所有子节点 然后一次性删除
我不是说删除treeview啊,是删除数据库中的数据啊
procedure TForm1.Delete(node: TTreeNode); var T: TTreeNode; SQL: String; ID: string; begin ID:= TYourType(Node.Data).ID; SQL:= 'Delete from table where id ='+ID+' or PARENT_ID = '+ID; EXESQL(ADOQuery,SQL,True); if node.HasChildren then begin t:= node.getFirstChild; delete(t); end; TreeView1.Items.Delete(node); end;
procedure TForm1.Delete(send:Object); begin NodeDelete(TreeView.Selected);end;procedure NodeDelete(Node: TTreeNode); var p_Node: TTreeNode; SQL: String; ID: string; begin while Node.HasChildren do begin p_Node := Node.GetFirstChild; if P_Node.HasChildRen then NodeDelete(p_Node);//递归 delete(P_Node); end;
ID:= TYourType(Node.Data).ID; SQL:= 'Delete from table where ID = '''+ID+''''; EXESQL(ADOQuery,SQL,True); end;
//补充 procedure TForm1.Delete(send:Object); begin NodeDelete(TreeView.Selected); treeView.Selected.delete; end;procedure NodeDelete(Node: TTreeNode); var p_Node: TTreeNode; SQL: String; ID: string; begin while Node.HasChildren do begin p_Node := Node.GetFirstChild; if P_Node.HasChildRen then NodeDelete(p_Node);//递归 delete(P_Node); end;
ID:= TYourType(Node.Data).ID; SQL:= 'Delete from table where ID = '''+ID+''''; EXESQL(ADOQuery,SQL,True); end;
procedure TForm1.Delete(node: TTreeNode);
var
T: TTreeNode;
begin
if node.HasChildren then
begin
t:= node.getFirstChild;
delete(t);
end;
TreeView1.Items.Delete(node);
end;
var
T: TTreeNode;
begin
while node.HasChildren do
begin
t:= node.getFirstChild;
delete(t);
end;
TreeView1.Items.Delete(node);
end;
procedure Delete(node: TTreeNode);
begin
TreeView1.Items.Delete(node);
end;
var
ParentNode,CurrentNode: TTreeNode;
L,C: Integer;
begin
// ParentNode := ;
if not ParentNode.HasChildren then Exit;
C := 0;
CurrentNode := ParentNode.GetNext;
L := CurrentNode.Level;
while L > ParentNode.Level do
begin
Inc(C);
CurrentNode := ParentNode.GetNext;
L := CurrentNode.Level;
end;
//删除数据库中ID为ParentNode.AbsoluteIndex到 ParentNode.AbsoluteIndex+C的记录
ParentNode.Delete;
end;————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
创建树时可能用递归全局变量:
delid:string //保存要删除的所有idprocedure deleteA(Node:TTreeNode);
begin
//删除树节点
deleteNode(Node);
//删除数据库纪录
delid:='('+Copy(delid,1,Length(delid)-1)+')';
With Tquery.Create(self) do
begin
DataBaseName:='XXXXXXXXXXXXXX'
Sql.text:='delete from xxc where id in '+delid;
ExecSql;
free;
end;
end;
procedure deleteNode(node: TTreeNode);
var
T: TTreeNode;
p:^Integer;
begin
while node.HasChildren do
begin
t:= node.getFirstChild;
deleteNode(t);
end;
p:=Node.Data;
delid:=delid+p^+','
Dispose(p);
TreeView1.Items.Delete(node);
end;不递归时根据TTreeNode.Level 纪录某一个节点下的所有子节点
然后一次性删除
var
T: TTreeNode;
SQL: String;
ID: string;
begin
ID:= TYourType(Node.Data).ID;
SQL:= 'Delete from table where id ='+ID+' or PARENT_ID = '+ID;
EXESQL(ADOQuery,SQL,True);
if node.HasChildren then
begin
t:= node.getFirstChild;
delete(t);
end;
TreeView1.Items.Delete(node);
end;
我在上面不是告诉你:
//删除数据库中ID为ParentNode.AbsoluteIndex到 ParentNode.AbsoluteIndex+C的记录,而C已经求出来了,用一个SQL语句就可以完成这些记录的删除了啊!!!————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
begin
NodeDelete(TreeView.Selected);end;procedure NodeDelete(Node: TTreeNode);
var
p_Node: TTreeNode;
SQL: String;
ID: string;
begin
while Node.HasChildren do
begin
p_Node := Node.GetFirstChild;
if P_Node.HasChildRen then
NodeDelete(p_Node);//递归
delete(P_Node);
end;
ID:= TYourType(Node.Data).ID;
SQL:= 'Delete from table where ID = '''+ID+'''';
EXESQL(ADOQuery,SQL,True);
end;
procedure TForm1.Delete(send:Object);
begin
NodeDelete(TreeView.Selected);
treeView.Selected.delete;
end;procedure NodeDelete(Node: TTreeNode);
var
p_Node: TTreeNode;
SQL: String;
ID: string;
begin
while Node.HasChildren do
begin
p_Node := Node.GetFirstChild;
if P_Node.HasChildRen then
NodeDelete(p_Node);//递归
delete(P_Node);
end;
ID:= TYourType(Node.Data).ID;
SQL:= 'Delete from table where ID = '''+ID+'''';
EXESQL(ADOQuery,SQL,True);
end;