C++ Buileder 建立一个windows资源管理器一样的树

本文详细介绍树的建立过程。首先在SQL SERVER 2000数据库中建立表并可存储数据,接着在程序中建立结构体用于存储数据,方便对树进行操作,最后介绍了读数据库的操作,包括添加相关控件、从根节点读数据及递归查找子结点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面就详细的介绍下树的建立过程:

1、在数据库中建立表(本文采用的是SQL SERVER 2000)

CREATE TABLE [dbo].[SORTTREE] (
[NODEINDEX] [numeric](10, 0) IDENTITY (1, 1) NOT NULL ,--节点索引
[NODE] [varchar] (60) COLLATE Chinese_PRC_CI_AS NOT NULL ,--节点值
[PARENTINDEX] [numeric](10, 0) NOT NULL DEFAULT 0--父节点ID
) ON [PRIMARY]

建立完后,在表中存些数据,以便操作,当然也可以不要。PARENTINDEX为0则为父节点。

2、程序中建立结构体,用于存储数据,尤其在对树进行增删,拖拽的时候方便

struct link{
int parentid;
int id;
String sRoot;
link(int i,int j, String sTmp)
{
parentid = i;
id = j;
sRoot = sTmp;
}
};
typedef link * linkIndex;
linkIndex treeIndex;

3、读数据库

添加数据库连接查询控件TADOConnection1 ADOConnection1、TADOQuery Q_tmp和树型控件TV_ResourcesManage

//从根节点开始读

//初始化组别
Q_tmp->Close();
sSql = "SELECT *FROM SORTTREE WHERE PARENTINDEX=0";
Q_tmp->SQL->Text = sSql;
Q_tmp->Open();
while(!Q_tmp->Eof)
{
//添加默认根结点
TTreeNode *parentNode = TV_ResourcesManage->AddChild(NULL,Q_tmp->FieldByName("NODE")->AsString);
int parentIndex = 0;
int index = Q_tmp->FieldByName("NODEINDEX")->AsInteger;
String sNode = Q_tmp->FieldByName("NODE")->AsString;
parentNode->Data = new link(parentIndex, index, sNode);
parentNode->ImageIndex = 0;
parentNode->SelectedIndex = 0;
AddSubNodes(parentNode,index,Q_tmp->FieldByName("ZBDM")->AsString);

Q_tmp->Next();
}

//递归查找子结点
void TF_sycx::SelSubNodes(String sNodeIndex,String sSszb)
{
//TODO: Add your source code here
String sSql;

TADOQuery *Q_child = new TADOQuery(NULL);
Q_child->Connection = Q_table->Connection;
sSql = "SELECT nodeindex FROM GG_SORTTREE WHERE PARENTINDEX=:pid";
Q_child->Active = false;
Q_child->SQL->Text = sSql;
Q_child->Parameters->ParamByName("pid")->Value = NodeIndex;
Q_child->Active = true;
Q_child->First();
while (!Q_child->Eof)
{
sSelNodeIndex = sSelNodeIndex + ',' + IntToStr(Q_child->FieldByName("NodeIndex")->AsInteger);
SelSubNodes(sSelNodeIndex,sSszb);
Q_child->Next();
}


}

待完成...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值