using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
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 < 100; 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, 100);
}
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 InitializeComponent()
{
this.m_Grid = new System.Windows.Forms.DataGridView();
this.m_GetVisitedCountButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.m_Grid)).BeginInit();
this.SuspendLayout();
//
// m_Grid
//
this.m_Grid.Location = new System.Drawing.Point(12, 12);
this.m_Grid.Name = "m_Grid";
this.m_Grid.Size = new System.Drawing.Size(327, 252);
this.m_Grid.TabIndex = 0;
this.m_Grid.Text = "dataGridView1";
//
// m_GetVisitedCountButton
//
this.m_GetVisitedCountButton.Location = new System.Drawing.Point(12, 280);
this.m_GetVisitedCountButton.Name = "m_GetVisitedCountButton";
this.m_GetVisitedCountButton.Size = new System.Drawing.Size(231, 23);
this.m_GetVisitedCountButton.TabIndex = 1;
this.m_GetVisitedCountButton.Text = "Get Count of Visited Cells";
//
// VirtualModeForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(365, 346);
this.Controls.Add(this.m_GetVisitedCountButton);
this.Controls.Add(this.m_Grid);
this.Name = "VirtualModeForm";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.m_Grid)).EndInit();
this.ResumeLayout(false);
}
private System.Windows.Forms.DataGridView m_Grid;
private System.Windows.Forms.Button m_GetVisitedCountButton;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new VirtualModeForm());
}
}
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; }
}
}