Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Treeviewzugriff: Neuen Datensatz erstellen im Treeview

  Alt 2. Sep 2005, 20:30
Dein virtuelles Filesystem heißt bei mir Gliederung. Die anderen Fragen hast du noch nicht beantwortet. Üblich ist eine selbstrekursive Tabelle für die Gliederung (Outline). Dazu würde ich dann eine Tabelle Reports verwenden, in der jedem (leaf-)node beliebig viele Reports zugeordnet werden können.

Der folgende Code zeigt dir sinngemäß das rekursive Aufbauen einer Gliederung aus einer Tabelle:

Delphi-Quellcode:
const
  SEL_NODES
    = 'select id, folder, outline_id '
    + 'from outline '
    + 'order by outline_id, folder '
    ;

  SEL_REPORT
    = 'select report from reports '
    + 'where outline_id = %d';

function TMainForm.TreeNodes: TTreeNodes;
begin
  Result := TreeView.Items;
end;

procedure TMainForm.LoadNodes(nParent: TTreeNode; iParent: integer; recursive: boolean = true);
var
  i, id: integer;
  folder: string;
  bm: TBookmark;
  n: TTreeNode;
begin
  with QOutline do
  begin
    if Locate('outline_id', iParent, []) then
      while FieldValues['outline_id'].AsInteger = iParent do
      begin
        id := FieldValues['id'].AsInteger;
        n := TreeNodes.AddChildObject(nParent, folder, Pointer(id));
        if recursive then begin
          bm := GetBookmark;
          LoadNodes(n, id, recursive);
          GotoBookmark(bm);
          FreeBookmark(bm);
        end;
        Next;
      end;
  end;
end;

procedure TMainForm.miLoadClick(Sender: TObject);
begin
  // QOutline.SQL.Text := SEL_NODES;
  // QOutline.Open;
  LoadNodes(nil, 0);
  // QOutline.Close;
end;
Jetzt wäre interessant zu wissen, ob du deine Reports als Unterknoten im Baum visualisieren willst, oder lieber bei einer Knotenart (folder) bleibst und die reports in einer ListView anzeigst (explorer style - mein Favorit).

marabu
  Mit Zitat antworten Zitat