这是我编的一个小程序还不完善你可以看看 procedure TForm1.FormCreate(Sender: TObject); var TreeNode,TreeChildNode,StudentNode : TTreeNode; CID : Integer; begin ADOTableClass_Info.Close; ADOTableClass_Info.Open; ADOTableClass_Info.First; TreeView1.Items.BeginUpdate; TreeNode := TreeView1.Items.Add(nil,'班级'); while not ADOTableClass_Info.Eof do begin TreeChildNode := TreeView1.Items.AddChild(TreeNode, ADOTableClass_Info.FieldByName('Class_Name').AsString); TreeChildNode.Data := PChar(ADOTableClass_Info.FieldByName('Class_ID').AsInteger); CID := ADOTableClass_Info.FieldByName('Class_ID').AsInteger; if ADOQueryStudent_Info.State in [dsOpening] then ADOQueryStudent_Info.Close; ADOQueryStudent_Info.SQL.Clear; ADOQueryStudent_Info.SQL.Add('Select * From Student_Info'); ADOQueryStudent_Info.SQL.Add('Where Class_ID='+IntToStr(CID)); ADOQueryStudent_Info.Open; while not ADOQueryStudent_Info.Eof do begin StudentNode:=TreeView1.Items.AddChild(TreeChildNode, ADOQueryStudent_Info.FieldByName('Name').AsString); StudentNode.Data := PChar(ADOQueryStudent_Info.FieldByName('Student_ID').AsInteger); ADOQueryStudent_Info.Next; end; ADOTableClass_Info.Next; end; TreeView1.Items.EndUpdate; ADOQueryStudent_Info.Close; ADOQueryStudent_Info.SQL.Clear; ADOQueryStudent_Info.SQL.Add('Select * From Student_Info'); ADOQueryStudent_Info.SQL.Add('Where Student_ID = :Student_ID'); end;
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); var //Str : String; SID : integer; begin EditedNode := Node; if (Node.Level <> 0) then begin SID := Integer(Node.Data); //Str := IntToStr(SID); //ShowMessage(Str); ADOQueryStudent_Info.Close; ADOQueryStudent_Info.Parameters.ParamByName('Student_ID').value := SID; ADOQueryStudent_Info.Open;
procedure Tfrm_UserManage.TreeViewShowChild(ANode: TTreeNode); var AChildList: TList; AChildInfo: TdpNodeInfo; AChildNode, TmpNode: TTreeNode; i: integer; begin // AChildList := TList.Create; ANode.DeleteChildren; if Db_FindChildList(ANode.Handle, TDpNodeInfo(ANode.Data), AChildList) then begin for i := 0 to AChildList.Count - 1 do begin AChildInfo := TDpNodeInfo(AChildList.Items[i]); AChildNode := TreeView1.Items.AddChild(ANode, AChildInfo.Name); if Db_DpNodeHasChild( AChildInfo ) then begin // add a tmp node in order to expand TmpNode := TreeView1.Items.AddChild(AChildNode, '); TmpNode.Data := nil; end; AChildNode.ImageIndex := AChildInfo.ImageIndex; AChildNode.SelectedIndex := AChildInfo.SelectedIndex; AChildNode.Data := AChildInfo; end; end; AChildList.Free; end;
procedure Tfrm_UserManage.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); begin // if has child then expand if Node.Item[0].Data = nil then TreeViewShowChild(Node); ListViewShowUserList(Node); end;
//-------------------------------------------------------------------------------- procedure TFrmBaseData_Medicine.CreateTreeNode_ZClass(NodeItems: TTreeNodes; FatherNode: TTreeNode); var CurNode : TTreeNode; P : PTreeNodeLinkData; begin NodeItems.BeginUpdate; with AdoqryZB do begin Close; SQL.Clear; Parameters.Clear; SQL.Add(' Select MediCName, MediCID From MediClass_Base '); SQL.Add(' Where Len(MediCID) = 2 '); SQL.Add(' Order By MediCName '); Open; if RecordCount > 0 then begin First; while not(Eof) do begin CurNode := NodeItems.AddChild(FatherNode, FieldByName('MediCName').AsString); CurNode.ImageIndex := CNm_TreeNode_ImageIndex_ZClass; CurNode.SelectedIndex := CNm_TreeNode_ImageIndex_ZClass; CurNode.StateIndex := CNm_TreeNode_ImageIndex_ZClass; New(P); P^.ItemID := FieldByName('MediCID').AsString; P^.Style := CNm_TreeNodeStyle_ZClass; P^.Loaded := True; CurNode.Data := P; CreateTreeNode_MXClass(NodeItems, CurNode, P^.ItemID); if not(Eof) then Next; end; //end while end; //end if Close; end; //end with NodeItems.EndUpdate; end;
//-------------------------------------------------------------------------------- procedure TFrmBaseData_Medicine.CreateTreeNode_MXClass(NodeItems: TTreeNodes; FatherNode: TTreeNode; sZID: String); var CurNode : TTreeNode; P1, P2 : PTreeNodeLinkData; begin with AdoqryMX do begin Close; SQL.Clear; Parameters.Clear; SQL.Add(' Select MediCName, MediCID From MediClass_Base '); SQL.Add(' Where (Len(MediCID) > 2) '); SQL.Add(' And (SubString(MediCID, 1, 2) = :ZID) '); SQL.Add(' Order By MediCID '); Parameters.ParamByName('ZID').Value := sZID; Open; if RecordCount > 0 then begin First; while not(Eof) do begin CurNode := NodeItems.AddChild(FatherNode, FieldByName('MediCName').AsString); CurNode.ImageIndex := CNm_TreeNode_ImageIndex_MXClass; CurNode.SelectedIndex := CNm_TreeNode_ImageIndex_MXClass; CurNode.StateIndex := CNm_TreeNode_ImageIndex_MXClass; New(P1); P1^.ItemID := FieldByName('MediCID').AsString; P1^.Style := CNm_TreeNodeStyle_MXClass; P1^.Loaded := False; CurNode.Data := P1; // CurNode := NodeItems.AddChild(CurNode, '); CurNode.ImageIndex := CNm_TreeNode_ImageIndex_Medicine; CurNode.SelectedIndex := CNm_TreeNode_ImageIndex_Medicine; CurNode.StateIndex := CNm_TreeNode_ImageIndex_Medicine; New(P2); P2^.ItemID := '; P2^.Style := CNm_TreeNodeStyle_Medicine; P2^.Loaded := True; CurNode.Data := P2; if not(Eof) then Next; end; //end while end; //end if Close; end; //end with end;
//-------------------------------------------------------------------------------- procedure TFrmBaseData_Medicine.CreateTreeNode_Medicine(NodeItems: TTreeNodes; FatherNode: TTreeNode); var P, PT : PTreeNodeLinkData; cNode, CurNode : TTreeNode; begin P := FatherNode.Data; if P = nil then Exit; if P^.Style <> CNm_TreeNodeStyle_MXClass then Exit; if P^.Loaded then Exit; P^.Loaded := True; cNode := FatherNode.getFirstChild; if cNode <> nil then NodeItems.Delete(cNode); with AdoqryMX do begin Close; SQL.Clear; Parameters.Clear; SQL.Add(' Select MediName, MediID, MediAB From MedicineInfo_Base '); SQL.Add(' Where MediCID = :CID '); SQL.Add(' Order By MediName '); Parameters.ParamByName('CID').Value := P^.ItemID; Open; if RecordCount > 0 then begin First; while not(Eof) do begin CurNode := NodeItems.AddChild(FatherNode, FieldByName('MediName').AsString); CurNode.ImageIndex := CNm_TreeNode_ImageIndex_Medicine; CurNode.SelectedIndex := CNm_TreeNode_ImageIndex_Medicine; CurNode.StateIndex := CNm_TreeNode_ImageIndex_Medicine; New(PT); PT^.ItemID := FieldByName('MediID').AsString; PT^.MediAB := FieldByName('MediAB').AsString; PT^.Style := CNm_TreeNodeStyle_Medicine; PT^.Loaded := True; CurNode.Data := PT; if not(Eof) then Next; end; //end while end; //end if Close; end; //end with end;
//-------------------------------------------------------------------------------- procedure TFrmBaseData_Medicine.FreeNodeData(Node: TTreeNode); var P : PTreeNodeLinkData; ChildNode : TTreeNode; begin if Node = nil then Exit; P := Node.Data; if P <> nil then Dispose(P); if Node.HasChildren then begin ChildNode := Node.getFirstChild; while ChildNode <> nil do begin FreeNodeData(ChildNode); ChildNode := Node.GetNextChild(ChildNode); end; end; end;
//-------------------------------------------------------------------------------- procedure TFrmBaseData_Medicine.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeNodeData(TrvData.Items[0]); AdoqryCommon.Close; AdoqryZB.Close; AdoqryMX.Close; end;
//-------------------------------------------------------------------------------- procedure TFrmBaseData_Medicine.TrvDataExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); var P : PTreeNodeLinkData; begin P := Node.Data; if P = nil then Exit; if P^.Style = CNm_TreeNodeStyle_MXClass then begin if P^.Loaded then Exit; screen.Cursor := crHourGlass; CreateTreeNode_Medicine(TrvData.Items, Node); screen.Cursor := crDefault; end; end;
----------------------------------------------
-