我数据库里是个多层次关系,用一个parent_id和id关联,比如系统管理-用户管理-增加。。层次关系
我现在要实现的就是进入窗体的时候将数据库中的数据按层次显示在treeview控件里

解决方案 »

  1.   

    可以用循环,也可以用递归,也可以用现成的第三方控件(如cxDBTreeList)
    要看你数据库是怎么设计的了
      

  2.   

    http://blog.csdn.net/bdmh/article/details/5857236
      

  3.   

    了解下xml的解析,就行了,原理类似
      

  4.   

    SQL: string;
      vDRec, vGRec: integer;
      vDNode, vGNode, vUNode: TTreeNode;
      vRDept: PrDepartment;
      vRGroup: PrGroup;
      vRUser: PrUser;
    begin
      SQL := 'SELECT D.RecordID DRecID,D.DepartmentID,D.DName,D.DDescription,'
        + 'D.DepartmentPopedom,G.RecordID GRecID,G.GroupID,G.GName,G.GDescription,'
        + 'G.GroupPopedom,U.RecordID URecID,U.UserID,U.OName,U.OPassword,'
        + 'U.UserPopedom,U.CreateTime,U.ModifyTime FROM ODEPARTMENT D'
        + ' LEFT JOIN OGROUP G ON G.DepartmentID = D.DepartmentID'
        + ' LEFT JOIN OUSER U ON D.DepartmentID = U.DepartmentID and U.GroupID = G.GroupID'
        + ' ORDER BY D.RecordID,G.RecordID,U.RecordID';
      qrUser.SQL.Text := SQL;
      qrUser.Open;
      vDRec := 0;
      vGRec := 0;
      vGNode := nil;
      vDNode := nil;
      while not qrUser.Eof do
      begin
        if vDRec <> qrUser.FieldByName('DRecID').AsInteger then
        begin //增加部门节点
          vRDept := New(PrDepartment);
          vRDept.RecID := qrUser.FieldByName('DRecID').AsInteger;
          vRDept.DeptID := qrUser.FieldByName('DepartmentID').AsString;
          vRDept.Name := qrUser.FieldByName('DName').AsString;
          vRDept.Desc := qrUser.FieldByName('DDescription').AsString;
          vRDept.Popedom := Trim(qrUser.FieldByName('DepartmentPopedom').AsString);
          vRDept.Popedom := TCommFun.DencryptStr(vRDept.Popedom, vRDept.Name);
          vDNode := tvUser.Items.AddChildObject(nil, vRDept.Name, vRDept);
          vDNode.SelectedIndex := 0;
          vDNode.ImageIndex := 0;
          vDRec := vRDept.RecID;
          vGRec := 0;
        end;
        if vGRec <> qrUser.FieldByName('GRecID').AsInteger then
        begin //增加班组节点
          vRGroup := New(PrGroup);
          vRGroup.RecID := qrUser.FieldByName('GRecID').AsInteger;
          vRGroup.GroupID := qrUser.FieldByName('GroupID').AsString;
          vRGroup.DeptID := qrUser.FieldByName('DepartmentID').AsString;
          vRGroup.Name := qrUser.FieldByName('GName').AsString;
          vRGroup.Desc := qrUser.FieldByName('GDescription').AsString;
          vRGroup.Popedom := Trim(qrUser.FieldByName('GroupPopedom').AsString);
          vRGroup.Popedom := TCommFun.DencryptStr(vRGroup.Popedom, vRGroup.Name);
          vGNode := tvUser.Items.AddChildObject(vDNode, vRGroup.Name, vRGroup);
          vGNode.SelectedIndex := 1;
          vGNode.ImageIndex := 1;
          vGRec := vRGroup.RecID;
        end;
        //增加用户节点
        vRUser := New(PrUser);
        vRUser.RecID := qrUser.FieldByName('URecID').AsInteger;
        vRUser.UserID := qrUser.FieldByName('UserID').AsString;
        vRUser.DeptID := qrUser.FieldByName('DepartmentID').AsString;
        vRUser.GroupID := qrUser.FieldByName('GroupID').AsString;
        vRUser.Name := qrUser.FieldByName('OName').AsString;
        vRUser.Pwd := TCommFun.DencryptStr(qrUser.FieldByName('OPassword').AsString, vRUser.Name);
        vRUser.Popedom := Trim(qrUser.FieldByName('UserPopedom').AsString);
        vRUser.Popedom := TCommFun.DencryptStr(vRUser.Popedom, vRuser.Name);
        vRUser.CreateTime := qrUser.FieldByName('CreateTime').AsString;
        vRUser.ModifiedTime := qrUser.FieldByName('ModifyTime').AsString;    vUNode := tvUser.Items.AddChildObject(vGNode, vRUser.Name, vRUser);
        vUNode.SelectedIndex := 2;
        vUNode.ImageIndex := 2;
        qrUser.Next;
      end;
      

  5.   

    @bdmh:不好意思,分给错人了  不小心给了你楼下的。
    以后有帖,还是麻烦你跟进哦 。。下次补分给你