Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs	(revision 3311)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs	(revision 3312)
@@ -84,14 +84,19 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataGridView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;
       this.dataGridView.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
       this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-      this.dataGridView.ColumnHeadersVisible = false;
       this.dataGridView.Location = new System.Drawing.Point(0, 52);
       this.dataGridView.Name = "dataGridView";
+      this.dataGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
       this.dataGridView.Size = new System.Drawing.Size(424, 352);
       this.dataGridView.TabIndex = 4;
+      this.dataGridView.VirtualMode = true;
+      this.dataGridView.Scroll += new System.Windows.Forms.ScrollEventHandler(this.dataGridView_Scroll);
+      this.dataGridView.CellValueNeeded += new System.Windows.Forms.DataGridViewCellValueEventHandler(this.dataGridView_CellValueNeeded);
       this.dataGridView.CellParsing += new System.Windows.Forms.DataGridViewCellParsingEventHandler(this.dataGridView_CellParsing);
       this.dataGridView.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.dataGridView_CellValidating);
       this.dataGridView.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellEndEdit);
+      this.dataGridView.Resize += new System.EventHandler(this.dataGridView_Resize);
       // 
       // errorProvider
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 3311)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 3312)
@@ -23,4 +23,5 @@
 using System.ComponentModel;
 using System.Drawing;
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -85,20 +86,33 @@
       columnsTextBox.Text = Content.Columns.ToString();
       columnsTextBox.Enabled = true;
-      dataGridView.Rows.Clear();
-      dataGridView.Columns.Clear();
+      dataGridView.RowCount = 0;
+      dataGridView.ColumnCount = 0;
       if ((Content.Rows > 0) && (Content.Columns > 0)) {
-        for (int i = 0; i < Content.Columns; i++) {
-          dataGridView.ColumnCount++;
-          dataGridView.Columns[dataGridView.ColumnCount - 1].FillWeight = float.Epsilon;  // sum of all fill weights must not be larger than 65535
-        }
         dataGridView.RowCount = Content.Rows;
-        for (int i = 0; i < Content.Rows; i++) {
-          for (int j = 0; j < Content.Columns; j++)
-            dataGridView.Rows[i].Cells[j].Value = Content.GetValue(i, j);
-        }
-        for (int i = 0; i < Content.Columns; i++)
-          dataGridView.Columns[i].Width = dataGridView.Columns[i].GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, true);
+        dataGridView.ColumnCount = Content.Columns;
+        UpdateRowHeaders();
+        UpdateColumnHeaders();
       }
       dataGridView.Enabled = true;
+    }
+
+    private void UpdateColumnHeaders() {
+      for (int i = 0; i < Content.Columns; i++) {
+        if (Content.ColumnNames.Count() != 0)
+          dataGridView.Columns[i].HeaderText = Content.ColumnNames.ElementAt(i);
+        else
+          dataGridView.Columns[i].HeaderText = "Column " + i;
+      }
+      dataGridView.Invalidate();
+    }
+
+    private void UpdateRowHeaders() {
+      for (int i = dataGridView.FirstDisplayedScrollingRowIndex; i < dataGridView.FirstDisplayedScrollingRowIndex + dataGridView.DisplayedRowCount(true); i++) {
+        if (Content.RowNames.Count() != 0)
+          dataGridView.Rows[i].HeaderCell.Value = Content.RowNames.ElementAt(i);
+        else 
+          dataGridView.Rows[i].HeaderCell.Value = i.ToString();
+      }
+      dataGridView.Invalidate();
     }
 
@@ -178,5 +192,18 @@
       dataGridView.Rows[e.RowIndex].ErrorText = string.Empty;
     }
+    private void dataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) {
+      e.Value = Content.GetValue(e.RowIndex, e.ColumnIndex);
+    }
+
+    private void dataGridView_Scroll(object sender, ScrollEventArgs e) {
+      UpdateRowHeaders();
+    }
+
+    private void dataGridView_Resize(object sender, EventArgs e) {
+      UpdateRowHeaders();
+    }
     #endregion
+
+
   }
 }
