Index: trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 753)
+++ trunk/sources/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 754)
@@ -49,5 +49,5 @@
 
     public override IView CreateView() {
-      //return new LineChart(this); when LineChart is implemented
+      return new LineChart(this); //when LineChart is implemented
       return new IntDataView(test);
     }
Index: trunk/sources/HeuristicLab.Visualization/ChartDataRowsModelDummy.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization/ChartDataRowsModelDummy.cs	(revision 753)
+++ trunk/sources/HeuristicLab.Visualization/ChartDataRowsModelDummy.cs	(revision 754)
@@ -4,35 +4,18 @@
 using System.Text;
 
-namespace HeuristicLab.Visualization {
-  public class ChartDataRowsModelDummy : ChartDataRowsModel {
+namespace HeuristicLab.Visualization{
+  public class ChartDataRowsModelDummy : ChartDataRowsModel  {
+    public ChartDataRowsModelDummy(){
+      Random rand = new Random();
 
-     public ChartDataRowsModelDummy(){
-
-        // test rows
-        AddDataRow(1);
-        AddDataRow(2);
-        AddDataRow(3);
-        AddDataRow(4);
-
-       PushData(1, 1.2);
-       PushData(1, 2.0);
-       PushData(1, 4.5);
-       PushData(1, 8.4);
-       PushData(1, 5.0);
-       PushData(1, 6.0);
-       PushData(2, 2.0);
-       PushData(3, 8.3);
-       PushData(3, 7.3);
-       PushData(3, 9.7);
-       PushData(3, 2.3);
-       PushData(3, 1.7);
-       PushData(3, 0.3);
-       PushData(3, 0.1);
-       PushData(3, 2.0);
-       PushData(3, 8.8);
-       PushData(3, 9.9);
-
-     }
-    
+   
+      // test rows
+      for (int i = 0; i < 10; i++){
+        AddDataRow(i);
+        PushData(i, rand.NextDouble() * 1000);
+        PushData(i, rand.NextDouble() * 1000);
+        PushData(i, rand.NextDouble() * 1000);
+      }
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Visualization/HeuristicLab.Visualization.csproj
===================================================================
--- trunk/sources/HeuristicLab.Visualization/HeuristicLab.Visualization.csproj	(revision 753)
+++ trunk/sources/HeuristicLab.Visualization/HeuristicLab.Visualization.csproj	(revision 754)
@@ -4,5 +4,5 @@
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.21022</ProductVersion>
+    <ProductVersion>9.0.30729</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}</ProjectGuid>
@@ -76,4 +76,5 @@
       <DependentUpon>LineChart.cs</DependentUpon>
     </Compile>
+    <Compile Include="LineShape.cs" />
     <Compile Include="MouseEventListener.cs" />
     <Compile Include="Offset.cs" />
Index: trunk/sources/HeuristicLab.Visualization/LineChart.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization/LineChart.Designer.cs	(revision 753)
+++ trunk/sources/HeuristicLab.Visualization/LineChart.Designer.cs	(revision 754)
@@ -29,17 +29,30 @@
         private void InitializeComponent()
         {
-            this.SuspendLayout();
-            // 
-            // LineChart
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.Name = "LineChart";
-            this.Size = new System.Drawing.Size(552, 390);
-            this.ResumeLayout(false);
+          this.canvasUI1 = new HeuristicLab.Visualization.CanvasUI();
+          this.SuspendLayout();
+          // 
+          // canvasUI1
+          // 
+          this.canvasUI1.Location = new System.Drawing.Point(3, 3);
+          this.canvasUI1.MouseEventListener = null;
+          this.canvasUI1.Name = "canvasUI1";
+          this.canvasUI1.Size = new System.Drawing.Size(546, 384);
+          this.canvasUI1.TabIndex = 0;
+          this.canvasUI1.Text = "canvasUI1";
+          // 
+          // LineChart
+          // 
+          this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+          this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+          this.Controls.Add(this.canvasUI1);
+          this.Name = "LineChart";
+          this.Size = new System.Drawing.Size(552, 390);
+          this.ResumeLayout(false);
 
         }
 
         #endregion
+
+        private CanvasUI canvasUI1;
     }
 }
Index: trunk/sources/HeuristicLab.Visualization/LineChart.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization/LineChart.cs	(revision 753)
+++ trunk/sources/HeuristicLab.Visualization/LineChart.cs	(revision 754)
@@ -1,13 +1,18 @@
 ﻿using System;
+using System.Drawing;
 using HeuristicLab.Core;
 
-namespace HeuristicLab.Visualization {
-  public partial class LineChart : ViewBase {
+namespace HeuristicLab.Visualization
+{
+  public partial class LineChart : ViewBase
+  {
     private readonly IChartDataRowsModel model;
+    private Color[] lineColors;
 
     /// <summary>
     /// This constructor shouldn't be called. Only required for the designer.
     /// </summary>
-    public LineChart() {
+    public LineChart()
+    {
       InitializeComponent();
     }
@@ -16,7 +21,9 @@
     /// Initializes the chart.
     /// </summary>
-    /// <param name="model"></param>
-    public LineChart(IChartDataRowsModel model) : this() {
-      if (model == null) {
+    /// <param name="model">Referenz to the model, for data</param>
+    public LineChart(IChartDataRowsModel model) : this()
+    {
+      if (model == null)
+      {
         throw new NullReferenceException("Model cannot be null.");
       }
@@ -24,4 +31,14 @@
       this.model = model;
 
+      //TODO: read line colors instead of static ones
+      lineColors = new Color[3];
+      lineColors[0] = Color.Red;
+      lineColors[1] = Color.Green;
+      lineColors[2] = Color.Blue;
+      
+      //TODO: correct Rectangle to fit
+      RectangleD clientRectangle = new RectangleD(ClientRectangle.Left, ClientRectangle.Top, ClientRectangle.Right,
+                                                  ClientRectangle.Bottom);
+      canvasUI1.MainCanvas.WorldShape = new WorldShape(clientRectangle, clientRectangle);
       Reset();
     }
@@ -30,12 +47,41 @@
     /// Resets the line chart by deleting all shapes and reloading all data from the model.
     /// </summary>
-    private void Reset() {
+    private void Reset()
+    {
       BeginUpdate();
 
       // TODO clear existing shapes
 
+      WorldShape mainWorld = canvasUI1.MainCanvas.WorldShape;
+
+      double spacing = mainWorld.BoundingBox.Width/model.Columns.Count;
+      double oldX = 0;
+      double currentX = spacing;
+      ChartDataRowsModelColumn oldColumn = null;
       // reload data from the model and create shapes
-      foreach (ChartDataRowsModelColumn column in model.Columns) {
-        AddColumn(column.ColumnId, column.Values);
+      foreach (ChartDataRowsModelColumn column in model.Columns)
+      {
+        if (oldColumn != null)
+        {
+          if (column.Values != null)
+          {
+            for (int i = 0; i < column.Values.Length; i++)
+            {
+              LineShape line = new LineShape(oldX, oldColumn.Values[i], currentX, column.Values[i], 0, lineColors[i]);
+              mainWorld.AddShape(line);
+            }
+            oldX = currentX;
+            currentX += spacing;
+          }
+          oldColumn = column;
+        }
+        else
+        {
+          oldColumn = column;
+        }
+
+        canvasUI1.Invalidate();
+
+        //   AddColumn(column.ColumnId, column.Values);
       }
 
@@ -49,6 +95,8 @@
     /// <param name="columnId">Id of the changed column</param>
     /// <param name="values">Values contained within the changed column</param>
-    private void OnDataChanged(ChangeType type, long columnId, double[] values) {
-      switch (type) {
+    private void OnDataChanged(ChangeType type, long columnId, double[] values)
+    {
+      switch (type)
+      {
         case ChangeType.Add:
           AddColumn(columnId, values);
@@ -70,5 +118,6 @@
     /// <param name="columnId">Id of the column</param>
     /// <param name="values">Values of the column</param>
-    private void AddColumn(long columnId, double[] values) {
+    private void AddColumn(long columnId, double[] values)
+    {
       throw new NotImplementedException();
     }
@@ -79,5 +128,6 @@
     /// <param name="columnId">Id of the column</param>
     /// <param name="values">Values of the column</param>
-    private void ModifyColumn(long columnId, double[] values) {
+    private void ModifyColumn(long columnId, double[] values)
+    {
       throw new NotImplementedException();
     }
@@ -87,5 +137,6 @@
     /// </summary>
     /// <param name="columnId">Id of the column</param>
-    private void RemoveColumn(long columnId) {
+    private void RemoveColumn(long columnId)
+    {
       throw new NotImplementedException();
     }
@@ -93,10 +144,12 @@
     #region Add-/RemoveItemEvents
 
-    protected override void AddItemEvents() {
+    protected override void AddItemEvents()
+    {
       base.AddItemEvents();
       model.ColumnChanged += OnDataChanged;
     }
 
-    protected override void RemoveItemEvents() {
+    protected override void RemoveItemEvents()
+    {
       base.RemoveItemEvents();
       model.ColumnChanged -= OnDataChanged;
@@ -109,10 +162,13 @@
     private int beginUpdateCount = 0;
 
-    public void BeginUpdate() {
+    public void BeginUpdate()
+    {
       beginUpdateCount++;
     }
 
-    public void EndUpdate() {
-      if (beginUpdateCount == 0) {
+    public void EndUpdate()
+    {
+      if (beginUpdateCount == 0)
+      {
         throw new InvalidOperationException("Too many EndUpdates.");
       }
@@ -120,5 +176,6 @@
       beginUpdateCount--;
 
-      if (beginUpdateCount == 0) {
+      if (beginUpdateCount == 0)
+      {
         Invalidate();
       }
Index: trunk/sources/HeuristicLab.Visualization/LineShape.cs
===================================================================
--- trunk/sources/HeuristicLab.Visualization/LineShape.cs	(revision 754)
+++ trunk/sources/HeuristicLab.Visualization/LineShape.cs	(revision 754)
@@ -0,0 +1,45 @@
+﻿using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public class LineShape : IShape {
+    private RectangleD boundingRect;
+    private double z;
+    private Color color;
+
+    /// <summary>
+    /// Initializes the LineShape.
+    /// </summary>
+    /// <param name="x1">x coordinate of left lineEndPoind</param>
+    /// <param name="y1">y coordinate of left lineEndPoind</param>
+    /// <param name="x2">x coordinate of right lineEndPoind</param>
+    /// <param name="y2">y coordinate of right lineEndPoind</param>
+    /// <param name="color">color for the LineShape</param>
+    public LineShape(double x1, double y1, double x2, double y2, double z, Color color) {
+      this.boundingRect = new RectangleD(x1, y1, x2, y2);
+      this.z = z;
+      this.color = color;
+    }
+
+    public RectangleD BoundingBox {
+      get { return boundingRect; }
+    }
+
+    /// <summary>
+    /// Draws the LineShape.
+    /// </summary>
+    /// <param name="graphics">graphics handle to draw to</param>
+    /// <param name="viewport">rectangle in value-coordinates to display</param>
+    /// <param name="clippingArea">rectangle in screen-coordinates to draw</param>
+    public void Draw(Graphics graphics, Rectangle viewport, RectangleD clippingArea) {
+      using (Pen pen = new Pen(color, 3)){
+        Rectangle screenRect = Transform.ToScreen(boundingRect, viewport, clippingArea);
+        graphics.DrawLine(pen,screenRect.Left, screenRect.Bottom, screenRect.Right, screenRect.Top);
+      }
+    }
+
+    public double Z {
+      get { return z; }
+      set { z = value; }
+    }
+  }
+}
