使用ODBC游标在虚拟模式下进行网格

时间:2015-04-28 06:29:19

标签: c# c++ odbc c++-cli infragistics

我有一个应用程序,我们使用ODBC连接到SQL Server数据库(不要问为什么,这是遗留问题)。当我们想要在网格中显示大型数据集(> 100万条记录)时,一切正常。使用ODBC游标,我们可以轻松地来回导航,开始或结束,并显示记录是一个自定义绘制的网格(Win GDI绘画) - 一切都是用纯C ++编写的。

现在,老板决定我们需要一个具有更多功能的更好的网格,所以我们选择了Infragistics中的一个(使用C ++ / Cli作为现有C ++代码和.NET之间的桥梁)。他们的网格支持虚拟模式,但它需要读取的记录总数,在我们的例子中,ODBC没有提供这种可能性。

截至目前,我们有3个解决方案

  1. 将光标定位在开头,导航到结尾并计算行数 - 大型数据集的操作非常慢。

  2. 从ODBC读取所有数据并推入内存集合,然后向网格提供所需信息。同样,它很慢并且非常耗费内存。

  3. 创建一个select COUNT(*) from table并查询记录数量,它不会起作用,因为我们在select语句中包含复杂逻辑的非常复杂的查询,无法更改或轻松解析。

  4. 有没有办法在不知道总数或记录的情况下解决这个问题?我知道垂直卷轴无法正常工作,但很好,用户习惯了这一点,只要他们可以按Ctrl + HomeCtrl + End转到第一个或最后一条记录或UpDown在记录之间导航,他们很开心。

    非常感谢任何想法。

    THX

1 个答案:

答案 0 :(得分:0)

您可以将网格的LoadStyle设置为LoadOnDemand,如下所示:

this.ultraGrid1.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand;

但是,如果您执行排序,过滤,汇总等,网格将尝试预先加载整个数据。 您也可以尝试使用WinDataSource - 它还支持按需加载数据。见article