Index: trunk/sources/HeuristicLab.Data.Views/3.3/ColumnsVisibilityDialog.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/ColumnsVisibilityDialog.Designer.cs	(revision 4177)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/ColumnsVisibilityDialog.Designer.cs	(revision 4178)
@@ -46,4 +46,6 @@
     private void InitializeComponent() {
       this.checkedListBox = new System.Windows.Forms.CheckedListBox();
+      this.btnShowAll = new System.Windows.Forms.Button();
+      this.btnHideAll = new System.Windows.Forms.Button();
       this.SuspendLayout();
       // 
@@ -57,7 +59,29 @@
       this.checkedListBox.Location = new System.Drawing.Point(12, 12);
       this.checkedListBox.Name = "checkedListBox";
-      this.checkedListBox.Size = new System.Drawing.Size(171, 244);
+      this.checkedListBox.Size = new System.Drawing.Size(309, 289);
       this.checkedListBox.TabIndex = 0;
       this.checkedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.checkedListBox_ItemCheck);
+      // 
+      // btnShowAll
+      // 
+      this.btnShowAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.btnShowAll.Location = new System.Drawing.Point(12, 315);
+      this.btnShowAll.Name = "btnShowAll";
+      this.btnShowAll.Size = new System.Drawing.Size(75, 23);
+      this.btnShowAll.TabIndex = 1;
+      this.btnShowAll.Text = "Show all";
+      this.btnShowAll.UseVisualStyleBackColor = true;
+      this.btnShowAll.Click += new System.EventHandler(this.btnShowAll_Click);
+      // 
+      // btnHideAll
+      // 
+      this.btnHideAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.btnHideAll.Location = new System.Drawing.Point(101, 315);
+      this.btnHideAll.Name = "btnHideAll";
+      this.btnHideAll.Size = new System.Drawing.Size(75, 23);
+      this.btnHideAll.TabIndex = 2;
+      this.btnHideAll.Text = "Hide all";
+      this.btnHideAll.UseVisualStyleBackColor = true;
+      this.btnHideAll.Click += new System.EventHandler(this.btnHideAll_Click);
       // 
       // ColumnsVisibilityDialog
@@ -65,5 +89,7 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(194, 273);
+      this.ClientSize = new System.Drawing.Size(332, 350);
+      this.Controls.Add(this.btnHideAll);
+      this.Controls.Add(this.btnShowAll);
       this.Controls.Add(this.checkedListBox);
       this.MaximizeBox = false;
@@ -72,5 +98,6 @@
       this.ShowIcon = false;
       this.ShowInTaskbar = false;
-      this.Text = "Show / Hide Columns";
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Show/Hide Columns";
       this.ResumeLayout(false);
 
@@ -80,4 +107,6 @@
 
     private System.Windows.Forms.CheckedListBox checkedListBox;
+    private System.Windows.Forms.Button btnShowAll;
+    private System.Windows.Forms.Button btnHideAll;
   }
 }
Index: trunk/sources/HeuristicLab.Data.Views/3.3/ColumnsVisibilityDialog.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/ColumnsVisibilityDialog.cs	(revision 4177)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/ColumnsVisibilityDialog.cs	(revision 4178)
@@ -52,4 +52,13 @@
       this.columns[e.Index].Visible = e.NewValue == CheckState.Checked;
     }
+
+    private void btnShowAll_Click(object sender, System.EventArgs e) {
+      for (int i = 0; i < checkedListBox.Items.Count; i++)
+        checkedListBox.SetItemChecked(i, true);
+    }
+    private void btnHideAll_Click(object sender, System.EventArgs e) {
+      for (int i = 0; i < checkedListBox.Items.Count; i++)
+        checkedListBox.SetItemChecked(i, false);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs	(revision 4177)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.Designer.cs	(revision 4178)
@@ -76,7 +76,7 @@
       this.rowsTextBox.Size = new System.Drawing.Size(355, 20);
       this.rowsTextBox.TabIndex = 1;
-      this.rowsTextBox.Validated += new System.EventHandler(this.rowsTextBox_Validated);
       this.rowsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.rowsTextBox_KeyDown);
       this.rowsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.rowsTextBox_Validating);
+      this.rowsTextBox.Validated += new System.EventHandler(this.rowsTextBox_Validated);
       // 
       // dataGridView
@@ -88,4 +88,5 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataGridView.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable;
       this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
       this.dataGridView.Location = new System.Drawing.Point(0, 52);
