Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.Designer.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.Designer.cs	(revision 10912)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.Designer.cs	(revision 10913)
@@ -25,22 +25,34 @@
     /// </summary>
     private void InitializeComponent() {
-      this.dataTableView1 = new DataPreprocessing.Views.PreprocessingDataTableView();
+      this.components = new System.ComponentModel.Container();
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
       this.SuspendLayout();
       // 
-      // dataTableView1
+      // chart
       // 
-      this.dataTableView1.Caption = "DataTable View";
-      this.dataTableView1.Content = null;
-      this.dataTableView1.Location = new System.Drawing.Point(60, 36);
-      this.dataTableView1.Name = "dataTableView1";
-      this.dataTableView1.ReadOnly = false;
-      this.dataTableView1.Size = new System.Drawing.Size(359, 274);
-      this.dataTableView1.TabIndex = 0;
+      chartArea1.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea1);
+      legend1.Name = "Legend1";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(4, 4);
+      this.chart.Name = "chart";
+      series1.ChartArea = "ChartArea1";
+      series1.Legend = "Legend1";
+      series1.Name = "Series1";
+      this.chart.Series.Add(series1);
+      this.chart.Size = new System.Drawing.Size(486, 337);
+      this.chart.TabIndex = 0;
+      this.chart.Text = "enhancedChart1";
       // 
       // DataCompletenessView
       // 
-      this.Controls.Add(this.dataTableView1);
+      this.Controls.Add(this.chart);
       this.Name = "DataCompletenessView";
       this.Size = new System.Drawing.Size(493, 344);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
       this.ResumeLayout(false);
 
@@ -49,5 +61,6 @@
     #endregion
 
-    private HeuristicLab.DataPreprocessing.Views.PreprocessingDataTableView dataTableView1;
+    private Visualization.ChartControlsExtensions.EnhancedChart chart;
+
 
   }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.cs	(revision 10912)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataCompletenessView.cs	(revision 10913)
@@ -4,4 +4,7 @@
 using HeuristicLab.MainForm;
 using HeuristicLab.Core.Views;
