GUI Windows Forms C# Tutorial

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 m_Data = new List();
      private List m_Visited = new List();
      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; }
      }
   }