我有一个表如下:    编号     父类别       子类别
    T001     BBBB         bbbbbb
    T002     BBBB         dddddd
    T003     CCCC         cccccc
    T004     CCCC         eeeeee我想在TreeView里而显示上面那个表。   +BBBB
   | |---bbbbbb
   | |---dddddd
   |
   +CCCC
     |---cccccc
     |---eeeeee单我双击cccccc时,就打开另一个表中编号为T004的所有资料。
请问,我应该用什么来放这个[编号]好?怎样与那个[子类别]关联起来?
编号是不可能重复的,但,那个了类别有可能重复,所以不能用子类别来查询。  用数组吗?数组的下标怎样与[子类别]的item关联起来? 应该用到TreeView联系起来?我知道TreeView的每个Items里面有data属性,可以放指针,不是,我对这个指针不熟。请问我该怎样用?另外,TreeView点右键选中那个项之后,当MouseUp时,又回到原来的那个,怎样解决????

解决方案 »

  1.   

    不是吧?没人????真的是好简单的问题,主要是我对TreeView不熟。分不够我再加!!!!!!!!
      

  2.   

    这个贴子一共是100分啊。
    另一个贴子是:
    http://expert.csdn.net/Expert/topic/1508/1508939.xml?temp=.6674463
      

  3.   

    http://pbcode.xiloo.com/lcxz.html有演示代码, 自己看看
      

  4.   

    呵呵,刚写完代码,假设字段名为No, Parent, Child:var NoList: TStringList;  // 保存编号procedure TForm1.FormCreate(Sender: TObject);
      function GetParentNode(s: string): TTreeNode;
      var i: Integer;
      begin
        with TreeView1 do
        for i := 0 to Items.Count - 1 do
          if (Items[i].Level = 0) and (Items[i].Text = s) then begin
            Result := Items[i];
            Exit;
          end;
        Result := nil;
      end;
    var tNode: TTreeNode;
    begin
      NoList := TStringList.Create;
      TreeView1.Items.Clear;
      Table1.First;
      with Table1 do
      while not Eof do begin
        tNode := GetParentNode(FieldByName('Parent').AsString);
        if tNode = nil then
          tNode := TreeView1.Items.AddChild(nil, FieldByName('Parent').AsString);
        tNode := TreeView1.Items.AddChild(tNode, FieldByName('Child').AsString);
        NoList.Add(FieldByName('No').AsString);  // 保存编号
        tNode.Data := Pointer(NoList.Count-1);   // 保存编号位置在结点中
        Next;
      end;
    end;procedure TForm1.TreeView1DblClick(Sender: TObject);
    begin
      // 双击子类时取得编号
      if TreeView1.Selected.Level = 1 then
        ShowMessage(NoList[Integer(TreeView1.Selected.Data)]);
    end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      // 鼠标右键选中当前的结点
      if Button = mbRight then begin
        TreeView1.GetNodeAt(X, Y).Selected := True;
      end;
    end;