当前位置:主页>销售管理软件> 列表

TreeView的问题 找家电销售管理软件

库存管理软件版1楼: 在点击某个节点后,判断如果该节点有子节点,则遍历该节点的所有子节点,改变子节点的StateIndex为2,请问如何实现,请提供源码!
谢谢大家了!

2楼: 写一个递归的过程就可以了.很多这样的例子. 如家电销售管理软件

3楼: procedure addsub(rootnode:ttreenode;rootnodeid:integer;atree:ttreeview);
var
adoqry:tadoquery;
anode:ttreenode;
begin
with adoqry do
begin
connectionstring := ...
sql.text := ''select * from tab where sjid = '' + inttostr(rootnodeid);
open;
first;
while not eof do//如果查询没有结果,说明该结点已经为树的末梢
begin
anode := atree.items.addchild(rootnode,fieldbyname(''名称'').asstring);//在当前结点处增加子结点,并返回结点
addsub(anode,fieldbyname(''id'').asinteger,atree);//再对该结点进行递归,在树中增加该结点的所有子结点
next;
end;
close;
end;
end;
--------------
以上是展开树的时候的递归,你可以参考一下.

4楼: to BabiBean:
能给出代码吗?谢谢!

5楼: 从当前节点的子节点开始查找,并不仅查找子节点,也会遍历同级和父级节点
procedure TFrmWindowView.btnSearchClick(Sender: TObject);
//查找节点内容

function FindChild(
const ANode : TTreeNode;
const AText : string;
const AStart : Integer = 0
):Boolean;
//遍历子节点
var
i : Integer;
begin
Result := False;
for i := AStart to ANode.Count - 1 do
begin
if Pos(AText,UpperCase(ANode.Item[i].Text)) > 0 then
begin
ANode.Item[i].Selected := True;
Result := True;
Exit;
end;
Result := FindChild(ANode.Item[i],AText);
if Result then Exit;
end;
end;

function FindParent(
const ANode : TTreeNode;
const AText : string
):Boolean;
//遍历父节点
begin
Result := False;
if not Assigned(ANode.Parent) then Exit;
Result := FindChild(ANode.Parent,AText,ANode.Index + 1);
if not Result then


Result := FindParent(ANode.Parent,AText);
end;

var
sSearchText : string;
begin
if not Assigned(tv.Selected) or (edtSearch.Text = '''') then Exit;
sSearchText := UpperCase(edtSearch.Text);
if not FindChild(tv.Selected, sSearchText) then
FindParent(tv.Selected, sSearchText);
end;

6楼: 谢谢,接受答案了