起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 149|回复: 9

【结帖】请教一个checkbiztreeview的问题

[复制链接]
发表于 2008-8-29 16:06:20 | 显示全部楼层 |阅读模式
在组织机构多选窗体中,如果通过代码实现树中节点变成选中状态。
我写了一个方法
//通过传入的列表进行机构树内选项的自动选中
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事件内调用的。
回复

使用道具 举报

 楼主| 发表于 2008-8-29 16:50:01 | 显示全部楼层
在线等,不知道如何搞定checkbiztreeview啊!
回复 支持 反对

使用道具 举报

发表于 2008-8-29 18:45:52 | 显示全部楼层
楼主,没怎么明白,你能否贴图说一下要实现什么样的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-30 09:38:01 | 显示全部楼层
我这个是在组织机构多选窗体中增加的功能,实现的功能就是当其他功能调用这个窗口的时候,如果传入了一个TSTRINGLIST的时候,就在树自动加载完成后,对当前树内节点根据TSTRINGLIST内的OBJECT的值来进行选择,将TSTRINGLIST内的值对应的树内节点选中并显示成勾选状态
回复 支持 反对

使用道具 举报

发表于 2008-8-30 13:20:22 | 显示全部楼层
可以用该控件的checked属性选中或取消选中某节点。
具体的用法,请参考用户手册第十章 10.9.2
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-30 14:53:39 | 显示全部楼层
那我写的这个方法,有加载一个checked方法,也没有效果啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-30 15:09:28 | 显示全部楼层
我要说的是在加载这个窗体的时候,当时树上并没有节点被SELECTED,也没有节点被CHECKED,而是要通过TSTRINGLIST内的对象,来确认是否有对应树节点,如果有的话就改变当前节点前面的图标为选中。
回复 支持 反对

使用道具 举报

发表于 2008-8-30 15:35:27 | 显示全部楼层
procedure TMainForm.Button2Click(Sender: TObject);
var
  lNdoe: TBizNode;
// lNdoe: TBizNode;
  lBizURL: TBizURL;
begin
  lBizURL:= TBizURL.Create;
try lBizURL.URL := 'Org:\ROOT\JG1.OGN\BM1.DPT\GW2.PTM\RY3.psm';
// lNode.Text := 'Org:\ROOT\JG1.OGN\BM1.DPT\GW2.PTM\RY3.psm';
  lNdoe := CheckBizTreeView1.BizTree.FindNodeByBizURL(lBizURL);  在这里判断,如果结点为空说明没找到
  CheckBizTreeView1.SelectedNode := lNdoe;
  CheckBizTreeView1.Checked[CheckBizTreeView1.Selected] := true;
  //CheckBizTreeView1.ReloadTree;
finally
   lBizURL.free;
end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-1 09:45:10 | 显示全部楼层
已经搞定!谢谢了,可以结贴了!
最后的方法
procedure TCOMPLEXORGFORM.SetTreeNodeChecks(ABizUrls: TStringList);
var
  i,j:integer;
  IdUrl,sUrl:TBizUrl;
  Id,PText:String;
  ANode:TBizNode;
  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 := cbtvDept.BizTree.FindNodeByBizURL(IdUrl);
      ANodes.AddObject(id,idUrl);
      cbtvDept.SelectedNode := ANode;
      cbtvDept.Checked[cbtvDept.Selected] := True;
    end;
  end;
  ANodes.Free;
end;
回复 支持 反对

使用道具 举报

发表于 2008-9-1 09:47:04 | 显示全部楼层
谢谢楼主反馈。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-21 04:05 , Processed in 0.048839 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表