[WinForm] DataGridView 虛擬模式 實作

摘要:[WinForm]DataGridView 虛擬模式 實作

最近工作上遇到,要在datagridview顯示約150萬筆的大量資料

本來想說用datagridview的datasource直接綁定資料源就OK了

沒想到這樣的作法會造成datagridview繫結時花費較多時間

後來找到 datagridview在大量資料時,比較好的用法是切換成虛擬模式 

經過我實作後的比較150萬筆左右的資料 時間可以從1秒 降到 0.5秒左右,實在是快非常多啊!!

 

首先把 datagridview的VirtualMode設為true

接下來要註冊 datagridview的CellValueNeeded事件

程式碼完整如下

private void button1_Click(object sender, EventArgs e)
{
         List<MyClass> lisTD = new List<MyClass>(); //存放所有資料的List
 
         dataGridView1.RowCount = lisTD.Count;    //設定datagridview所有的資料量
}
 
private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            if (e.RowIndex == dataGridView1.RowCount - 1) return;
 
            MyClass tempTD = null;
 
            tempTD = lisTD[e.RowIndex];
 
            switch (dataGridView1.Columns[e.ColumnIndex].Name)
            {
                case "Column1":
                    e.Value = tempTD.Date;
                    break;
                case "Column2":
                    e.Value = tempTD.StockId;
                    break;
            }
        }
 

另外 若原先的List內容有變 要從新顯示,只需要先將列清空,再指定筆數即可 ,如下

dataGridView1.Rows.Clear();
dataGridView1.RowCount = lisTD.Count;