本文对延迟加载在常用控件的实现做简单的描述
一在界面第一次显示时加载
最简单的延迟加载可以通过控件第一次显示时加载数据例如你有很多的页签只有用户切换到这个页签时才会加载数据
在NET的Control中提供SetVisibleCore虚方法当检测value是true且第一次调用此方法时调用延迟加载但是我并不推荐这个方法因为你有更好的地方
- 如果你的控件继承自Form或者UserControl建议重载OnLoad
- 如果继承自Control可以重载OnCreateControl
下面是延迟加载数据的例子
public class MyTabPage : TabPage {
PRotected override void OnCreateControl() {
baseOnCreateControl();
string oldText = thisText;
thisText = Loading;
//TODO:在这里调用加载数据的方法
thisText = oldText;
}
}
二树控件在第一次展开时加载
TreeView因为所有的节点并不是继承自Control所以不能使用上面的方式但是TreeView提供了OnBeforeExpand虚方法最简单的办法是在你打算实现延迟加载的节点加入一个是否已经加载的标记当第一次展开时检测这个标记
必须记住你的延迟加载节点在根位置是不能收到这个事件的
三在表格中延迟加载
在Windows程序中有的使用分页的方式实现延迟加载但这种方式的用户体验非常的糟糕如果你希望仍然使用滚动条的话可以自己实现IBindList接口内部持有一个数据的ID列表在表格询问数据时才到数据库加载数据通常的表格控件都能够很好的工作
但这里有个应该注意的地方例如用户按下PageDown时表格控件连续的调用获取数据方法如果每次请求都去调用数据库将会很低的性能应该让你的程序预知到可能要读下笔数据了所以一次性多读条就可以
这种方法遇到表格排序的时候就没有办法了
以上是延迟加载技术的一般技术如果你有更好的方法请指教