对CTreeCtrl数据加载方式的改进,实现代码的重用
2006-08-16 22:42
411 查看
我在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一点关系都没有。
这种方式很好,效率很高。最近遇到一个问题,哪就是我们希望些一个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一点关系都没有。
相关文章推荐
- Python神经网络代码识别手写字的实现流程(一):加载mnist数据
- 数据加载等待页面的VB.NET代码实现
- treepanel动态加载数据实现代码
- Android界面数据懒加载实现代码
- C#实现仿新浪微博 BigPipe 数据加载方式
- vue2滚动条加载更多数据实现代码
- SharePoint 实现ajax异步加载数据的几种方式
- 二十四、继承(一) 代码重用、继承方式、接口继承与实现继承、继承和重定义、继承和组合
- jquery Ajax 实现加载数据前动画效果的示例代码
- 扩展easyui.datagrid,实现加载数据遮罩效果代码
- 关于ligerUI中ligerTree代码中的一个bug,造成该控件无法通过url的POST方式加载数据
- 信息页文内画中画广告js实现代码(文中加载广告方式)
- Js表格万条数据瞬间加载实现代码
- ios弹幕高效加载实现方式实例代码
- Android之ListView分页加载数据功能实现代码
- Js表格万条数据瞬间加载实现代码
- 异步方式实现数据加载
- RecyclerView加载更多数据的三种不同的实现方式
- android 异步方式实现数据加载