Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs	(revision 3935)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs	(revision 3936)
@@ -88,5 +88,4 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.dataGridView.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
       this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
       this.dataGridView.Location = new System.Drawing.Point(0, 52);
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 3935)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 3936)
@@ -84,5 +84,5 @@
         dataGridView.Columns.Clear();
         virtualRowIndizes = new int[0];
-      } else 
+      } else
         UpdateData();
     }
@@ -99,10 +99,9 @@
 
     private void UpdateData() {
-      sortedColumnIndizes.Clear();
+      ClearSorting();
       rowsTextBox.Text = Content.Rows.ToString();
       rowsTextBox.Enabled = true;
       columnsTextBox.Text = Content.Columns.ToString();
       columnsTextBox.Enabled = true;
-      virtualRowIndizes = Enumerable.Range(0, Content.Rows).ToArray();
       //DataGridViews with Rows but no columns are not allowed !
       if (Content.Rows == 0 && dataGridView.RowCount != Content.Rows && !Content.ReadOnly)
@@ -115,14 +114,15 @@
         dataGridView.ColumnCount = Content.Columns;
 
-      Sort();
       UpdateRowHeaders();
       UpdateColumnHeaders();
-      dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.ColumnHeader);
-      dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
       dataGridView.Enabled = true;
     }
 
     private void UpdateColumnHeaders() {
-      for (int i = 0; i < Content.Columns; i++) {
+      int firstDisplayedColumnIndex = this.dataGridView.FirstDisplayedScrollingColumnIndex;
+      if (firstDisplayedColumnIndex == -1)
+        firstDisplayedColumnIndex = 0;
+      int lastDisplayedColumnIndex = firstDisplayedColumnIndex + dataGridView.DisplayedColumnCount(true);
+      for (int i = firstDisplayedColumnIndex; i < lastDisplayedColumnIndex; i++) {
         if (Content.ColumnNames.Count() != 0)
           dataGridView.Columns[i].HeaderText = Content.ColumnNames.ElementAt(i);
@@ -130,9 +130,13 @@
           dataGridView.Columns[i].HeaderText = "Column " + (i + 1);
       }
-      dataGridView.Invalidate();
+      dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.ColumnHeader);
     }
 
     private void UpdateRowHeaders() {
-      for (int i = 0; i < dataGridView.RowCount; i++) {
+      int firstDisplayedRowIndex = dataGridView.FirstDisplayedScrollingRowIndex;
+      if(firstDisplayedRowIndex == -1)
+        firstDisplayedRowIndex = 0;
+      int lastDisplaydRowIndex = firstDisplayedRowIndex + dataGridView.DisplayedRowCount(true);
+      for (int i = firstDisplayedRowIndex; i < lastDisplaydRowIndex; i++) {
         if (Content.RowNames.Count() != 0)
           dataGridView.Rows[i].HeaderCell.Value = Content.RowNames.ElementAt(virtualRowIndizes[i]);
@@ -140,5 +144,5 @@
           dataGridView.Rows[i].HeaderCell.Value = "Row " + (i + 1);
       }
-      dataGridView.Invalidate();
+      dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
     }
 
@@ -244,7 +248,9 @@
     private void dataGridView_Scroll(object sender, ScrollEventArgs e) {
       UpdateRowHeaders();
+      UpdateColumnHeaders();
     }
     private void dataGridView_Resize(object sender, EventArgs e) {
       UpdateRowHeaders();
+      UpdateColumnHeaders();
     }
 
