如何在一级目录下动态新增二级目录,例如:
--主材料
---- 二级目录
---- 二级目录
--辅材
---- 二级目录
要求自动判断新增到所属一级目录下,烦请附个简短代码,谢谢!
已有Combobox选取一级目录 Edit1,Edit2为二级目录输入框,Button为添加按钮。
--主材料
---- 二级目录
---- 二级目录
--辅材
---- 二级目录
要求自动判断新增到所属一级目录下,烦请附个简短代码,谢谢!
已有Combobox选取一级目录 Edit1,Edit2为二级目录输入框,Button为添加按钮。
看了你的链接,那里有能判断如何添加到对应的哪个父结点吗?TreeView已显示数据库记录
0101
0102
02
0201
……
然后再在写代码逐个比较form编号 插入就可以了。
var
NodeMsg:pNodeMsg; // Ö¸Õë±äÁ¿
lnCurLevel,lnOperMode:Integer;
lsPrmpt:String;
procedure Tfm_Main.RefreshPowerTreesys(trvPowerTreeView:TcxTreeView;lnType:Integer;lsFindFunCD:String;lbNeedLocateFunCD:Boolean);
var
nodRoot,nodParentNode,nodCurNode,nodPreNode,nodFindChargeCD:TTreeNode;
lsCurPowerCD,lsPrePowerCD:String;
begin
trvPowerTreeView.Items.Clear;
nodRoot:=trvPowerTreeView.Items.Add(trvPowerTreeView.TopItem,'²ÍÒûϵͳ');
nodRoot.ImageIndex:=42;
nodRoot.SelectedIndex:=42;
New(NodeMsg);
NodeMsg^.FunCD:='';
nodRoot.Data:=NodeMsg;
nodPreNode:=nodRoot;
trvPowerTreeView.FullCollapse;
with aqPowerList do
begin
Close;
Parameters.ParamByName('type').Value :=0;
Parameters.ParamByName('funid').Value:=0;
Parameters.ParamByName('branch').Value:=lsBranch;
Open;
while not eof do
begin
if Trim(FieldByName('FunCD').AsString)='' then
begin
nodParentNode:=nodRoot;
lsCurPowerCD:='';
lsPrePowerCD:='';
end
else
begin
lsCurPowerCD:=Trim(FieldByName('FunCD').AsString);
lsPrePowerCD:=Trim(pNodeMsg(nodPreNode.Data)^.FunCD);
if Length(lsCurPowerCD)>Length(lsPrePowerCD) then
begin
if (lsPrePowerCD='') or (Copy(lsCurPowerCD,1,Length(lsPrePowerCD))=lsPrePowerCD) then nodParentNode:=nodPreNode;
end
else
if Length(lsCurPowerCD)=Length(lsPrePowerCD) then
begin
nodPreNode:=nodPreNode.Parent;
lsPrePowerCD:=Trim(pNodeMsg(nodPreNode.Data)^.FunCD);
if (lsPrePowerCD='') or (Copy(lsCurPowerCD,1,Length(lsPrePowerCD))=lsPrePowerCD) then nodParentNode:=nodPreNode;
end
else
if Length(lsCurPowerCD)<Length(lsPrePowerCD) then
begin
nodCurNode:=nodPreNode;
while (nodCurNode<>nil) and (nodCurNode.Level>0) do
begin
if nodCurNode.Parent<>nil then
begin
nodPreNode:=nodCurNode.Parent;
lsPrePowerCD:=Trim(pNodeMsg(nodPreNode.Data)^.FunCD);
if (lsPrePowerCD='') or (Copy(lsCurPowerCD,1,Length(lsPrePowerCD))=lsPrePowerCD) then
begin
nodParentNode:=nodPreNode;
Break;
end
else
nodCurNode:=nodPreNode;
end;
end;
end;
end;
if nodParentNode<>nil then
begin
New(NodeMsg);
NodeMsg^.FunCD:=FieldValues['FunCD'];
NodeMsg^.FunID:=FieldValues['FunID'];
NodeMsg^.BeEnd :=FieldValues['BeEnd'];
NodeMsg^.Fundesc:=FieldValues['Fundesc'];
// nodCurNode:=trvPowerTreeView.Items.AddChild(nodParentNode,FieldValues['FunCD']+' '+Trim(Trim(FieldValues['FunDesc'])));
nodCurNode:=trvPowerTreeView.Items.AddChild(nodParentNode,FieldValues['FunCD']+Trim(Trim(FieldValues['FunDesc'])));
nodCurNode.Data:=NodeMsg;
if nodCurNode.Parent<>nil then
begin
if nodCurNode.Parent.Level>1 then nodCurNode.Parent.ImageIndex:=41
else if nodCurNode.Parent.Level<>0 then nodCurNode.Parent.ImageIndex:=39
else nodCurNode.Parent.ImageIndex:=42;
end;
nodCurNode.ImageIndex:=40;
nodCurNode.SelectedIndex:=38;
nodPreNode:=nodCurNode;
if Trim(lsFindFunCD)<>'' then
if Trim(pNodeMsg(nodPreNode.Data)^.FunCD)=lsFindFunCD then nodFindChargeCD:=nodCurNode;
end;
Next;
end;
end;
nodRoot.Expanded:=True;
if nodFindChargeCD<>nil then
begin
trvPowerTreeView.Selected:=nodFindChargeCD;
if lbNeedLocateFunCD then
begin
nodCurNode:=trvPowerTreeView.Selected;
if nodCurNode.Parent<>nil then trvPowerTreeView.Selected:=nodCurNode.Parent;
end;
end
else
trvPowerTreeView.TopItem;
var
s1,s2,s3,s4,s:string;
i,m,n:Integer;
tn:TTreeNode;
begin
s1:=self.Edit1.Text;
s2:=self.Edit2.Text;
if (s1='') or (s2='') then
begin
MessageBox(Application.Handle,'信息填写不完整','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
i:=Length(s1);
if i=2 then//说明是一级目录
begin
m:=self.TreeView1.Items.Count;
if m>0 then
begin
for n:=0 to m-1 do
begin
if self.TreeView1.Items[n].Parent<>nil then
Continue;
s:=self.TreeView1.Items[n].Text;
s:=Copy(s,1,2);
if s=s1 then
begin
MessageBox(Application.Handle,'编号已经存在','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
end;
self.TreeView1.Items.AddChild(nil,s1+' '+s2);
end
else
self.TreeView1.Items.AddChild(nil,s1+' '+s2);
Exit;
end;
if i=4 then//说明是二级目录
begin
s3:=Copy(s1,1,2);//对应的一级目录
m:=Self.TreeView1.Items.Count;
if m=0 then
begin
MessageBox(application.Handle,'未找到对应的一级目录','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
tn:=nil;
for n:=0 to m-1 do
begin
if self.TreeView1.Items[n].Parent<>nil then
Continue;
s:=self.TreeView1.Items[n].Text;
s4:=Copy(s,1,2);
if s4<>s3 then//不是对应的一级目录
Continue;
tn:=self.TreeView1.Items[n];//这个就是对应的一级目录
Break;
end;
if tn=nil then
begin
MessageBox(application.Handle,'未找到对应的一级目录','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
m:=tn.Count;
if m=0 then
self.TreeView1.Items.AddChild(tn,s1+' '+s2)
else
begin
for n:=0 to m-1 do
begin
s:=tn.Item[n].Text;
s:=Copy(s,1,4);
if s=s1 then
begin
MessageBox(Application.Handle,'输入的编号已经存在','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
end;
self.TreeView1.Items.AddChild(tn,s1+' '+s2);
end;
Exit;
end;
MessageBox(application.Handle,'输入的编号不合法','信息',MB_OK or MB_ICONINFORMATION);
end;