//续二
void __fastcall TDBTreeView::FillChildTreeNodes(int ParentID, TTreeNode* Node, bool Nest)
{//用指定值填充子节点
TQuery* AQuery = new TQuery(this);//创建一个数据集控件
AnsiString strSql, strText;
int iID, iParentID;
int iImageIndex, iSelectedIndex;
TTreeNode* TreeNode;
TDBTreeNodeData NodeData;
//设置数据集的各项参数
AQuery->DatabaseName = ((TTable*)(FDataLink->DataSource->DataSet))->DatabaseName;//设置数据库名
AQuery->Close();//关闭数据集
AQuery->SQL->Clear();//清空原SQL语句
strSql = "SELECT * FROM " + ((TTable*)(FDataLink->DataSource->DataSet))->TableName + " WHERE ";
strSql += FParentIDField + "=:PID";
AQuery->SQL->Add(strSql);//指定新的SQL语句
AQuery->ParamByName("PID")->AsInteger = ParentID;
AQuery->Open();//打开数据集
this->Items->BeginUpdate();//开始更新DBTreeView组件显示
while (!AQuery->Eof)//未到数据集尾部
{
strText = AQuery->FieldByName(FDisplayField)->AsString;//取得显示字段内容
iID = AQuery->FieldByName(FPrimaryIDField)->AsInteger;//取得主标识字段内容
iParentID = AQuery->FieldByName(FParentIDField)->AsInteger;//取得父标识字段内容
TreeNode = this->Items->AddChild(Node, strText);//将上面取得的相关数据追加到新节点
iImageIndex = iSelectedIndex = -1;//设置节点位图与选中时位图
if (FOnSetImageIndex) FOnSetImageIndex(this, iID, iParentID, TreeNode->Level, iImageIndex, iSelectedIndex);//如果设置位图发生变化,则触发相关事件
TreeNode->ImageIndex = iImageIndex;//设置节点位图及选中时位图
TreeNode->SelectedIndex = iSelectedIndex;