zoukankan      html  css  js  c++  java
  • ListView VirtualMode Demo

    向ListView中添加大量数据的时候,往往都慢的令人难受,使用VirtualMode模式可大大改善呈现的性能.以下Demo了一下ListView使用时候的常见场景,包括加载/更新/删除/排序
    namespace ListviewVirtualTest
    {
        
    partial class Form2
        
    {
            
    /// <summary>
            
    /// 必需的设计器变量。
            
    /// </summary>

            private System.ComponentModel.IContainer components = null;

            
    /// <summary>
            
    /// 清理所有正在使用的资源。
            
    /// </summary>
            
    /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>

            protected override void Dispose(bool disposing)
            
    {
                
    if (disposing && (components != null))
                
    {
                    components.Dispose();
                }

                
    base.Dispose(disposing);
            }


            
    Windows 窗体设计器生成的代码

            
    private System.Windows.Forms.Button button1;
            
    private System.Windows.Forms.ListView listView1;
            
    private System.Windows.Forms.ColumnHeader columnHeader1;
            
    private System.Windows.Forms.ColumnHeader columnHeader2;
            
    private System.Windows.Forms.Button button2;
            
    private System.Windows.Forms.Button button3;
        }

    }

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace ListviewVirtualTest
    {
        
    public partial class Form2 : Form
        
    {
            
    private List<ListViewItem> m_hListViewItems;
            
    private MySorter mySorter;
            
    public Form2()
            
    {
                InitializeComponent();
                m_hListViewItems 
    = new List<ListViewItem>();
                mySorter 
    = new MySorter();
            }


            
    void listView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
            
    {
                e.Item 
    = m_hListViewItems[e.ItemIndex];
            }


            
    private void button1_Click(object sender, EventArgs e)
            
    {
                
    int NR = 10000;

                
    for (int i = 0; i < NR; i++)
                    m_hListViewItems.Add(
                        
    new ListViewItem(new string[] { i + " test1", i + " test2" }));

                listView1.RetrieveVirtualItem 
    += new RetrieveVirtualItemEventHandler(listView_RetrieveVirtualItem);

                listView1.VirtualListSize 
    = NR;
                listView1.VirtualMode 
    = true;
            }


            
    //更新
            private void button2_Click(object sender, EventArgs e)
            
    {
                
    for (int i = 0; i < m_hListViewItems.Count; i++)
                
    {
                    m_hListViewItems[i].SubItems[
    0].Text = i + " " + DateTime.Now.ToString();
                    m_hListViewItems[i].SubItems[
    1].Text = i + " " + DateTime.Now.ToString();
                }


                listView1.Invalidate();
            }


            
    // 删除
            private void button3_Click(object sender, EventArgs e)
            
    {
                List
    <ListViewItem> list = new List<ListViewItem>();
                
    for (int i = 0; i < m_hListViewItems.Count; i += 2)
                
    {
                    list.Add(m_hListViewItems[i]);
                }

                
    foreach (ListViewItem lvi in list)
                
    {
                    m_hListViewItems.Remove(lvi);
                }


                listView1.VirtualListSize 
    = m_hListViewItems.Count;
                listView1.Invalidate();
            }



            
    //排序
            private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
            
    {
                
    if (e.Column == mySorter.ColumnIndex)
                
    {
                    mySorter.SortOrder 
    = (
                        mySorter.SortOrder 
    == SortOrder.Descending ?
                        SortOrder.Ascending : SortOrder.Descending);
                }

                
    else
                
    {
                    mySorter.SortOrder 
    = SortOrder.Ascending;
                    mySorter.ColumnIndex 
    = e.Column;
                }


                m_hListViewItems.Sort(mySorter);

                listView1.Invalidate();
            }


        }

    }

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;

    namespace ListviewVirtualTest
    {
        
    public class MySorter : System.Collections.Generic.IComparer<ListViewItem>
        
    {
            
    public SortOrder SortOrder = SortOrder.None;
            
    public int ColumnIndex = -1;

            

            
    IComparer  成员
        }

    }


    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;

    namespace ListviewVirtualTest
    {
        
    static class Program
        
    {
            
    /// <summary>
            
    /// 应用程序的主入口点。
            
    /// </summary>

            [STAThread]
            
    static void Main()
            
    {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(
    false);
                Application.Run(
    new Form2());
            }

        }

    }
  • 相关阅读:
    三、k8s 核心功能
    【RobotFramework】显式等待、隐式等待、强制等待
    如何快速发现缺陷
    冒烟测试知多少
    【Robot Framework】发送GET与POST请求
    Fastdfs.jar手动安装到本地仓库配置
    Lua架构
    SPU与SKU
    docker环境删除与安装配置
    idea-maven导入出现omitted for duplicate且下标标红
  • 原文地址:https://www.cnblogs.com/hcfalan/p/1238493.html
Copyright © 2011-2022 走看看