数据库ca,表ba内容如下
A 1
A 2
B 3
B 4
C 5
C 6
显示为如下
A
|-1
|-2
B
|-3
|-4

|-5
|-6
请高手把源代码贴一下,万分感谢

解决方案 »

  1.   

    var
    i: integer;
    firstnode: TTreeNode;
    FieldName,Number: String;
    begin
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select FieldName from ba group by FieldName');
    adoquery1.Open;
    adoquery1.first;
    while not ADOquery1.Eof do
    begin
    FirstNode := TreeView1.Items.Add(TreeView1.Items.GetFirstNode,FieldName);
    adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.SQL.Add('select * from ba where YourName = FieldName');
    adoquery2.Open;
    adoquery2.first;
    while not ADOquery1.Eof do
    begin
    TreeView1.Items.AddChild(FirstNode,ADOQUERY2.FieldByName('Number').AsString);
    adoquery2.next;
    end;
    adoquery1.next;
    end;
    end;
      

  2.   

    //参考代码如下~~function StrLeft(const mStr: string; mDelimiter: string): string;
    begin
      Result := Copy(mStr, 1, Pos(mDelimiter, mStr) - 1);
    end; { StrLeft }function ListCount(mList: string; mDelimiter: string = ','): Integer;
    var
      I, L: Integer;
    begin
      Result := 0;
      if mList = '' then Exit;
      L := Length(mList);
      I := Pos(mDelimiter, mList);
      while I > 0 do begin
        mList := Copy(mList, I + Length(mDelimiter), L);
        I := Pos(mDelimiter, mList);
        Inc(Result);
      end;
      Inc(Result);
    end; { ListCount }function ListValue(mList: string; mIndex: Integer; mDelimiter: string = ','): string;
    var
      I, L, K: Integer;
    begin
      L := Length(mList);
      I := Pos(mDelimiter, mList);
      K := 0;
      Result := '';
      while (I > 0) and (K <> mIndex) do begin
        mList := Copy(mList, I + Length(mDelimiter), L);
        I := Pos(mDelimiter, mList);
        Inc(K);
      end;
      if K = mIndex then Result := StrLeft(mList + mDelimiter, mDelimiter);
    end; { ListValue }function DataSetToText(mDataSet: TDataSet; mStrings: TStrings;
      mFieldNames: string = '*'; mDelimiter: string = #9): Boolean;
    var
      vBook: string;
      vFieldName: string;
      I: Integer;
      S: string;
    begin
      Result := False;
      if (not Assigned(mDataSet)) or (not mDataSet.Active) or
        (not Assigned(mStrings)) then Exit;
      vBook := mDataSet.Book;
      mDataSet.DisableControls;
      mStrings.BeginUpdate;
      try
        mStrings.Text :=
          StringReplace(Trim(mDataSet.FieldList.Text), #13#10,
          mDelimiter, [rfReplaceAll]);
        if mFieldNames = '*' then
          mFieldNames := StringReplace(Trim(mDataSet.FieldList.Text), #13#10,
            ',', [rfReplaceAll]);
        mDataSet.First;
        while not mDataSet.Eof do begin
          S := '';
          for I := 0 to ListCount(mFieldNames) - 1 do begin
            vFieldName := ListValue(mFieldNames, I);
            if mDataSet.FieldList.IndexOf(vFieldName) < 0 then
              S := S + mDelimiter + '<Error>'
            else S := S + mDelimiter + mDataSet.FieldByName(vFieldName).DisplayText;
          end;
          Delete(S, 1, Length(mDelimiter));
          mStrings.Add(S);
          mDataSet.Next;
        end;
      finally
        mDataSet.Book := vBook;
        mDataSet.EnableControls;
        mStrings.EndUpdate;
      end;
      Result := True;
    end; { DataSetToText }function TreeNodeString(mTreeNode: TTreeNode; mDelimiter: string = '\'): string;
    begin
      Result := '';
      while Assigned(mTreeNode) do begin
        Result := mTreeNode.Text + mDelimiter + Result;
        mTreeNode := mTreeNode.Parent;
      end;
      Delete(Result, Length(Result) - Length(mDelimiter) + 1, MaxInt);
    end; { TreeNodeString }function LineTextToTreeView(mStrings: TStrings; mTreeView: TTreeView;
      mDelimiter: string = '\'): Boolean;
    var
      I, J, K: Integer;
      vStrPath: string;
      vStrText: string;
      vTreeNode: TTreeNode;
      vBoolFind: Boolean;
    begin
      Result := False;
      if not (Assigned(mTreeView) and Assigned(mStrings)) then Exit;
      mTreeView.Items.BeginUpdate;
      try
        mTreeView.Items.Clear;
        for I := 0 to mStrings.Count - 1 do begin
          vStrPath := '';
          vTreeNode := nil;
          for J := 0 to ListCount(mStrings[I], mDelimiter) - 1 do begin
            vStrText := ListValue(mStrings[I], J, mDelimiter);
            vStrPath := vStrPath + mDelimiter + vStrText;
            vBoolFind := False;
            for K := 0 to mTreeView.Items.Count - 1 do
              if mDelimiter + TreeNodeString(mTreeView.Items[K], mDelimiter) =
                vStrPath then begin
                vTreeNode := mTreeView.Items[K];
                vBoolFind := True;
                Break;
              end;
            if vBoolFind then Continue;
            vTreeNode := mTreeView.Items.AddChild(vTreeNode, vStrText);
          end;
        end;
      finally
        mTreeView.Items.EndUpdate;
      end;
      Result := True;
    end; { LineTextToTreeView }///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vStringList: TStringList;
    begin
      vStringList := TStringList.Create;
      try
        DataSetToText(Table1, vStringList, 'Filed1,Field2');
        vStringList.Delete(0); //删除字段名~~
        LineTextToTreeView(vStringList, TreeView1, #9);
      finally
        vStringList.Free;
      end;
    end;
    ///////End Demo