起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: ccseasy

【搞定】组织机构树问题**

[复制链接]
发表于 2007-6-28 16:13:49 | 显示全部楼层
看9楼
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-28 16:29:09 | 显示全部楼层
看不明白,你给写个我要的例子吧。
回复 支持 反对

使用道具 举报

发表于 2007-6-28 16:31:38 | 显示全部楼层
9楼给的连接中有例子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-28 16:44:32 | 显示全部楼层
unit Assist_Dept;

interface

uses
  Business.System, Business.Forms,OrgLib,Business.Model;

type
  TAssist_Dept = class(TForm)
    otvDept: TOrgTreeView;
    btnSubmit: TBitBtn;
    btnCancel: TBitBtn;
    procedure BizFormShow(Sender: TObject);
    procedure btnSubmitClick(Sender: TObject);
    procedure otvDeptInserting(Sender: TObject; ANode: TBaseNode; var Allow: Boolean);
    procedure btnCancelClick(Sender: TObject);
  private
    {private declarations}
     FNodes: TStrings;
  public
    {public declarations}
  end;

implementation


procedure TAssist_Dept.BizFormShow(Sender: TObject);
begin

FNodes := TStringList.Create;
  otvDept.ShowOptions := [TBizObjectKind.boBizServer,TBizObjectKind.boDept,
  TBizObjectKind.boFolder,TBizObjectKind.boOrgan, TBizObjectKind.boOrgServer,
    TBizObjectKind.boWorkGroup, TBizObjectKind.boWorkGroupMember];

  Tcommonfunc.InitTreeByRootFileName(otvDept,['Org:\ROOT\0BJ.ogn']);
  otvDept.AddStartWith('Org:\ROOT\2SHFS.ogn');
  otvDept.ReloadTree;
end;

procedure TAssist_Dept.btnSubmitClick(Sender: TObject);
var
  i : integer;
  tmparr : Array of char;
  strarr : Array of string;
  tmpNode : TBizNode;
begin
  SetLength(tmparr,1);
  tmparr[0] :=#10;
  strarr := otvDept.SelectedNodes.Text.Split(tmparr);
  for i := 0 to Length(strarr) -1 do
  jsdialogs.ShowError(otvDept.SelectedNodes.Text ,strarr);

  tmpNode :=otvDept.SelectedNode;
while (tmpNode.Parent.ID <> 'ROOT') do
begin
    jsdialogs.ShowError(tmpNode.Parent.ID,tmpNode.Parent.DisplayName);
    tmpNode  := tmpNode.Parent;
end;
end;

procedure TAssist_Dept.otvDeptInserting(Sender: TObject; ANode: TBaseNode; var Allow: Boolean);
begin

Allow :=  FNodes.IndexOfObject(ANode) <> -1;

end;

procedure TAssist_Dept.btnCancelClick(Sender: TObject);
  var
  lNodes1, lNodes2: TStrings;
  lNode: TBizNode;
  i: Integer;
begin
  lNodes1 := TStringList.Create;
  lNodes2 := TStringList.Create;
  lNode := BizTree.BizTreeStructure.FindNodeByBizURL(otvDept.SelectedNode.BizURL);
  lNodes2.AddObject(lNode.GUID, lNode);
  BizTree.BizTreeStructure.GetNodesTreeList(lNodes2, lNodes1, False,
        False, True, True);
  for i:=0 to lNodes1.Count-1 do
  begin
    if FNodes.IndexOf(TBizNode(lNodes1.Objects).BizURL.URL)<0 then
      FNodes.AddObject(TBizNode(lNodes1.Objects).BizURL.URL, lNodes1.Objects);
  end;
  otvDept.AddStartWithOrgRoot;
  otvDept.ReloadTree;
end;

end.
看看有什么问题吧,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-28 17:27:06 | 显示全部楼层
有一个orgtreeview,我只想让北京的节点显示全部部门,其余的分社只显示到根节点。比如,上海分社,就只显示上海分社,下面有节点也不显示,看看如何做吧。
回复 支持 反对

使用道具 举报

发表于 2007-6-28 17:34:27 | 显示全部楼层
procedure TAssist_Dept.otvDeptInserting(Sender: TObject; ANode: TBaseNode; var Allow: Boolean);
begin

Allow :=  FNodes.IndexOfObject(ANode) <> -1;

end;

你只要把北京分社的所有子都放到FNodes中
而且把上海分社等放到这个FNodes中就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-29 13:51:30 | 显示全部楼层
好象还是不可以,
回复 支持 反对

使用道具 举报

发表于 2007-6-29 13:58:12 | 显示全部楼层
现在是什么现象呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-29 14:02:19 | 显示全部楼层
procedure TAssist_Dept.otvDeptInserting(Sender: TObject; ANode: TBaseNode; var Allow: Boolean);
begin
if FNodes <> nil then
Allow :=  FNodes.IndexOfObject(ANode) <> -1;

end;
为什么这个在formCreate事件前执行????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-29 14:04:30 | 显示全部楼层
因为FNodes是在FormCreate的时间创建的,而现在不知道为什么
procedure TAssist_Dept.otvDeptInserting(Sender: TObject; ANode: TBaseNode; var Allow: Boolean);
begin

Allow :=  FNodes.IndexOfObject(ANode) <> -1;

end;
在FormCreate之前执行,就说Fnodes空引用错误。郁闷了。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-12 06:12 , Processed in 0.036263 second(s), 12 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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