TTreeNode问题(30分)

  • 主题发起人 主题发起人 treecy
  • 开始时间 开始时间
T

treecy

Unregistered / Unconfirmed
GUEST, unregistred user!
在BCB中,TTreeNode在程序中应如何使用,需要些什么条件,如果说要把它的结构加到程序里吗?
TTreeNode如何申明啊?
 
查看帮助,有详细说明.
TreeNode有DATA指针,可以存放结构等信息.
 
给帖你一段代码,你自己琢磨吧:)
------------------------------------------------------------------
void __fastcall TForm1::FillTreeView()
{
TTreeNode * tn1,*tn2;
ADOQuery1->Close();
ADOQuery1->SQL->Text="select TABLENAME,TABLEDESC,CLASSID,CLASSNAME from sdtable,sdclass where CLASSID=TABLECLASSID order by CLASSID,TABLENAME ";
ADOQuery1->Open();
TreeView1->Items->Clear();
tn1=TreeView1->Items->Add(NULL,"ERP数据表");
AnsiString strTABLENAME,strCLASSID,strCLASSNAME,tmpCLASSID,strTABLEDESC;
tmpCLASSID="ERP数据表";
ADOQuery1->First();
while(!ADOQuery1->Eof){
strTABLENAME=ADOQuery1->FieldByName("TABLENAME")->AsString;
strCLASSID=ADOQuery1->FieldByName("CLASSID")->AsString;
strCLASSNAME=ADOQuery1->FieldByName("CLASSNAME")->AsString;
strTABLEDESC=ADOQuery1->FieldByName("TABLEDESC")->AsString;
if(tmpCLASSID!=strCLASSID){
tn2=TreeView1->Items->AddChild(tn1,strCLASSNAME+" | "+strCLASSID);
tmpCLASSID=strCLASSID;
}
AnsiString s=Format("%-15s <> %s",OPENARRAY(TVarRec,(strTABLENAME,strTABLEDESC)));
TreeView1->Items->AddChild(tn2,s);
ADOQuery1->Next();
}
TreeView1->Selected = TreeView1->Items->Item[0];
TreeView1->Selected->Expand(false);
}
--------------------------------------------------------------------------
如上面那位兄弟说的,帮助有详细说明.你不妨多看一下。
 
给你一段代码,功能是从一个数据库中取出数据并转化为一棵树(数据库必须为树形结构,比如
说有上下级),点击相应的节点可以在树形的另一边显示数据,当然你要放一或两个GRID在上面,
或者动态生成GRID也行。我用的是MIDAS选项卡里面的控件,还有DATASOURCE控件,并另外做了一个
DATAMODULE,别名为IDEDM。
void __fastcall TForm1::FormCreate(TObject *Sender)
{
IDEDM->CDSFuncTreeInfo->Active=true;
TTreeNode *SubNode=TreeView1->Items->Add(NULL,"My System");//根节点的父为空
IDEDM->CDSFuncTreeInfo->IndexFieldNames ="ParentMenuID";//“”里面的内容为索引号,根据自己的数据库而定。
TLocateOptions Opts;
Opts.Clear();
Opts<<loCaseInsensitive;
IDEDM->CDSFuncTreeInfo->Locate("ParentMenuID","",Opts);//定位记录
AddChildNode(SubNode,IDEDM->CDSFuncTreeInfo);
}
void TForm1::AddChildNode(TTreeNode *Node,TClientDataSet *DataSet)
{
AnsiString MenuID=DataSet->FieldByName("MenuID")->AsString;
AnsiString ParentMenuID=DataSet->FieldByName("ParentMenuID")->AsString;
int RecordNo=DataSet->RecNo;
int *RecNo=new int(RecordNo);
TTreeNode *SubNode=TreeView1->Items->AddChildObject(Node,DataSet->FieldByName("MenuName")->AsString,RecNo);
if( DataSet->Locate("ParentMenuID",MenuID,TLocateOptions()<<loCaseInsensitive)){
AddChildNode(SubNode,DataSet);
DataSet->RecNo=RecordNo;
}
DataSet->Next();
if(!DataSet->Eof &amp;&amp;
ParentMenuID==DataSet->FieldByName("ParentMenuID")->AsString){
AddChildNode(Node,DataSet);
}
}
部分必须的。H文件:
private: // User declarations
TIDEDataModule *IDEDM;
void AddChildNode(TTreeNode *Node,TClientDataSet *DataSet);
在DATAMODULE中,设置连接,设置主细表的关系。
//本程序经过运行通过,若试出有什么问题请提出,谢谢。
 
多人接受答案了。
 
后退
顶部