2012-03-01 58 views
0

我有一个网格,总共显示成千上万的行,显然用户只是在任何时间点看这些行的一小部分,一般在10〜20左右行。摆脱不可见的UltraGridRow实例

我启用LoadOnDemand,从而确保UltraGridRow实例和其他几个对象才会被创建时移动到可见区域:

grid.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand; 

这个伟大的工程(根据我的记忆profiler),但是当我上下滚动整个表格时,即触发所有行的UltraGridRows的创建,那么所有的UltraGridRows将被创建并永远留在内存中。

我该如何(理想情况下自动,但如果没有,手动)摆脱UltraGridRow对象的视图行不可见? (或只是摆脱所有UltraGridRows的 - 反正自动他们会重新创建)

一种强制方法我想通了,是这样的:

var tmp = grid.DataSource; 
grid.DataSource = null; 
grid.DataSource = tmp; 

它会导致一些副作用的,所以有一些其他摆脱UltraGridRows的方法?

顺便说一句,我想这两个家伙,但没有成功(试图为布尔PARAMS)。

grid.Rows.Refresh(RefreshRow.ReloadData, false, true); 
grid.Rows.DeallocateCells(true); 

我试图让内存消耗下降,UltraGridRows是目前主要的消费(自己UltraGridRows不huuuge,他们消耗下每200个字节,这在我的情况,是指一对夫妇兆的,只是让你知道我们在说什么)。

这是Infragistics 9.2。

任何想法?

回答

0

嘛,总是有反射...

var m = typeof(RowsCollection) 
    .GetMethod("InternalClearHelper", BindingFlags.NonPublic | BindingFlags.Instance); 
m.Invoke(grid.Rows, null); 

这实际上对我的作品,但它会清除选择,所以你必须要记住,在调用之前,之后恢复的选择。