using System; using System.Windows.Forms; using System.Collections.Generic; class test { [STAThreadAttribute()] public static void Main() { Application.Run(new VirtualModeForm()); } } class VirtualModeForm : Form { private List<DataObject> m_Data = new List<DataObject>(); private List<bool> m_Visited = new List<bool>(); DataGridView m_Grid = new DataGridView(); public VirtualModeForm() { Controls.Add(m_Grid); m_Grid.CellValueNeeded += OnCellValueNeeded; InitData(); InitGrid(); } private void InitData() { for (int i = 0; i < 1000001 + 1; i++) { m_Visited.Add(false); DataObject obj = new DataObject(); obj.Id = i; obj.Val = 2 * i; m_Data.Add(obj); } } private void InitGrid() { m_Grid.Dock = DockStyle.Fill; m_Grid.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader); m_Grid.VirtualMode = true; m_Grid.ReadOnly = true; m_Grid.ColumnCount = 108; // this line causes 8 seconds delay. how to fix. m_Grid.RowCount = 1000000; } private void OnCellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { m_Visited[e.RowIndex] = true; if (e.ColumnIndex == 0) { e.Value = m_Data[e.RowIndex].Id; } else if (e.ColumnIndex == 1) { e.Value = m_Data[e.RowIndex].Val; } else if (e.ColumnIndex == 2) { Random rand = new Random(); e.Value = rand.Next(); } } } public class DataObject { private int m_Id; private int m_Val; public int Val { get { return m_Val; } set { m_Val = value; } } public int Id { get { return m_Id; } set { m_Id = value; } } public int Id1 { get; set; } public int Id2 { get; set; } public int Id3 { get; set; } public int Id4 { get; set; } public int Id5 { get; set; } public int Id6 { get; set; } public int Id7 { get; set; } public int Id8 { get; set; } public int Id9 { get; set; } public int Id10 { get; set; } public int Id11 { get; set; } public int Id12 { get; set; } public int Id13 { get; set; } public int Id14 { get; set; } public int Id15 { get; set; } public int Id16 { get; set; } public int Id17 { get; set; } public int Id18 { get; set; } public int Id19 { get; set; } public int Id20 { get; set; } public int Id21 { get; set; } public int Id22 { get; set; } public int Id23 { get; set; } public int Id24 { get; set; } public int Id25 { get; set; } public int Id26 { get; set; } public int Id27 { get; set; } public int Id28 { get; set; } public int Id29 { get; set; } public int Id31 { get; set; } public int Id32 { get; set; } public int Id33 { get; set; } public int Id34 { get; set; } public int Id35 { get; set; } public int Id36 { get; set; } public int Id37 { get; set; } public int Id38 { get; set; } public int Id39 { get; set; } public int Id310 { get; set; } public int Id311 { get; set; } public int Id312 { get; set; } public int Id313 { get; set; } public int Id314 { get; set; } public int Id315 { get; set; } public int Id316 { get; set; } public int Id317 { get; set; } public int Id318 { get; set; } public int Id319 { get; set; } public int Id320 { get; set; } public int Id321 { get; set; } public int Id322 { get; set; } public int Id323 { get; set; } public int Id324 { get; set; } public int Id325 { get; set; } public int Id326 { get; set; } public int Id327 { get; set; } public int Id328 { get; set; } public int Id329 { get; set; } public int Id401 { get; set; } public int Id402 { get; set; } public int Id403 { get; set; } public int Id404 { get; set; } public int Id405 { get; set; } public int Id406 { get; set; } public int Id407 { get; set; } public int Id408 { get; set; } public int Id409 { get; set; } public int Id4010 { get; set; } public int Id4011 { get; set; } public int Id4012 { get; set; } public int Id4013 { get; set; } public int Id4014 { get; set; } public int Id4015 { get; set; } public int Id4016 { get; set; } public int Id4017 { get; set; } public int Id4018 { get; set; } public int Id4019 { get; set; } public int Id4020 { get; set; } public int Id4021 { get; set; } public int Id4022 { get; set; } public int Id4023 { get; set; } public int Id4024 { get; set; } public int Id4025 { get; set; } public int Id4026 { get; set; } public int Id4027 { get; set; } public int Id4028 { get; set; } public int Id4029 { get; set; } public int Id4031 { get; set; } public int Id4032 { get; set; } public int Id4033 { get; set; } public int Id4034 { get; set; } public int Id4035 { get; set; } public int Id4036 { get; set; } public int Id4037 { get; set; } public int Id4038 { get; set; } public int Id4039 { get; set; } public int Id40310 { get; set; } public int Id40311 { get; set; } public int Id40312 { get; set; } public int Id40313 { get; set; } public int Id40314 { get; set; } public int Id40315 { get; set; } public int Id40316 { get; set; } public int Id40317 { get; set; } public int Id40318 { get; set; } public int Id40319 { get; set; } public int Id40320 { get; set; } public int Id40321 { get; set; } public int Id40322 { get; set; } public int Id40323 { get; set; } public int Id40324 { get; set; } public int Id40325 { get; set; } public int Id40326 { get; set; } public int Id40327 { get; set; } public int Id40328 { get; set; } public int Id40329 { get; set; } }