延迟加载的一般实现

本文对延迟加载在常用控件的实现做简单的描述。

一、在界面第一次显示时加载
最简单的延迟加载可以通过控件第一次显示时加载数据,例如你有很多的页签,只有用户切换到这个页签时,才会加载数据。
 在.NET的Control中提供SetVisibleCore虚方法,当检测value是true且第一次调用此方法时,调用延迟加载。但是我并不推荐这个方法,因为你有更好的地方。
- 如果你的控件继承自Form或者UserControl,建议重载OnLoad;
- 如果继承自Control,可以重载OnCreateControl。
下面是延迟加载数据的例子:
ExpandedBlockStart.gif ContractedBlock.gif      public   class  MyTabPage : TabPage  dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
protected override void OnCreateControl() dot.gif{
InBlock.gif            
base.OnCreateControl();
InBlock.gif
InBlock.gif            
string oldText = this.Text;
InBlock.gif            
this.Text = "Loading..";
InBlock.gif
InBlock.gif            
//TODO:在这里调用加载数据的方法
InBlock.gif

InBlock.gif            
this.Text = oldText;
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

二、树控件在第一次展开时加载
TreeView因为所有的节点并不是继承自Control,所以不能使用上面的方式,但是TreeView提供了OnBeforeExpand虚方法,最简单的办法是在你打算实现延迟加载的节点加入一个是否已经加载的标记,当第一次展开时,检测这个标记。
必须记住你的延迟加载节点在根位置是不能收到这个事件的。

三、在表格中延迟加载。
在Windows程序中,有的使用分页的方式实现延迟加载,但这种方式的用户体验非常的糟糕。如果你希望仍然使用滚动条的话,可以自己实现IBindList接口,内部持有一个数据的ID列表,在表格询问数据时,才到数据库加载数据,通常的表格控件都能够很好的工作。
但这里有个应该注意的地方,例如用户按下PageDown时,表格控件连续的调用获取数据方法,如果每次请求都去调用数据库,将会很低的性能,应该让你的程序“预知”到可能要读下50笔数据了,所以一次性多读50条就可以。
这种方法遇到表格排序的时候就没有办法了。

以上是延迟加载技术的一般技术,如果你有更好的方法,请指教。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值