Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionEstimatedClassValuesView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionEstimatedClassValuesView.cs	(revision 6254)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationSolutionEstimatedClassValuesView.cs	(revision 6255)
@@ -33,4 +33,5 @@
   public partial class ClassificationSolutionEstimatedClassValuesView : ItemView, IClassificationSolutionEvaluationView {
     private const string TARGETVARIABLE_SERIES_NAME = "Target Variable";
+    private const string ESTIMATEDVALUES_SERIES_NAME = "Estimated Class Values (all)";
     private const string ESTIMATEDVALUES_TRAINING_SERIES_NAME = "Estimated Class Values (training)";
     private const string ESTIMATEDVALUES_TEST_SERIES_NAME = "Estimated Class Values (test)";
@@ -84,20 +85,20 @@
       if (InvokeRequired) Invoke((Action)UpdateEstimatedValues);
       else {
-        DoubleMatrix matrix = null;
+        StringMatrix matrix = null;
         if (Content != null) {
-          double[,] values = new double[Content.ProblemData.Dataset.Rows, 3];
-          // fill with NaN
-          for (int row = 0; row < Content.ProblemData.Dataset.Rows; row++)
-            for (int column = 0; column < 3; column++)
-              values[row, column] = double.NaN;
+          string[,] values = new string[Content.ProblemData.Dataset.Rows, 5];
 
           double[] target = Content.ProblemData.Dataset.GetVariableValues(Content.ProblemData.TargetVariable);
+          double[] estimated = Content.EstimatedClassValues.ToArray();
           for (int row = 0; row < target.Length; row++) {
-            values[row, 0] = target[row];
+            values[row, 0] = row.ToString();
+            values[row, 1] = target[row].ToString();
+            values[row, 2] = estimated[row].ToString();
           }
+
           var estimatedTraining = Content.EstimatedTrainingClassValues.GetEnumerator();
           estimatedTraining.MoveNext();
           foreach (var trainingRow in Content.ProblemData.TrainingIndizes) {
-            values[trainingRow, 1] = estimatedTraining.Current;
+            values[trainingRow, 3] = estimatedTraining.Current.ToString();
             estimatedTraining.MoveNext();
           }
@@ -105,10 +106,11 @@
           estimatedTest.MoveNext();
           foreach (var testRow in Content.ProblemData.TestIndizes) {
-            values[testRow, 2] = estimatedTest.Current;
+            values[testRow, 4] = estimatedTest.Current.ToString();
             estimatedTest.MoveNext();
           }
 
-          matrix = new DoubleMatrix(values);
-          matrix.ColumnNames = new string[] { TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_TRAINING_SERIES_NAME, ESTIMATEDVALUES_TEST_SERIES_NAME };
+          matrix = new StringMatrix(values);
+          matrix.ColumnNames = new string[] {"Id", TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_SERIES_NAME, ESTIMATEDVALUES_TRAINING_SERIES_NAME, ESTIMATEDVALUES_TEST_SERIES_NAME };
+          matrix.SortableView = true;
         }
         matrixView.Content = matrix;
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionEstimatedClassValuesView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionEstimatedClassValuesView.cs	(revision 6254)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionEstimatedClassValuesView.cs	(revision 6255)
@@ -84,7 +84,7 @@
       if (InvokeRequired) Invoke((Action)UpdateEstimatedValues);
       else {
-        DoubleMatrix matrix = null;
+        StringMatrix matrix = null;
         if (Content != null) {
-          double[,] values = new double[Content.ProblemData.Dataset.Rows, 3];
+          string[,] values = new string[Content.ProblemData.Dataset.Rows, 5];
 
           double[] target = Content.ProblemData.Dataset.GetVariableValues(Content.ProblemData.TargetVariable);
@@ -92,11 +92,13 @@
           double[] estimatedValues = Content.EstimatedValues.ToArray();
           for (int row = 0; row < target.Length; row++) {
-            values[row, 0] = target[row];
-            values[row, 1] = estimatedClassValues[row];
-            values[row, 2] = estimatedValues[row];
+            values[row, 0] = row.ToString();
+            values[row, 1] = target[row].ToString();
+            values[row, 2] = estimatedClassValues[row].ToString();
+            values[row, 3] = estimatedValues[row].ToString();
           }
 
-          matrix = new DoubleMatrix(values);
-          matrix.ColumnNames = new string[] { TargetClassValuesSeriesname, EstimatedClassValuesSeriesName, EstimatedValuesSeriesName };
+          matrix = new StringMatrix(values);
+          matrix.ColumnNames = new string[] { "Id", TargetClassValuesSeriesname, EstimatedClassValuesSeriesName, EstimatedValuesSeriesName };
+          matrix.SortableView = true;
         }
         matrixView.Content = matrix;
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs	(revision 6254)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs	(revision 6255)
@@ -27,4 +27,5 @@
 using HeuristicLab.MainForm;
 using HeuristicLab.MainForm.WindowsForms;
+using System.Globalization;
 
 namespace HeuristicLab.Problems.DataAnalysis.Views {
@@ -33,4 +34,5 @@
   public partial class RegressionSolutionEstimatedValuesView : ItemView, IRegressionSolutionEvaluationView {
     private const string TARGETVARIABLE_SERIES_NAME = "Target Variable";
+    private const string ESTIMATEDVALUES_SERIES_NAME = "Estimated Values (all)";
     private const string ESTIMATEDVALUES_TRAINING_SERIES_NAME = "Estimated Values (training)";
     private const string ESTIMATEDVALUES_TEST_SERIES_NAME = "Estimated Values (test)";
@@ -84,13 +86,10 @@
       if (InvokeRequired) Invoke((Action)UpdateEstimatedValues);
       else {
-        DoubleMatrix matrix = null;
+        StringMatrix matrix = null;
         if (Content != null) {
-          double[,] values = new double[Content.ProblemData.Dataset.Rows, 5];
-          // initialize to double.NaN
-          for (int row = 0; row < Content.ProblemData.Dataset.Rows; row++)
-            for (int column = 0; column < 5; column++)
-              values[row, column] = double.NaN;
+          string[,] values = new string[Content.ProblemData.Dataset.Rows, 7];
 
           double[] target = Content.ProblemData.Dataset.GetVariableValues(Content.ProblemData.TargetVariable);
+          var estimated = Content.EstimatedValues.GetEnumerator();
           var estimated_training = Content.EstimatedTrainingValues.GetEnumerator();
           var estimated_test = Content.EstimatedTestValues.GetEnumerator();
@@ -98,23 +97,26 @@
           foreach (var row in Content.ProblemData.TrainingIndizes) {
             estimated_training.MoveNext();
-            values[row, 1] = estimated_training.Current;
+            values[row, 3] = estimated_training.Current.ToString();
           }
 
           foreach (var row in Content.ProblemData.TestIndizes) {
             estimated_test.MoveNext();
-            values[row, 2] = estimated_test.Current;
+            values[row, 4] = estimated_test.Current.ToString();
           }
 
-          for (int row = 0; row < target.Length; row++) {
-            values[row, 0] = target[row];
-            double est = values[row, 1];
-            if (!double.IsNaN(est)) {
-              values[row, 3] = Math.Abs(est - target[row]);
-              values[row, 4] = Math.Abs(values[row, 3] / target[row]);
-            }
+          foreach (var row in Enumerable.Range(0, Content.ProblemData.Dataset.Rows)) {
+            estimated.MoveNext();
+            double est = estimated.Current;
+            double res = Math.Abs(est - target[row]);
+            values[row, 0] = row.ToString();
+            values[row, 1] = target[row].ToString();
+            values[row, 2] = est.ToString();
+            values[row, 5] = Math.Abs(res).ToString();
+            values[row, 6] = Math.Abs(res / est).ToString();
           }
 
-          matrix = new DoubleMatrix(values);
-          matrix.ColumnNames = new string[] { TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_TRAINING_SERIES_NAME, ESTIMATEDVALUES_TEST_SERIES_NAME, "Absolute Error (training)", "Relative Error (training)" };
+          matrix = new StringMatrix(values);
+          matrix.ColumnNames = new string[] { "Id", TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_SERIES_NAME, ESTIMATEDVALUES_TRAINING_SERIES_NAME, ESTIMATEDVALUES_TEST_SERIES_NAME, "Absolute Error (all)", "Relative Error (all)" };
+          matrix.SortableView = true;
         }
         matrixView.Content = matrix;
