title: DataGridView SLOW when assigning value to cell
body: <p>I can't seem to figure out what's going here...I have a dataGridView with no more than 500 rows at any given time but usually around 200 or 300. I iterate through the grid and set the button text and color according user interaction. Example:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  
  namespace WindowsFormsApplication1
  {
      public partial class Form1 : Form
      {
          DataGridViewButtonColumn btn;
          ContextMenuStrip ctxtStartStop;
  
          public Form1()
          {
              InitializeComponent();
  
              formatGrid();
              populateGrid();
  
              ctxtStartStop = new ContextMenuStrip();
              ctxtStartStop.Items.Add("START ALL");
              ctxtStartStop.Items.Add("STOP ALL");
              ctxtStartStop.ItemClicked += new ToolStripItemClickedEventHandler(ctxtMenuStrip_ItemClicked);
          }
  
          private void formatGrid()
          {
              btn = new DataGridViewButtonColumn();
              btn.Text = "START";
              btn.Name = "colStartStop";
              btn.HeaderText = "Start/Stop";
              btn.DefaultCellStyle.BackColor = Color.LightGreen;
              btn.DefaultCellStyle.ForeColor = Color.Black;
              btn.ReadOnly = false;
              btn.UseColumnTextForButtonValue = false;
              btn.FlatStyle = FlatStyle.Standard;
              btn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
  
              gridDisplay.AutoGenerateColumns = false;
              gridDisplay.AllowUserToAddRows = false;
              gridDisplay.RowHeadersVisible = false;
              gridDisplay.Columns.Add(new DataGridViewTextBoxColumn()
              {
                  Name = "colSymbol",
                  HeaderText = "Symbols",
                  ReadOnly = true,
                  AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,
                  MinimumWidth = 50
              });
              gridDisplay.Columns.Add(btn);
  
              gridDisplay.MouseClick += new MouseEventHandler(gridDisplay_MouseClick);
          }
  
          private void populateGrid()
          {
              for (int i = 0; i &lt; 500; i++)
              {
                  gridDisplay.Rows.Add("XYZ", "START");
              }
          }
  
          private void gridDisplay_MouseClick(object sender, MouseEventArgs e)
          {
              if (e.Button == System.Windows.Forms.MouseButtons.Left)
                  return;
  
              int rowPosition = gridDisplay.HitTest(e.X, e.Y).RowIndex;
              int colPosition = gridDisplay.HitTest(e.X, e.Y).ColumnIndex;
  
              if (rowPosition == -1 &amp;&amp; colPosition == 1)
              {
                  ctxtStartStop.Show(gridDisplay.PointToScreen(e.Location));
              }
          }
  
          private void ctxtMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
          {
              if (e.ClickedItem.Text == "START ALL")
              {
                  ctxtStartStop.Hide();
                  startAll();
              }
              else if (e.ClickedItem.Text == "STOP ALL")
              {
                  ctxtStartStop.Hide();
                  stopAll();
              }
          }
  
          private void startAll()
          {
              string action = string.Empty;
              int idx = 1;
  
              for (int i = 0; i &lt; gridDisplay.Rows.Count; i++)
              {
                  var btnCell = gridDisplay.Rows[i].Cells[idx];
  
                  action = (string)btnCell.Value;
  
                  if (action == "START")
                  {
                      btnCell.Value = "STOP";
                      gridDisplay.Rows[i].Cells["colStartStop"].Style.BackColor = Color.Red;
                      gridDisplay.Rows[i].Cells["colStartStop"].Style.ForeColor = Color.White;
                  }
              }
          }
  
          private void stopAll()
          {
              string action = string.Empty;
              int idx = 1;
  
              for (int i = 0; i &lt; gridDisplay.Rows.Count; i++)
              {
                  var btnCell = gridDisplay.Rows[i].Cells[idx];
  
                  action = (string)btnCell.Value;
  
                  if (action == "STOP")
                  {
                      btnCell.Value = "START";
                      gridDisplay.Rows[i].Cells["colStartStop"].Style.BackColor = Color.LightGreen;
                      gridDisplay.Rows[i].Cells["colStartStop"].Style.ForeColor = Color.Black;
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>The funny thing is that setting the Colors works fine but when I set the Value it runs extremely slow.</p>
  
  <p>Can someone please explain what I'm doing wrong here.</p>
  
  <p>Thank you,
  -DA</p>