基于kbmMW SmartBind,在实际项目中应用过程中,遇到了显示效率太低的问题,用户在项目沟通会上反馈这一问题,让咱这开发者都感觉尴尬了。具体的实现过程,参考kbmMWSmartBind实现ListView绑定数据集进阶篇(二)。
为什么造成这样的问题呢?
经过反复测试代码,问题出在重复绑定上,Listview与ClientQuery绑定,当利用ClientQuery做数据查询,就会遇到反复打开数据集,这时候,我们要重新绑定,即:在打开数据集前,要解除绑定,打开后再重新绑定。
有什么办法来解决不重复绑定吗?答案是有的。
为了解决这一问题,就要解决,重新打开数据集时,不重建字段,ClientQuery为我们提供了一个属性:AutoFieldDefsOnOpen,关于这个属性的用法,在很早的文章中我有介绍过,这里再简要说明下:
Always:每次打开数据集都重新取字段定义,这是默认值
Never:从不取字段定义,这种情况,需要我们在设计期为ClientQuery建好字段
Once:只取一次字段定义,即第一次打开数据集时才取。
WithData:
好了,现在我们将AutoFieldDefsOnOpen设置为mwafoOnce,让数据集只取一次字段定义,避免重复打开数据集时重建字段,进而避免每次都重复执行绑定。最终,我们用下面的方式实现绑定:
ClientQuery.AutoFieldDefsOnOpen:=mwafoNever; ClientQuery.Query.Text:=Select * from test'; ClientQuery.Open; FBind.Bind(...) ...
经过这样改进,Listview显示的速度就从蜗牛变成飞机了!