zoukankan      html  css  js  c++  java
  • kbmMWSmartBind实现ListView绑定数据集进阶篇(三)

    基于kbmMW SmartBind,在实际项目的应用过程中,遇到了显示效率太低的问题,用户在项目沟通会上反馈这一问题,让咱这开发者都感觉尴尬了。具体的实现过程,参考kbmMWSmartBind实现ListView绑定数据集进阶篇(二)。

    为什么造成这样的问题呢?

    经过反复测试代码,问题出在重复绑定上,Listview与ClientQuery绑定,当利用ClientQuery做数据查询,就会遇到反复打开数据集,这时候,我们要重新绑定,即:在打开数据集前,要解除绑定,打开后再重新绑定。

    有什么办法来解决不重复绑定吗?答案是有的。

    为了解决这一问题,就要解决,重新打开数据集时,不重建字段,ClientQuery为我们提供了一个属性:AutoFieldDefsOnOpen,关于这个属性的用法,在很早的文章中我有介绍过,这里再简要说明下:

    Always:每次打开数据集都重新取字段定义,这是默认值

    Never:从不取字段定义,这种情况,需要我们在设计期为ClientQuery建好字段

    Once:只取一次字段定义,即第一次打开数据集时才取。

    WithData:

    好了,现在我们将AutoFieldDefsOnOpen设置为mwafoOnce,让数据集只取一次字段定义,避免重复打开数据集时重建字段,进而避免每次都重复执行绑定。最终,我们用下面的方式实现绑定:

    FBind.UpdateEvent.Activate(False);
    ClientQuery.AutoFieldDefsOnOpen:=mwafoNever; ClientQuery.Query.Text:=Select * from test'; ClientQuery.Open; FBind.Bind(...)
    FBind.UpdateEvent.Activate(True); ...

    经过这样改进,Listview显示的速度就从蜗牛变成飞机了!

    2020-05-18:补充,用户点击快了,会出错,然后界面显示不正常,只能退出重进app,修正办法就是在打开数据集前,停止Bind,即FBind.UpdateEvent.Activate(False),打开后再重新打开FBind,即FBind.UpdateEvent.Activate(True);

    另外,设置为mwafoOnce时,重新打开数据集时,会产生错误,目前用mwafoNever正常,但需要在设计期定义好定段。

    总结来说,作者对于绑定数据集情况,没有考虑数据集的反复重新打开的场景,把此问题已经反馈给作者,期待下一版本有改正。

  • 相关阅读:
    Jena学习笔记(2)——利用数据库保存本体
    在Jena框架下基于MySQL数据库实现本体的存取操作
    推荐系统数据稀疏性问题
    基于协同过滤的推荐系统
    机器学习相关——协同过滤
    学习进度条十五(第16周)
    梦断代码阅读笔记三
    梦断代码阅读笔记二
    数组最大值
    梦断代码阅读笔记一
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/12893284.html
Copyright © 2011-2022 走看看