如何动态刷新ListView的显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态刷新ListView的显示相关的知识,希望对你有一定的参考价值。

  [code=csharp] public void Select_AllTruckInfo()
  
  List<TbTruck> list = new List<TbTruck>();
  
  try
  
  //调用查询方法
  list = TruckManage.SelectTruckInfo();
  
  catch (Exception ex)
  
  MessageBox.Show(ex.Message);
  
  
  foreach (TbTruck truck in list)
  
  //循环遍历List,将数据加载到<a href="https://www.baidu.com/s?wd=ListView%E6%8E%A7%E4%BB%B6&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLuADYmHK9uHu-rHRzPvc30ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPjbLrjmvrHT3P1bsrjDdrHmY" target="_blank" class="baidu-highlight">ListView控件</a>上显示
  ListViewItem item = new ListViewItem(truck.Id.ToString());
  item.Tag = truck;
  lv_struck.Width = 850;
  //item.SubItems.Add(truck.Id.ToString());
  item.SubItems.Add(truck.Chpahaaa);
  item.SubItems.Add(truck.Chlisuyo);
  item.SubItems.Add(truck.Jifeduwe);
  item.SubItems.Add(truck.Chcuaaaa);
  item.SubItems.Add(truck.Duweaaaa);
  item.SubItems.Add(truck.CrtUser);
  item.SubItems.Add(truck.CrtDate.ToString());
  lv_struck.Items.Add(item);
  
  [/code]
  
参考技术A 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[code=csharp] public void Select_AllTruckInfo()

List<TbTruck> list = new List<TbTruck>();

try

//调用查询方法
list = TruckManage.SelectTruckInfo();

catch (Exception ex)

MessageBox.Show(ex.Message);


foreach (TbTruck truck in list)

//循环遍历List,将数据加载到ListView控件上显示
ListViewItem item = new ListViewItem(truck.Id.ToString());
item.Tag = truck;
lv_struck.Width = 850;
//item.SubItems.Add(truck.Id.ToString());
item.SubItems.Add(truck.Chpahaaa);
item.SubItems.Add(truck.Chlisuyo);
item.SubItems.Add(truck.Jifeduwe);
item.SubItems.Add(truck.Chcuaaaa);
item.SubItems.Add(truck.Duweaaaa);
item.SubItems.Add(truck.CrtUser);
item.SubItems.Add(truck.CrtDate.ToString());
lv_struck.Items.Add(item);

[/code]

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

动态刷新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最好是吧左边第一列不使用或者用作行序号 然后从第二列开始填充数据追问

我现在是这样的 先判断唯一标识是否在listview中,也就是您所说的序号或者其他等唯一标识,无论我是判断他在.caption还是.strings[1 or 2 or 3 ....]总之我先要和这几个地方进行对比
而我的问题是 在一段时间内,可能会出现莫名其妙的刷新 即本次所提问的关键点

追答

实在是想不出你的问题出在哪儿,甚至说不好听的我都没想到你的问题是什么? subItem.add 怎么会影响顺序? 追加行应该是ListView.Items.Add吧, 我在给用户处理数据经常使用ListView 从来未出现过数据顺序自己莫名变化的事儿.
建议你补充几张截图 或者部分代码

参考技术A 上百条的数据就放弃listview追问

那要使用什么呢?gridview吗?我的数据是动态刷新的,不一定百分之百上百条,主要是我认为listview很美观,感谢老师指点

参考技术B 如果每次固定都是200条,为什么还要subitem.add ?每次subitem.strings[i]不就好了?

以上是关于如何动态刷新ListView的显示的主要内容,如果未能解决你的问题,请参考以下文章

如何动态刷新 ListView? [复制]

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

Listview刷新不适用于动态

Android ListView动态刷新某项Item

android如何给listview添加动态加载数据

如何使用 jquery 动态刷新和显示列表?