相关疑难解决方法(0)

VirtualStringTree正确/推荐使用

我一直在使用virtualstringtree一段时间了.我将它用于两个不同的东西,首先是作为选择的普通树,显示数据,其次是作为显示SQL语句输出的网格.

加载到树中的所有数据都来自数据库.对于树示例,我有一个parentId字段来区分层次结构,对于网格示例,我只使用带有每个树的自定义记录的SQL语句(这是唯一的).

我的问题与填充树的首选/最佳方式有关.我从VST文档中读到,您应该使用onInitNode事件和rootnodecount.但是我发现使用AddChild()方法非常相似,即使不鼓励它.

让我展示一些(简化的)示例:

Heirarchy

type PData = ^rData;
    rData = packed record
      ID : Integer;
      ParentID : Integer;
      Text : WideString;
    end;

procedure Loadtree;
 var Node : PVirtualNode;
Data : PData;
 begin
    Q1 := TQuery.Create(Self);
            try
                Q1.SQL.Add('SELECT * FROM Table');
            Q1.Open;
            Q1.Filter := 'ParentID = -1'; //to get the root nodes
            Q1.Filtered := True;
            while not Q1.Eof do
            begin
                    Node := VST.AddChild(nil);
                    Data := VST.GetNodeData(Node);
                    Data.ID := Q1.Fields[fldID].AsInteger;
                    Data.ParentID := Q1.Fields[fldParentID].AsInteger;
                    Data.Text := Q1.Fields[fldText].AsString;
                    //now filter the query again …
Run Code Online (Sandbox Code Playgroud)

delphi performance virtualtreeview tvirtualstringtree

4
推荐指数
1
解决办法
2926
查看次数

树状数据结构(用于VirtualTreeview)

正如Rob Kennedy先生所建议的那样,我已经到了需要停止将数据存储在VCL组件中并具有"基础数据结构"的地步.

首先,这个问题是关于"我如何建立基础数据结构".:)

我的层次结构由2级节点组成.

现在,我通过循环根节点来完成我的东西,其中我循环通过rootnode的子节点,以获得我需要的东西(数据).我希望能够将所有数据存储在所谓的底层数据结构中,以便我可以使用线程轻松修改条目(我想我能够做到这一点?)

但是,当循环遍历我的条目(现在)时,结果取决于节点的Checkstate - 如果我使用的是底层数据结构,我怎么知道我的节点是否被检查,当我的数据结构循环通过时,而不是我的节点?

假设我想使用2个级别.

这将是父母:

TRoot = Record
  RootName : String;
  RootId : Integer;
  Kids : TList; //(of TKid)
End;
Run Code Online (Sandbox Code Playgroud)

那孩子:

TKid = Record
  KidName : String;
  KidId : Integer;
End;
Run Code Online (Sandbox Code Playgroud)

这基本上就是我现在所做的.评论说这不是最好的解决方案,所以我愿意接受建议.:)

我希望你理解我的问题.:)

谢谢!

delphi tree virtualtreeview data-structures

2
推荐指数
1
解决办法
5632
查看次数