Witam wszystkich progra-swirow :)

Mam problem z serializacja DataTable do XML. Przy pierwszej probie serializacji i deserializacji z testowymi danymi wszystko przebiega OK; probem pojawia sie po zamknieciu programu i ponownym jego uruchomieniu wyrzuca blad o pustej DataTable. Podejzewam iz probem lezy w pustej liscie <MyTask> tasks ale nie potrafie tego kodu zoptymalizowac, jestem nowicjuszem w programowaniu. Czy ktos chetny do pomocy? Z gory dzieki za zaangazowanie!

Oto kod:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace to_do
{
    public partial class TO_DO : Form
    {
        private List<MyTask> Tasks;
        private DataTable table;
        private DataSet set;
               
        public TO_DO()
        {
            InitializeComponent();
            Tasks = new List<MyTask>();
            table = new DataTable();
            set = new DataSet();
        }

        private void addtsk_Click(object sender, EventArgs e)
        {
            AddTask at = new AddTask();
            DialogResult dr = at.ShowDialog(); /* metoda show dialog zwraca wartosc dialog result. 
             * wartosc ta jest przydatna- mozna za jej pomoca sprawdzic czy wszystko w nowo otwartym oknie poszlo zgodnie z planem
             * czyli w tym przypadku czy np. zdecydowalizmy sie utworzyc zadanie, czy anulowac dodawanie nowego zadania*/
            if (Tasks.Count < 5)
            {
                if (dr == DialogResult.OK)//sprawdzamy czy zawartosc obiektu dr jest rowna wartosci pokazujacej powodzenie
                {
                    Tasks.Add(at.NewTask); /* korzystamy z wlasciwosci klasy AddTask (czyli z tego geta co go zadeklarowalismy wczesniej)
                                        * do zwrocienia utworzonego obiektu. Obiekt zwrocone orzez ta wlasciwosc jest typu MyTask, wiec 
                                        * kolekcja spokojnie go przyjmuje.*/


                    DataTable table = ConvertListToDataTable(Tasks); //Convert to DataTable.
                    dataGridView.DataSource = table;                //Displays new task in DataGridView
                }
            }
            else
            {
                MessageBox.Show("The list of tasks is full!");
                dr = DialogResult.Abort;
            }

            
        }

        private void endtsk_btn_Click(object sender, EventArgs e)
        {
            AddDataTableToDataSetAndSerialize(table);
            Application.Exit();
        }


        static DataTable ConvertListToDataTable(List<MyTask> Tasks)
        {
            //New table
            DataTable table = new DataTable();
           
            //Add columns
            table.Columns.Add("Title", typeof(string));
            table.Columns.Add("Description", typeof(string));
            table.Columns.Add("Start Date", typeof(DateTime));
            table.Columns.Add("Expiry Date", typeof(DateTime));
            table.Columns.Add("Compleated", typeof(bool));

            foreach(MyTask singleTask in Tasks)
            {
               table.Rows.Add(singleTask.title, singleTask.description, singleTask.created, singleTask.expiry, singleTask.compleated);
            }
            return table;
        }

       
        private void AddDataTableToDataSetAndSerialize(DataTable table)
        {
            DataSet ds = new DataSet();

            //New table
            table = new DataTable();

            //Add columns
            table.Columns.Add("Title", typeof(string));
            table.Columns.Add("Description", typeof(string));
            table.Columns.Add("Start Date", typeof(DateTime));
            table.Columns.Add("Expiry Date", typeof(DateTime));
            table.Columns.Add("Compleated", typeof(bool));

            foreach (MyTask singleTask in Tasks)
            {
                table.Rows.Add(singleTask.title, singleTask.description, singleTask.created, singleTask.expiry, singleTask.compleated);
            }
            ds.Tables.Add(table);
            ds.Tables[0].TableName = "tasks";
            ds.WriteXml("tasks.xml");
           
        }

        private void DeserializeAndShowInDataGridView()
        {
            try
            {
                XmlReader xmlFile;
                xmlFile = XmlReader.Create("tasks.xml", new XmlReaderSettings());
                DataSet ds = new DataSet();
                ds.ReadXml(xmlFile);
                dataGridView.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            } 

        }

        private void TO_DO_Load(object sender, EventArgs e)
        {
           DeserializeAndShowInDataGridView();
        } 
    }
}