+using System.Collections.Generic;
+using HeuristicLab.DataPreprocessing.Implementations;
+using System.Drawing;
 
 namespace HeuristicLab.DataPreprocessing.Views {
@@ -9,5 +12,6 @@
   [View("Histogram View")]
   [Content(typeof(DataCompletenessChartContent), true)]
-  public partial class DataCompletenessView : ItemView {
+  public partial class DataCompletenessView : ItemView
+  {
 
     protected DataRowVisualProperties.DataRowChartType chartType;
@@ -15,4 +19,7 @@
 
     private const string DEFAULT_CHART_TITLE = "DataCompletenessChart";
+
+    //list of columns, bool indicates wether the cell is a missing value or not
+    private List<List<bool>> matrix = new List<List<bool>>();
 
     public new DataCompletenessChartContent Content
@@ -26,5 +33,5 @@
     {
       InitializeComponent();
-      chartType = DataRowVisualProperties.DataRowChartType.Line;
+      chartType = DataRowVisualProperties.DataRowChartType.Bars;
       chartTitle = DEFAULT_CHART_TITLE;
     }
@@ -35,7 +42,126 @@
       if (Content != null)
       {
+        InitData();
       }
     }
 
+    private void InitData()
+    {
+      IDictionary<int, IList<int>> missingValueIndices = Content.SearchLogic.GetMissingValueIndices();
+      for (int i = 0; i < Content.DataGridLogic.Columns; i++)
+      {
+        //append column
+        List<bool> column = new List<bool>();
+        for (int j=0; j < Content.DataGridLogic.Rows; j++) {
+          column.Add(missingValueIndices[i].Contains(j));
+        }
+        matrix.Add(column);
+      }
+      List<List<int>> yValuesPerColumn = ProcessMatrixForCharting(matrix, missingValueIndices);
+      createSeries(yValuesPerColumn);
+      //CreateChart();
+    }
+
+    private void createSeries(List<List<int>> yValuesPerColumn)
+    {
+      //prepare series
+      int seriesCount = determineSeriesCount(yValuesPerColumn);
+      for (int i = 0; i < seriesCount; i++)
+      {
+        chart.Series.Add("series"+i);
+        chart.Series["series"+i].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedColumn;
+        if (i % 2 == 0)
+          chart.Series["series" + i].Color = Color.Blue;
+        else
+          chart.Series["series" + i].Color = Color.White;
+      }
+      //fill series
+      for (int i = 0; i < yValuesPerColumn.Count; i++)
+      {
+        List<int> column = yValuesPerColumn[i];
+        for (int j = 0; j < seriesCount; j++) {
+          if (column.Count - 1 < j) {
+            chart.Series["series"+j].Points.AddY(0);
+          } else {
+            chart.Series["series" + j].Points.AddY(column[j]);
+          }
+        }
+      }
+    }
+
+    private int determineSeriesCount(List<List<int>> yValuesPerColumn)
+    {
+      int highest = 0;
+      foreach (List<int> values in yValuesPerColumn) {
+        highest = Math.Max(values.Count, highest);
+      }
+      return highest;
+    }
+
+    private List<List<int>> ProcessMatrixForCharting(List<List<bool>> matrix, IDictionary<int, IList<int>> missingValueIndices)
+    {
+      List<List<int>> columnsYValues = new List<List<int>>();
+      for (int i=0; i < matrix.Count; i++) //column
+      {
+        List<int> yValues = new List<int>();
+        List<bool> column = matrix[i];
+        bool missingState = false;
+        int valueCount = 0;
+        for (int j = 0; j < column.Count; j++ ) {
+          if (missingState == missingValueIndices[i].Contains(j))
+          {
+            valueCount++;
+          }
+          else
+          {
+            yValues.Add(valueCount);
+            valueCount = 1;
+            missingState = !missingState;
+          }
+        }
+        yValues.Add(valueCount);
+            /*
+        List<int> yValues = new List<int>();
+        bool missingChanged = true;
+        while ()
+             * */
+        columnsYValues.Add(yValues);
+      }
+      return columnsYValues;
+    }
+
+    const String missingValue = "Red";
+    const String existingValue = "DarkBlue";
+
+
+    private void CreateChart()
+    {
+      object[] temp = new[] { "1", "50" };
+      object[] temp2 = new[] { "50", "1000" };
+      chart.Series.Add(missingValue);
+      chart.Series.Add(existingValue);
+
+      for(int i=0; i < matrix.Count; i++) {
+        List<bool> column = matrix[i];
+        for (int j = 0; j < column.Count; j++ )
+        {
+          chart.Series[missingValue].Points.AddXY(i, temp);
+          chart.Series[existingValue].Points.AddXY(i, temp2);
+          chart.Series[missingValue].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
+          chart.Series[existingValue].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.StackedBar;
+        }
+      }
+    }
+
+    /*
+    private DataRow columnToDataRow(List<bool> column, int i)
+    {
+      DataRow row = new DataRow("row"+i);
+      foreach (bool missing in column) {
+        row.Values.Add(missing? 1 : 0);
+      }
+      return row;
+    }*/
+
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataPreprocessingView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataPreprocessingView.cs	(revision 10912)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing.Views/3.3/DataPreprocessingView.cs	(revision 10913)
@@ -67,5 +67,6 @@
           new HistogramContent(chartLogic),
           new ScatterPlotContent(chartLogic),
-          new CorrelationMatrixContent(problemData)
+          new CorrelationMatrixContent(problemData),
+          new DataCompletenessChartContent(dataGridLogic, searchLogic)
         };
 
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataCompletenessChartContent.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataCompletenessChartContent.cs	(revision 10912)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataCompletenessChartContent.cs	(revision 10913)
@@ -12,10 +12,11 @@
   public class DataCompletenessChartContent : Item, IViewShortcut
   {
+    private readonly DataGridLogic dataGridLogic;
+    private readonly SearchLogic searchLogic;
 
-    private readonly IChartLogic chartLogic;
-
-    public DataCompletenessChartContent(IChartLogic chartLogic)
+    public DataCompletenessChartContent(DataGridLogic dataGridLogic, SearchLogic searchLogic)
     {
-      this.chartLogic = chartLogic;
+      this.dataGridLogic = dataGridLogic;
+      this.searchLogic = searchLogic;
     }
 
@@ -25,9 +26,17 @@
     }
 
-    public IChartLogic ChartLogic
+    public IDataGridLogic DataGridLogic
     {
       get
       {
-        return chartLogic;
+        return dataGridLogic;
+      }
+    }
+
+    public ISearchLogic SearchLogic
+    {
+      get
+      {
+        return searchLogic;
       }
     }
