当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++ Builder教程

C++Builder高手进阶(三)设计DBTreeView组件(续二)

//续二

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;

 

        NodeData.ID = iID;//取得节点主标识,父标识,并按其追加一个新节点

        NodeData.ParentID = iParentID;

        AddDataToNode(TreeNode, NodeData);

 

        if (Nest) FillChildTreeNodes(iID, TreeNode);//如果指定参数Nest为true,则递归调用以填充所有子节点

        AQuery->Next();//移动到下一条记录

    }


共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接