@@ -95,10 +96,10 @@
       this.dataGridView.TabIndex = 4;
       this.dataGridView.VirtualMode = true;
-      this.dataGridView.Scroll += new System.Windows.Forms.ScrollEventHandler(this.dataGridView_Scroll);
-      this.dataGridView.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView_ColumnHeaderMouseClick);
-      this.dataGridView.CellValueNeeded += new System.Windows.Forms.DataGridViewCellValueEventHandler(this.dataGridView_CellValueNeeded);
+      this.dataGridView.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellEndEdit);
       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.CellValueNeeded += new System.Windows.Forms.DataGridViewCellValueEventHandler(this.dataGridView_CellValueNeeded);
+      this.dataGridView.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView_ColumnHeaderMouseClick);
+      this.dataGridView.Scroll += new System.Windows.Forms.ScrollEventHandler(this.dataGridView_Scroll);
       this.dataGridView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView_KeyDown);
       this.dataGridView.Resize += new System.EventHandler(this.dataGridView_Resize);
@@ -117,7 +118,7 @@
       this.columnsTextBox.Size = new System.Drawing.Size(355, 20);
       this.columnsTextBox.TabIndex = 3;
-      this.columnsTextBox.Validated += new System.EventHandler(this.columnsTextBox_Validated);
       this.columnsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.columnsTextBox_KeyDown);
       this.columnsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.columnsTextBox_Validating);
+      this.columnsTextBox.Validated += new System.EventHandler(this.columnsTextBox_Validated);
       // 
       // columnsLabel
@@ -162,5 +163,4 @@
 
     }
-
     #endregion
 
Index: trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 4177)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 4178)
@@ -24,4 +24,5 @@
 using System.ComponentModel;
 using System.Linq;
+using System.Text;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -103,5 +104,5 @@
       columnsTextBox.Text = Content.Columns.ToString();
       columnsTextBox.Enabled = true;
-      //DataGridViews with Rows but no columns are not allowed !
+      //DataGridViews with rows but no columns are not allowed !
       if (Content.Rows == 0 && dataGridView.RowCount != Content.Rows && !Content.ReadOnly)
         Content.Rows = dataGridView.RowCount;
@@ -116,12 +117,9 @@
       UpdateColumnHeaders();
       dataGridView.Enabled = true;
+      dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
     }
 
     private void UpdateColumnHeaders() {
-      int firstDisplayedColumnIndex = this.dataGridView.FirstDisplayedScrollingColumnIndex;
-      if (firstDisplayedColumnIndex == -1)
-        firstDisplayedColumnIndex = 0;
-      int lastDisplayedColumnIndex = firstDisplayedColumnIndex + dataGridView.DisplayedColumnCount(true);
-      for (int i = firstDisplayedColumnIndex; i < lastDisplayedColumnIndex; i++) {
+      for (int i = 0; i < dataGridView.ColumnCount; i++) {
         if (Content.ColumnNames.Count() != 0)
           dataGridView.Columns[i].HeaderText = Content.ColumnNames.ElementAt(i);
@@ -137,4 +135,5 @@
         firstDisplayedRowIndex = 0;
       int lastDisplaydRowIndex = firstDisplayedRowIndex + dataGridView.DisplayedRowCount(true);
+
       for (int i = firstDisplayedRowIndex; i < lastDisplaydRowIndex; i++) {
         if (Content.RowNames.Count() != 0)
@@ -143,5 +142,4 @@
           dataGridView.Rows[i].HeaderCell.Value = "Row " + (i + 1);
       }
-      dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
     }
 
@@ -245,38 +243,98 @@
       }
     }
