一个简明的生成无限层Treeview的方法

mmit 2017-04-05 11:57:48
最近要写一个程序,将数据库中的数据生成TreeView,数据结构类似如下:


1 所有商品
10001 家用电器
100010001 电视机
100010002 冰箱
100010003 洗衣机
10002 厨房电器
100020001 洗碗机
100020002 微波炉
10003 电子产品
100030001 手持设备类
1000300010001 智能手机
1000300010002 掌上游戏机


数据的层数是没有限制的,一直可以细分下去。

解决的方法思考和搜索了一下,网上一般是用递归,遍历TreeView树,比较麻烦。

后来想到了一个简单的办法:


Tree->Items->Item[0]->Text = L"1"; //最顶级分类:所有商品

int nrow = 0, ncol = 0; //查询语句返回的结果集的行数,列数
char **Result; //指向返回的数据集

for (int k = 0; k < Tree->Items->Count; k++){ //遍历Tree树,其中 Tree->Items->Count 是隐形增量,在函数中动态增加
UTF8String u = Tree->Items->Item[k]->Text + L"____";
q = "select typecode from alltype where typecode like '" + u + "' order by typecode";
int r = sqlite3_get_table(db, q.c_str(), &Result, &nrow, &ncol, 0);

for (int j = 1 ; j <= nrow ; j++){ //遍历搜到的数据列表
UnicodeString w = UTF8String(Result[j]);
Tree->Items->AddChild(Tree->Items->Item[k], w);
}

sqlite3_free_table(Result);
}


简单的一段代码就实现了。

代码的关键是,遍历TreeView时,节点的数量是动态增加的,一直追着遍历下去,直接节点不再增加(数据库内容已读完)时为止。这样每个节点只遍历一遍,不存在重复遍历还要判断是否需要处理的问题,效率也是比较高的。
...全文
930 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
draculamx 2017-04-06
  • 打赏
  • 举报
回复
先收藏再说。。
ooolinux 2017-04-06
  • 打赏
  • 举报
回复
还没细看,先收藏。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