ZT:通过数据表动态建Treeview,绝对高效率!
来源:互联网 发布:字符数组 编辑:程序博客网 时间:2024/04/29 00:04
/*
1。数据库表的结构:
(
节点ID
节点父ID(PID)
及其他字段
)
ID,PID的类型无所谓,数字,字符都行,也不需要有规律,
只要保证ID字段为主键即可,比如可以用GUID 来作ID。
支持无限级。
2。TTreeNode的Data指向一个结构,结构内有一个域记录节点的ID及PID,
其他的域根据需要可自己定义。
3。从数据库生成树,这是要好好考虑的,要作到效率高,最重要的是“避免反复查询
数据库或遍历数据集”,最好是查询一次就能生成整棵树。
主要思想是:先生成一棵全是根节点的树,再做调整,这样就避免了先读出子节点,
找不到父节点的尴尬。
*/
struct NODEDATA //节点关联的数据
{
int id;
int pid;
AnsiString name;
AnsiString memo; //其他域省略...
};
void __fastcall FillTree()
{
struct NODEDATA *ndata=NULL;
TStringList *ss=NULL;
TTreeNode *aNode=NULL;
TTreeNode *bNode=NULL;
TTreeNode *pNode=NULL;
Query1->Close();
Query1->SQL->Text="select id,pid,name,memo from tree_tab";
Query1->SQL->Open();
try
{
ss=new TStringList();
TreeView->Items->BeginUpdate();//禁止刷新,提高速度
//遍历记录集
for(Query1->First(); !Query1->Eof; Query1->Next())
{
ndata=new DODEDATA();
ndata->id = Query1->FieldByName("id")->AsInteger;
ndata->pid = Query1->FieldByName("id")->AsInteger;
ndata->name = Query1->FieldByName("name")->AsString;
ndata->memo = Query1->FieldByName("memo")->AsString;
//生成一个根节点加入TreeView
aNode=TreeView1->Items->AddObject(NULL,ndata->name,ndata);
//记录id-TreeNode对应关系,便于下面查找
ss->AddObject(AnsiString(ndata->id),aNode);
}
Query1->Close();
ndata=NULL;
//下面是关键!!
//调整树,根据节点的pid,把节点移到相应的TreeNode下
int idx;
for(aNode=TreeView1->Items->GetFirstNode(); aNode!=NULL ;)
{
ndata = (NODEDATA*)(aNode->Data);
if(-1==(idx=ss->IndexOf(AnsiString(ndata->pid))))
{
aNode=aNode->getNextSibling();
continue;
}
else
{
pNode = (TTreeNode*)(ss->Objects[idx]);
bNode=aNode;
aNode=aNode->getNextSibling();
bNode->MoveTo(pNode,naAddChild);
}
}
}
__finally
{
delete ss; ss=NULL;
Query1->Close();
TreeView->Items->EndUpdate();
}
}
- ZT:通过数据表动态建Treeview,绝对高效率!
- 通过数据表动态建Treeview,绝对高效率!
- 通过数据表动态建Treeview,绝对高效率!
- 通过数据表动态建Treeview,绝对高效率!
- ASP.NET从数据表动态生成TreeView树
- Hibernate动态建表,通过hbm.xml配置文件创建数据表,进行数据库操作, 动态模型
- Hibernate动态建表,通过hbm.xml配置文件创建数据表,进行数据库操作, 动态模型
- 海量数据表高效率分页算法
- asp.net2.0 treeview控件用数据表做为数据源实现n级动态菜单
- asp.net2.0 treeview控件用数据表做为数据源实现n级动态菜单
- asp.net2.0 treeview控件用数据表做为数据源实现n级动态菜单
- 高效率动态生成html
- 利用TreeView控件动态生成无限级树(续:通过绑定动态xml文件)
- 通过XML构建TreeView
- asp.net(C#)海量数据表高效率分页算法
- asp.net(C#)海量数据表高效率分页算法
- asp.net(C#)海量数据表高效率分页算法
- asp.net(C#)海量数据表高效率分页算法
- 几款图纸加密文档加密软件的比较
- 招聘提问通用题库
- ResultSet can not re-read row data for column
- MSSQL定义表时用计算列做为字段
- 心中要装着别人
- ZT:通过数据表动态建Treeview,绝对高效率!
- 74XX的含义
- 关于共享文件无法访问的问题
- 进程,线程,函数调用
- ASE的远程服务器
- 书生与劫匪
- PB的错误处理
- 重复的字段不显示
- 范式哈夫曼编码(Canonical Huffman Code)