首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 中用treeview控件读出数据库中的数据解决思路

2013-01-26 
delphi 中用treeview控件读出数据库中的数据我数据库里是个多层次关系,用一个parent_id和id关联,比如系统

delphi 中用treeview控件读出数据库中的数据
我数据库里是个多层次关系,用一个parent_id和id关联,比如系统管理-用户管理-增加。。层次关系
我现在要实现的就是进入窗体的时候将数据库中的数据按层次显示在treeview控件里
[解决办法]
可以用循环,也可以用递归,也可以用现成的第三方控件(如cxDBTreeList)
要看你数据库是怎么设计的了
[解决办法]
了解下xml的解析,就行了,原理类似
[解决办法]
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;

热点排行