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

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

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();
}


}

待完成...

你可能感兴趣的:(sql,C++,c,windows,C#)