Index: trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.Designer.cs	(revision 7306)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.Designer.cs	(revision 7318)
@@ -71,7 +71,7 @@
       this.lengthTextBox.Size = new System.Drawing.Size(372, 20);
       this.lengthTextBox.TabIndex = 1;
-      this.lengthTextBox.Validated += new System.EventHandler(this.lengthTextBox_Validated);
       this.lengthTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lengthTextBox_KeyDown);
       this.lengthTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.lengthTextBox_Validating);
+      this.lengthTextBox.Validated += new System.EventHandler(this.lengthTextBox_Validated);
       // 
       // dataGridView
@@ -89,7 +89,8 @@
       this.dataGridView.Size = new System.Drawing.Size(424, 378);
       this.dataGridView.TabIndex = 2;
+      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.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView_KeyDown);
       // 
       // errorProvider
Index: trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.cs	(revision 7306)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleArrayView.cs	(revision 7318)
@@ -23,4 +23,5 @@
 using System.ComponentModel;
 using System.Drawing;
+using System.Text;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -153,4 +154,48 @@
       dataGridView.Rows[e.RowIndex].ErrorText = string.Empty;
     }
+    private void dataGridView_KeyDown(object sender, KeyEventArgs e) {
+      if (!ReadOnly && e.Control && e.KeyCode == Keys.V)
+        PasteValuesToDataGridView();
+      else if (e.Control && e.KeyCode == Keys.C)
+        CopyValuesFromDataGridView();
+      else if (e.Control && e.KeyCode == Keys.A)
+        dataGridView.SelectAll();
+    }
+    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;
+
+      if (minRowIndex > maxRowIndex) {
+        int temp = minRowIndex;
+        minRowIndex = maxRowIndex;
+        maxRowIndex = temp;
+      }
+
+      for (int i = minRowIndex; i <= maxRowIndex; i++) {
+        DataGridViewColumn column = dataGridView.Columns.GetFirstColumn(DataGridViewElementStates.Visible);
+        DataGridViewCell cell = dataGridView[column.Index, i];
+        if (cell.Selected) {
+          s.Append(Content.GetValue(i));
+          s.Append(Environment.NewLine);
+        }
+      }
+      Clipboard.SetText(s.ToString());
+    }
+    private void PasteValuesToDataGridView() {
+      string[] values = SplitClipboardString(Clipboard.GetText());
+      int rowIndex = 0;
+      if (dataGridView.CurrentCell != null)
+        rowIndex = dataGridView.CurrentCell.RowIndex;
+
+      if (Content.Length < rowIndex + values.Length) Content.Length = rowIndex + values.Length;
+      for (int row = 0; row < values.Length; row++)
+        Content.SetValue(values[row], row + rowIndex);
+    }
+    private string[] SplitClipboardString(string clipboardText) {
+      clipboardText = clipboardText.Remove(clipboardText.Length - Environment.NewLine.Length);  //remove last newline constant
+      return clipboardText.Split(new string[] { Environment.NewLine, "\t" }, StringSplitOptions.None);
+    }
     #endregion
   }
