C# ListView 虚拟化加载百万数据
private void Form1_Load(object sender, EventArgs e) { listView1.View = View.Details; listView1.Columns.Add("索引", 100, HorizontalAlignment.Left); listView1.Columns.Add("对象", 100, HorizontalAlignment.Left); listView1.Columns.Add("通过", 100, HorizontalAlignment.Left); listViewItems = GetListViewItems(); LoadListViewItems(); }
protected List<ListViewItem> listViewItems { get; private set; }
private List<ListViewItem> GetListViewItems() { List<ListViewItem> items = new List<ListViewItem>(); ListViewItem item = null; for (int i = 0; i < 1000000; i++) { item = new ListViewItem(); item.SubItems[0].Text = i.ToString(); item.SubItems.Add("编号" + i); item.SubItems.Add("true"); items.Add(item); } return items; }
private void LoadListViewItems() { listView1.VirtualListSize = this.listViewItems.Count; listView1.VirtualMode = true; listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView_RetrieveVirtualItem); }
void listView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { e.Item = this.listViewItems[e.ItemIndex]; if (e.ItemIndex == this.listViewItems.Count) { this.listViewItems = null; //加载完成后清空listViewItems } }
转载请注明出处。