首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  界面/窗口  |  树型控件   


对CTreeCtrl数据加载方式的改进,实现代码的重用


原作者:sfcyyc    源出处:CSDN    发布者:施昌权    发布类型:转载    发布日期:2008-10-13

              

       我在MFC的程序中通过CTreeCtrlEx显示数据库中的数据,为了简化操作,开始只加载一个节点hRoot,然后在新添加的节点中增加一个虚节点,则在hRoot展开时,判断是否有虚节点,如果有虚节点,则自动删除虚节点,并且动态计算hRoot的子节点所需要的Sql语句,然后根据这个Sql语句,从数据库中读取所有子节点的数据,添加到hRoot下面,并且,每个新的子节点hChild下自动添加一个虚节点,等到将来展开这个hChild时自动计算hChild下属子节点sql,并且从数据库中加载。
       这种方式很好,效率很高。最近遇到一个问题,哪就是我们希望些一个WEB版的程序,在网页上显示一个TreeCtrl,使用相同的算法从数据库中加载数据到树中。由于MFC中已经实现了从数据库中加载数据的功能,那么,如何重用MFC程序中的代码?
       实际上,在MFC的CTreeCtrlEx显示数据时,每次总是通过一个自动计算的sql语句从数据库中得到一个子节点的列表,然后将这个列表添加到具有虚节点的hItem中,因此我只需要在CTreeCtrlEx中增加一个静态函数:
       CMdcDataTable * GetNodeChildDataTable(CNodeInfo * pNodeInfo)
       然后由网页中的WebTreeCtrl提供pNodeInfo的信息,并且调用GetNodeChildDataTable函数即可得到WebTreeCtrl中某个节点的下属子节点列表。
       这样,我只需要将CTreeCtrlEx封装在DLL中即可。但是由于CTreeCtrlEx是一个MFC类,因此,网页无法直接调用,网页是用.NET开发的,为此,我必须将CTreeCtrlEx中的GetNodeChildDataTable函数通过C ++ .NET封装一次,则.NET可以直接调用了。当然是在服务端调用。
       现在的CTreeCtrlEx中的所有数据加载的操作都与控件本身有关,在加载子节点的过程中不断的扫描CTreeCtrlEx上的有关节点,以读取当前节点的有关信息,而GetNodeChildDataTable函数的参数就是pNodeInfo,因此,GetNodeChildDataTable函数在从数据库中加载数据时不再依赖CTreeCtrlEx本身,也就是说GetNodeChildDataTable()通过pNodeInfo参数和CMdcDataTable *隔离了数据的访问与数据的显示之间的紧密耦合,使得GetNodeChildDataTable()函数可以在网页中被重用。
       将GetNodeChildDataTable(CNodeInfo * pNodeInfo)设置为静态函数的目的时调用该函数时可以不创建CTreeCtrlEx实例。实际上这个函数完全可以从CTreeCtrlEx中独立出来。因为它本身与CTreeCtrlEx一点关系都没有。


关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号