Einzelnen Beitrag anzeigen

Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#4

AW: Brauche hilfe mit der VirtualTreeview

  Alt 7. Mai 2012, 07:43
Hi
Wie es aussieht klappt es doch noch nicht so recht. Insbesondere mit der GroupList_Fill Funktion
Und ich finde den feiler nicht, ich arbeite mit der Absolute Database 7.0x
Wie es scheint wird alles richtig in die DB gespeichert aber beim Auslesen werden einige Einträge
Falsch dargestellt

Ich habe auch drei Bilder im Anhang.

Bild1. wenn ich das erste mall in eine Lehre DB Schreibe, alles OK
Bild2. Wen ich das Programm neu starte und die DB Lade dann noch einige eintrage mach, die zuletzt gemachten Einträge werden beim nächstem laden der DB falsch angezeigt.



Delphi-Quellcode:

 (* Folder Table *)

 with Folder_Table do
  begin
    DatabaseName:= 'MyDBv2';
    TableName:= 'FolderList';
   with AdvFieldDefs do
    begin
     Clear;
     Add('ID', aftAutoIncLargeint, 0, false);
     Add('ParentID', aftLargeint);
     Add('Title', aftWidestring, 255);
  // Add('IconID', aftLargeint);
     Add('Image', aftGraphic, 0, false, caZLIB, 4);
    end;
   with IndexDefs do
    begin
     Clear;
     Add('ID', 'ID', [ixPrimary]);
     Add('ByParentID', 'ParentID', []);
     Add('Title', 'Title', []);
    end
  end;

(******************************* Fill Folder-List *****************************)

function TMain_Form.FolderList_Fill(ExpandedNood : Boolean) : boolean;
 procedure FillTreeNode(Parent: PVirtualNode);
 var Node: PVirtualNode;
     Data: PNodeData;
 begin
  if Assigned(Parent) then
   begin

     Data:= FolderTree.GetNodeData(Parent);
     Folder_Table.Filter:= 'ParentID = ' + IntToStr(Data^.ID);
     Folder_Table.Filtered:= true;
     Folder_Table.First;
    while not Folder_Table.Eof do
     begin
      Node:= FolderTree.AddChild(Parent);
      Data:= FolderTree.GetNodeData(Node);
      Data^.ID:= Folder_Table.FieldByName('ID').AsLargeInt;
      Data^.Caption:= Folder_Table.FieldByName('Title').AsWideString;
      Folder_Table.Next;
     end;

     Node:= Parent.FirstChild;
    while Assigned(Node) do
     begin
      FillTreeNode(Node);
      FolderTree.Expanded[Node]:= true;
      Node:= Node.NextSibling;
     end;

   end;
 end;

 var Node: PVirtualNode;
     Data: PNodeData;
begin
  Result:= False;
  FolderTree.BeginUpdate;
 try
  FolderTree.Clear;
  Node:= FolderTree.AddChild(Nil);
  Data:= FolderTree.GetNodeData(Node);
  Data^.ID:= 0;
  Data^.Caption:= 'My Data';
  FillTreeNode(Node);
  FolderTree.Expanded[Node]:= ExpandedNood;
 finally
  FolderTree.EndUpdate;
  RecordGrid_Fill(0);
  Result:= True;
 end;
end;

(******************************* Add New Folder *******************************)

function TMain_Form.FolderList_Add(Title : Widestring) : Boolean;
var Node : PVirtualNode;
     NodeData : PNodeData;
     ParentID : Int64;
begin
  Result:= False;
  Node:= FolderTree.FocusedNode;
 try
  if Assigned(Node) then
   begin
   {
    if FolderTree.AbsoluteIndex(Node) = 0 then
    ParentID:= 0;
    if FolderTree.AbsoluteIndex(Node) > 0 then
    }

     ParentID:= Int64(FolderTree.AbsoluteIndex(Node));

     Folder_Table.Filtered:= False;
     Folder_Table.Append;
     Folder_Table.FieldByName('ParentID').AsLargeInt:= ParentID;
     Folder_Table.FieldByName('Title').AsWideString:= Title;


     Node:= FolderTree.AddChild(Node);
     NodeData:= FolderTree.GetNodeData(Node);
     NodeData^.ID:= Folder_Table.FieldByName('ID').AsLargeInt;
     NodeData^.Caption:= Folder_Table.FieldByName('Title').AsWideString;

     Folder_Table.Post;

     FolderTree.GetLast();
     FolderTree.Selected[Node]:= true;
    // FolderTree.EditNode(Node, -1);

   end;
 finally
  Result:= True;
 end;
end;

(******************************* Reaname Folder *******************************)

function TMain_Form.FolderList_Rename(Title : Widestring) : Boolean;
var Node: PVirtualNode;
     NodeData: PNodeData;
     FolderData : TFolderData;
     FolderID : Int64;
begin
  Result:= false;
  Node:= FolderTree.FocusedNode;
 try
  if Assigned(Node) then
   begin
     FolderID:= FolderTree.AbsoluteIndex(Node);
     Folder_Table.Filtered:= False;
     Folder_Table.IndexName:= 'ID';
    if Folder_Table.FindKey([FolderID]) then
     begin
      FolderData.Title:= Title;
      Folder_Table.Edit;
      Folder_Table.FieldByName('Title').AsWideString:= Title;
      Folder_Table.Post;

      NodeData:= FolderTree.GetNodeData(Node);
      NodeData.Caption:= Title;
     end;
   end;
 finally
  Result:= True;
 end;
end;
thx
Miniaturansicht angehängter Grafiken
bild1.jpg   bild2.jpg   bild3.jpg  
  Mit Zitat antworten Zitat