Ultimate Grid 数据源






4.56/5 (7投票s)
使用 Ultimate Grid 的自定义数据源简介
- 下载 Ultimate Grid 源代码 - 380 KB
- 下载 Ultimate Grid 示例项目 - 2.2 MB (*包含 Datasources 目录)
- 下载 Ultimate Grid 文档(编译后的 HTML 帮助格式 - CHM) - 1 MB
访问 Ultimate Grid 主页,了解 Ultimate Grid 库的概述和配置指南。
目录
引言
Ultimate Grid 的一个优秀设计特点是通过使用基类数据源类,将数据层与表示层进行分离。CUGDataSource
类封装了所有与数据源相关的函数。这种设计实现了高度的代码重用,并为 Ultimate Grid 的实现提供了极大的灵活性,允许以组合或可互换的方式使用多种不同类型的数据源,而无需重写网格或应用程序的内部工作。
大多数开发人员会从默认设置开始 - 即“内置”的“内存管理器”(CUGMem
)数据源类,它允许将单元格对象存储在网格中以供显示,并检索以供操作。CUGMem
是从 CUGDataSource
派生的。
每个 CUGCtrl
类最多可以附加 64000 个 CUGDataSource
派生类。
为什么使用自定义数据源?
动态加载单元格信息
您可能希望使用派生的 CUGDataSource
类来动态加载单元格信息。动态加载单元格信息可大大提高大型表格的性能,减少内存需求,并允许网格即时显示。
序列化
您可能有一个包含带标记的数据的文件,用于显示和编辑 - XML 是一个很好的例子。
集成数据访问 API
许多 Microsoft 和第三方数据库实现提供了 C/C++ 接口,可以直接调用 SQL 查询并访问返回的结果集。这可以实现对列、列类型的完全动态识别,并高效地动态显示静态和动态结果集。
预置的数据源和示例
Ultimate Grid 包含了许多预定义的 CUGDataSource
对象
ADO | CADOImpDatasource
此数据源封装了 Active Data Objects 接口,该接口又分层了 OLE DB。 |
文件: DataSources\ADO\ADOImpDatasource.cpp ADOImpDatasource.h 示例 |
数组 | CUGCBArrayDataSource
一个使用简单字节数组作为数据源的示例 - Dumper 示例将文件加载为二进制数组并显示十六进制/文本转储。 |
文件: DataSources\Array\UGCBADSC.cpp UGCBADSC.h 示例: |
DAO | CUGDAODataSource
DAO 数据源维护 支持事务。 实现了排序和查找下一个(FindDialog)功能。 |
文件 DataSources\DAO\Ugdao.cpp Ugdao.h 示例 DataSources\DAO\dao.htm |
分隔 | CUG_Delimitted
一个可序列化数据源的示例, |
文件 DataSources\Delimited\UGdelim.cpp UGdelim.h 示例 附加 |
Html | CUG_HTML_DataSource
此数据源处理导入简单的 HTML 表。它会跳过嵌入式表格,以完全导入表格。您可以决定导入最外层的哪个表格,方法是在 Open 函数中传递一个表格编号。 |
文件 DataSources\Html\UGHTML.cpp UGHTML.h 示例 |
ODBC | CUGODBCDatasource
|
文件 DataSources\ODBC\ugrecset.cpp ugrecset.h UGODBC.CPP UGODBC.H 示例 |
OLE DB | CUG_OLEDB_DataSource
OLE DB 数据源和列绑定类可以通过 OLE DB 数据接口动态访问数据库结果集。 |
文件 DataSources\OleDB\binds.cpp binds.h ugoledb.cpp ugoledb.h 示例 |
XML | CXMLParser
XML 数据源与此处描述的类不同,因为它不继承自 此类已更新,以更好地渲染 Microsoft Excel XML 属性。 |
文件 DataSources\XML\COXParser\*.* DataSources\XML\XMLParser.cpp XMLParser.h 示例 |
创建自定义 CUGDataSource 类
当处理大量外部数据(您已经有接口)并且该接口可以根据列和行向量检索数据时,自定义数据源是最常见的一种需求,这可以避免通过网格的 SetCell
接口预加载数据项而产生的开销。
自定义数据源的工程设计,最少只需要覆盖一个虚函数 GetCell()
。根据您的需求,您可能还希望为数据源类提供通过 SetCell()
函数写回数据源信息的功能。您的数据源类还可以负责根据索引重新排序数据源、计算总行数、计算总列数、确定列标题等。您可以根据需要在自定义数据源类中提供尽可能多或尽可能少的功能。
在一个完全开发的数据源类中,可以添加特殊的函数,例如 SetGridFromDataSource()
,以允许网格自动向数据源请求有关列标题、列类型、格式等的信息,并自动使用这些信息设置默认网格和列单元格对象。
一旦有了 CUGDatasource
派生类,只需实例化一个对象,然后调用网格的 AddDatasource
方法将其添加到网格已知的类数组中。要将其设置为网格的当前数据源,请使用 AddDatasource
返回的索引调用 SetDefDatasource
。然后,网格将在绘制数据时查询您的 GetCell
方法。
有关使用 Ultimate Grid 创建和使用数据源的更多信息,请参阅编译的 CHM 帮助文档中的教程和类参考。
历史
首次 CodeProject 发布于 2007 年 8 月。