65.9K
CodeProject 正在变化。 阅读更多。
Home

Ultimate Grid 数据源

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (7投票s)

2007年8月24日

CPOL

5分钟阅读

viewsIcon

92539

downloadIcon

894

使用 Ultimate Grid 的自定义数据源简介

访问 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

示例
DataSources\ADO\ADODataSource\
DataSources\ADO\ADO Sample\

数组 CUGCBArrayDataSource

一个使用简单字节数组作为数据源的示例 - Dumper 示例将文件加载为二进制数组并显示十六进制/文本转储。

文件:
DataSources\Array\UGCBADSC.cpp UGCBADSC.h

示例:
DataSources\Array\Dumper3\

DAO CUGDAODataSource

DAO 数据源维护 CDaoDatabaseCDaoTableDefCDaoQueryDefCDaoRecordsetCDaoFieldInfo 成员对象,以允许动态加载 Microsoft Access 数据库查询结果集。

支持事务。

实现了排序和查找下一个(FindDialog)功能。

文件
DataSources\DAO\Ugdao.cpp Ugdao.h

示例
DataSources\DAO\DAO Sorting\
DataSources\DAO\MyAccess\

附加
DataSources\DAO\dao.htm
分隔 CUG_Delimitted

一个可序列化数据源的示例,CUG_Delimited 类可以读取 CSV 文件等。分隔符字符可以指定。它继承自 CUGMem(网格的默认内存数据源)。

文件
DataSources\Delimited\UGdelim.cpp UGdelim.h

示例
DataSources\Delimited\Example\

附加
DataSources\delimited\ReadME.txt

Html CUG_HTML_DataSource

此数据源处理导入简单的 HTML 表。它会跳过嵌入式表格,以完全导入表格。您可以决定导入最外层的哪个表格,方法是在 Open 函数中传递一个表格编号。

文件
DataSources\Html\UGHTML.cpp UGHTML.h

示例
DataSources\Html\htmlexam\

ODBC CUGODBCDatasource

CUGODBCDatasource 类包含一个 CUGRecordset 类,该类继承自 CRecordset,直接使用 ODBC API 来实现对表列、类型等的动态识别。

文件
DataSources\ODBC\ugrecset.cpp ugrecset.h UGODBC.CPP UGODBC.H

示例
DataSources\ODBC\odbcexam\
DataSources\ODBC\odbcexm2\

OLE DB CUG_OLEDB_DataSource

OLE DB 数据源和列绑定类可以通过 OLE DB 数据接口动态访问数据库结果集。

文件
DataSources\OleDB\binds.cpp binds.h ugoledb.cpp ugoledb.h

示例
DataSources\OleDB\Example\

XML CXMLParser

XML 数据源与此处描述的类不同,因为它不继承自 CUGDataSourceCXMLParser 类维护一个指向网格对象的指针,它可以根据从 XML 文件中提取的数据和单元格属性来填充网格,但网格本身使用默认的内存数据源。

此类已更新,以更好地渲染 Microsoft Excel XML 属性。

文件
DataSources\XML\COXParser\*.*
DataSources\XML\XMLParser.cpp XMLParser.h

示例
DataSources\XML\XMLSample\

创建自定义 CUGDataSource 类

当处理大量外部数据(您已经有接口)并且该接口可以根据列和行向量检索数据时,自定义数据源是最常见的一种需求,这可以避免通过网格的 SetCell 接口预加载数据项而产生的开销。

自定义数据源的工程设计,最少只需要覆盖一个虚函数 GetCell()。根据您的需求,您可能还希望为数据源类提供通过 SetCell() 函数写回数据源信息的功能。您的数据源类还可以负责根据索引重新排序数据源、计算总行数、计算总列数、确定列标题等。您可以根据需要在自定义数据源类中提供尽可能多或尽可能少的功能。

在一个完全开发的数据源类中,可以添加特殊的函数,例如 SetGridFromDataSource(),以允许网格自动向数据源请求有关列标题、列类型、格式等的信息,并自动使用这些信息设置默认网格和列单元格对象。

一旦有了 CUGDatasource 派生类,只需实例化一个对象,然后调用网格的 AddDatasource 方法将其添加到网格已知的类数组中。要将其设置为网格的当前数据源,请使用 AddDatasource 返回的索引调用 SetDefDatasource。然后,网格将在绘制数据时查询您的 GetCell 方法。

有关使用 Ultimate Grid 创建和使用数据源的更多信息,请参阅编译的 CHM 帮助文档中的教程和类参考。

历史

首次 CodeProject 发布于 2007 年 8 月。

© . All rights reserved.