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
}
}