DataGridView 虚表 虚拟模式时效果

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

namespace VirtualMode
{
   partial class VirtualModeForm : Form
   {
      private List<DataObject> m_Data = new List<DataObject>();
      private List<bool> m_Visited = new List<bool>();
      public VirtualModeForm()
      {
         InitializeComponent();
         m_Grid.CellValueNeeded += OnCellValueNeeded;
         m_GetVisitedCountButton.Click += OnGetVisitedCount;
         InitData();
         InitGrid();
      }

      private void InitData()
      {
         for (int i = 0; i < 1000001; 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.VirtualMode = true;
         m_Grid.ReadOnly = true;
         m_Grid.AllowUserToAddRows = false;
         m_Grid.AllowUserToDeleteRows = false;
         m_Grid.ColumnCount = 3;
         m_Grid.Rows.Add();
         m_Grid.Rows.AddCopies(0, 1000000);
         // Uncomment the next line and comment out the  
         // the rest of the method to switch to data bound mode
         //m_Grid.DataSource = m_Data;
      }
      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();
         }
      }

      private void OnGetVisitedCount(object sender, EventArgs e)
      {
         int count = 0;
         foreach (bool b in m_Visited)
         {
            if (b) count++;
         }
         MessageBox.Show(count.ToString());
      }

       private void VirtualModeForm_Load(object sender, EventArgs e)
       {

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

}
posted @ 2009-02-12 17:13  lastgame  阅读(946)  评论(0编辑  收藏  举报