在组织机构多选窗体中,如果通过代码实现树中节点变成选中状态。
我写了一个方法
//通过传入的列表进行机构树内选项的自动选中
procedure TCOMPLEXORGFORM.SetTreeNodeChecks(ABizUrls: TStringList);
var
i,j:integer;
IdUrl,sUrl:TBizUrl;
Id,PText:String;
ANode,PNode:TTreeNode;
ANodes:TStringList;
begin
ANodes := TStringList.Create;
for i:=0 to ABizUrls.Count-1 do
begin
ANodes.Clear;
id := ABizUrls;
IdUrl := TBizUrl(ABizUrls.Objects);
if cbtvDept.BizTree.FindNodeByBizURL(IdUrl).BizURL = IdUrl then
begin
ANode := TTreeNode(cbtvDept.BizTree.FindNodeByBizURL(IdUrl));
ANodes.AddObject(id,idUrl);
//读取当前节点在树中的上级节点
PNode := TTreeNode(cbtvDept.BizTree.FindNodeByBizURL(IdUrl).Parent);
//循环读取上级节点直到首节点
While (TBizNode(PNode).DisplayName <> cbtvDept.TopItem.Text) do
begin
PText := cbtvDept.BizTree.FindNodeByBizURL(TBizNode(PNode).BizURL).Parent.DisplayName;
ANodes.AddObject(PText, TBizNode(PNode).BizURL);
PNode := TTreeNode(cbtvDept.BizTree.FindNodeByBizURL(TBizNode(PNode).BizURL).Parent);
end;
//将获得所有节点进行选中
for j:=ANodes.Count-1 downto 0 do
begin
sUrl := TBizUrl(ANodes.Objects[j]);
ANode := TTreeNode(cbtvDept.BizTree.FindNodeByBizURL(sUrl));
cbtvDept.SelectNode(ANode,True);
//cbtvDept.Checked[ANode]:= True;
if j<>0 then
begin
ANode.ImageIndex := cbtvDept.GrayCheckedImageIndex;
end
else
begin
ANode.ImageIndex := cbtvDept.CheckedImageIndex;
end;
if ANode.HasChildren then
ANode.Expand(True);
end;
//将节点纳入系统函数数据集
FCheckedSubordinationNodes.AddObject(Id,IdUrl);
FCheckedSubordinationNodeIDs.Add(IdUrl.ID);
end;
end;
end;
但是没有任何效果!我是在这个窗体的SHOW事件内调用的。 |