-    private void dataGridView_Scroll(object sender, ScrollEventArgs e) {
-      UpdateRowHeaders();
-      UpdateColumnHeaders();
+
+    private void dataGridView_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e) {
+      this.UpdateRowHeaders();
     }
     private void dataGridView_Resize(object sender, EventArgs e) {
-      UpdateRowHeaders();
-      UpdateColumnHeaders();
+      this.UpdateRowHeaders();
     }
 
     private void dataGridView_KeyDown(object sender, KeyEventArgs e) {
-      if (!ReadOnly && e.Control && e.KeyCode == Keys.V) { //shortcut for values paste
-        string[,] values = SplitClipboardString(Clipboard.GetText());
-
-        int rowIndex = 0;
-        int columnIndex = 0;
-        if (dataGridView.CurrentCell != null) {
-          rowIndex = dataGridView.CurrentCell.RowIndex;
-          columnIndex = dataGridView.CurrentCell.ColumnIndex;
-        }
-
-        for (int row = 0; row < values.GetLength(1); row++) {
-          if (row + rowIndex >= Content.Rows)
-            Content.Rows = Content.Rows + 1;
-          for (int col = 0; col < values.GetLength(0); col++) {
-            if (col + columnIndex >= Content.Columns)
-              Content.Columns = Content.Columns + 1;
-            Content.SetValue(values[col, row], row + rowIndex, col + columnIndex);
+      if (!ReadOnly && e.Control && e.KeyCode == Keys.V)
+        PasteValuesToDataGridView();
+      else if (e.Control && e.KeyCode == Keys.C)
+        CopyValuesFromDataGridView();
+    }
+
+    private void CopyValuesFromDataGridView() {
+      if (dataGridView.SelectedCells.Count == 0) return;
+      StringBuilder s = new StringBuilder();
+      int minRowIndex = dataGridView.SelectedCells[0].RowIndex;
+      int maxRowIndex = dataGridView.SelectedCells[dataGridView.SelectedCells.Count - 1].RowIndex;
+      int minColIndex = dataGridView.SelectedCells[0].ColumnIndex;
+      int maxColIndex = dataGridView.SelectedCells[dataGridView.SelectedCells.Count - 1].ColumnIndex;
+
+      if (minRowIndex > maxRowIndex) {
+        int temp = minRowIndex;
+        minRowIndex = maxRowIndex;
+        maxRowIndex = temp;
+      }
+      if (minColIndex > maxColIndex) {
+        int temp = minColIndex;
+        minColIndex = maxColIndex;
+        maxColIndex = temp;
+      }
+
+      bool addColumnNames = Content.ColumnNames.Any() && minRowIndex == 0;
+      bool addRowNames = Content.RowNames.Any() && minColIndex == 0;
+
+      //add colum names
+      if (addColumnNames) {
+        if (addRowNames)
+          s.Append('\t');
+
+        DataGridViewColumn column = dataGridView.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
+        while (column != null) {
+          s.Append(column.HeaderText);
+          s.Append('\t');
+          column = dataGridView.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None);
+        }
+        s.Remove(s.Length - 1, 1); //remove last tab
+        s.Append(Environment.NewLine);
+      }
+
+      for (int i = minRowIndex; i <= maxRowIndex; i++) {
+        int rowIndex = this.virtualRowIndizes[i];
+        if (addRowNames) {
+          s.Append(Content.RowNames.ElementAt(rowIndex));
+          s.Append('\t');
+        }
+
+        DataGridViewColumn column = dataGridView.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
+        while (column != null) {
+          DataGridViewCell cell = dataGridView[column.Index, i];
+          if (cell.Selected) {
+            s.Append(Content.GetValue(rowIndex, column.Index));
           }
-        }
-
-        ClearSorting();
-      }
-    }
-
+          s.Append('\t');
+          column = dataGridView.Columns.GetNextColumn(column, DataGridViewElementStates.Visible, DataGridViewElementStates.None);
+        }
+        s.Remove(s.Length - 1, 1); //remove last tab
+        s.Append(Environment.NewLine);
+      }
+      Clipboard.SetText(s.ToString());
+    }
+
+    private void PasteValuesToDataGridView() {
+      string[,] values = SplitClipboardString(Clipboard.GetText());
+      int rowIndex = 0;
+      int columnIndex = 0;
+      if (dataGridView.CurrentCell != null) {
+        rowIndex = dataGridView.CurrentCell.RowIndex;
+        columnIndex = dataGridView.CurrentCell.ColumnIndex;
+      }
+
+      for (int row = 0; row < values.GetLength(1); row++) {
+        if (row + rowIndex >= Content.Rows)
+          Content.Rows = Content.Rows + 1;
+        for (int col = 0; col < values.GetLength(0); col++) {
+          if (col + columnIndex >= Content.Columns)
+            Content.Columns = Content.Columns + 1;
+          Content.SetValue(values[col, row], row + rowIndex, col + columnIndex);
+        }
+      }
+      ClearSorting();
+    }
     private string[,] SplitClipboardString(string clipboardText) {
       clipboardText = clipboardText.Remove(clipboardText.Length - Environment.NewLine.Length);  //remove last newline constant
