永发信息网

【delphi】动态刷新listview,如果条目过多,会出问题,求解

答案:3  悬赏:60  手机版
解决时间 2021-02-06 18:55
动态刷新listview,如果条目过多,会出问题。
比如我一次刷新200条(数据内容可能会随时改变,3秒刷新一次,所谓的刷新就是如果这个条目没出现过,就subitem.add,如果出现过,就只更新不刷新SubItems.strings[0]:=xxx,所以肯定跟刷新方式没什么关系),正常情况下每3秒更新一下数据。问题来了。。有的时候不知道是因为机器卡还是什么原因会出现只刷出来50条(约等于 并非绝对 只为说明问题),然后过了两秒,另外150条才刷新出来。而且顺序全都乱了。
表达能力有限,举个例子,假设我刷新出来的items.caption分别是
//默认顺序
aaa
bbb
ccc
ddd
fff
如果出现上述我说的情况 可能会变成
aaa
fff
。。。然后过了几秒
变成
aaa
fff
ddd
ccc
bbb
顺序全乱了。(请参照默认顺序)

以下是我的伪代码
得到数据
把唯一标识加入tstringlist
for stringlist
if 唯一标识存在于stringlist then
说明已经subitem.add过了 那么只更新数据
所有数据更新方式为SubItems.strings[0]:=xxx
else
if 唯一标识不存在于stringlist then
begin
说明是一个新数据,那么要添加,而不是更新
subitem.add。。。。。。
添加完之后自然就变成伪代码开头处执行了,也就是说如果所有数据都导入进去了
就会一直使用subitems.strings[0]的方式更新listview
不会出现使用subitem.add造成的闪烁问题
end;

我需要的答案:
1 为什么会出现刚开头我说的那种情况↑
2 如果问题1无法解决 可不可以固定顺序 就是无论怎么刷新都不改变排列顺序

谢谢各位老师

谢谢各位老师的解答 是的 我知道第一列是caption 第二列是subitems[0]
数据并没有填错 因为如果数据填错了的话 那么马上就可以发现问题的
我出现的问题也不是每次(即每隔3秒钟)必出现 只是偶尔出现 (可能n个小时才出现一次)
我想主要问题应该是在伪代码处 只是我搞不好怎么更合理的运用刷新与更新之间的逻辑
即 subitem.add(xxx) →(如果使用这个添加数据,必然要配合listview.clear来清空) 和 subitem.strings[0]:=xxx 之间的判断方式
最佳答案
我想你的问题可能是你把数据填错了
ListView在表格模式下 第1列是Caption , 第2列是 subitems[0]
所以一般要是使用ListView最好是吧左边第一列不使用或者用作行序号 然后从第二列开始填充数据
全部回答
如果每次固定都是200条,为什么还要subitem.add ?每次subitem.strings[i]不就好了?
你好! 上百条的数据就放弃listview 希望对你有所帮助,望采纳。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
黑豹物流(新原公路大众超市北)地址在哪,我要
广东联兴.拓得利铝天花驻昆办事处怎么去啊,
在哲学上,二元论的根本错误在于A. 否认世界
钾的正常值是多少,怎么补钾
重庆到资阳坐汽车要多久?
南京怎么办理暂住证,在哪里办理,周日能办吗
月库的意思是什么啊?知道的请说下!
固原公租房租期多长
红旗物流(和平路与南环路交叉口向西200米路南
G216/红光山桥(路口)我想知道这个在什么地方
请高手们看看石头上刻的是什么字
怎样排出结石
定语从句that和which的区别
天河区岗顶百脑汇C座14楼1401A室是什么单位?
鸿祥物流有限公司怎么去啊,我要去那办事
推荐资讯
峰尚丽景酒店地址有知道的么?有点事想过去
裹首的意思是什么啊?知道的请说下!
泰迪狗狗怎么避免髌骨脱位
9.99x22.2+33.4x3.34
某校地理兴趣小组的同学,将某一天三地的昼弧
顺景水族地址在哪,我要去那里办事
不死光年是什么意思
刚申请了信用卡。如何使用信用卡消费
下列说法正确的是A.苯分子是一个由6个碳原子
交通事故中伤者岀院后,再次入院后的医疗费能
梦幻西游109DT 自己学100的打造做压缩 自己用
【三个犹太人】世界上最伟大的三个犹太人是谁
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?