我有一个应用程序,我们使用ODBC连接到SQL Server数据库(不要问为什么,这是遗留问题)。当我们想要在网格中显示大型数据集(> 100万条记录)时,一切正常。使用ODBC游标,我们可以轻松地来回导航,开始或结束,并显示记录是一个自定义绘制的网格(Win GDI绘画) - 一切都是用纯C ++编写的。
现在,老板决定我们需要一个具有更多功能的更好的网格,所以我们选择了Infragistics中的一个(使用C ++ / Cli作为现有C ++代码和.NET之间的桥梁)。他们的网格支持虚拟模式,但它需要读取的记录总数,在我们的例子中,ODBC没有提供这种可能性。
截至目前,我们有3个解决方案
将光标定位在开头,导航到结尾并计算行数 - 大型数据集的操作非常慢。
从ODBC读取所有数据并推入内存集合,然后向网格提供所需信息。同样,它很慢并且非常耗费内存。
创建一个select COUNT(*) from table
并查询记录数量,它不会起作用,因为我们在select语句中包含复杂逻辑的非常复杂的查询,无法更改或轻松解析。
有没有办法在不知道总数或记录的情况下解决这个问题?我知道垂直卷轴无法正常工作,但很好,用户习惯了这一点,只要他们可以按Ctrl + Home
,Ctrl + End
转到第一个或最后一条记录或Up
和Down
在记录之间导航,他们很开心。
非常感谢任何想法。
THX
答案 0 :(得分:0)
您可以将网格的LoadStyle设置为LoadOnDemand,如下所示:
this.ultraGrid1.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand;
但是,如果您执行排序,过滤,汇总等,网格将尝试预先加载整个数据。 您也可以尝试使用WinDataSource - 它还支持按需加载数据。见article