/// <summary>
        /// Saves data from the data set into a Task object.
        /// </summary>
        public void Save(EditTaskFormData.TaskRow taskData, Task task)
        {
            mTaskData = taskData;
            mTask = task;

            Validate();

            //Save task name
            mTask.Name = mTaskData.Name;

            //Create a new recurrence pattern that we will save the data into.
            mTask.Pattern = new RecurrencePattern();
            mRule = mTask.Pattern.RRules.Add();

            //Save the recurrence rule
            switch ((RecurrenceChoice)mTaskData.RecurrenceChoice)
            {
                case RecurrenceChoice.Daily:
                    SaveDaily();
                    break;
                case RecurrenceChoice.Weekly:
                    SaveWeekly();
                    break;
                case RecurrenceChoice.Monthly:
                    SaveMonthly();
                    break;
                case RecurrenceChoice.Yearly:
                    SaveYearly();
                    break;
                default:
                    throw new Exception("Unknown recurrence choice.");
            }

            //Save the range of the pattern
            mTask.Pattern.StartDate = DateTime.Parse(mTaskData.StartDate) + TimeSpan.Parse(mTaskData.StartTime);
            switch ((EndType)mTaskData.EndChoice)
            {
                case EndType.None:
                    mRule.EndType = EndType.None;
                    break;
                case EndType.Count:
                    mRule.Count = int.Parse(mTaskData.Count);
                    break;
                case EndType.Until:
                    mRule.Until = DateTime.Parse(mTaskData.EndDate);
                    break;
                default:
                    throw new Exception("Unknown end type.");
            }
        }
        /// <summary>
        /// Transfers information from a Task object into a data row.
        /// </summary>
        public EditTaskFormData.TaskRow LoadTask(Task task)
        {
            PatternParser parser = new PatternParser();
            if (!parser.Parse(task.Pattern))
                throw new Exception("This is not a simple pattern.");

            mTaskData = NewTask();
            mTask = task;
            mRule = mTask.Pattern.RRules[0];

            //Load task name
            mTaskData.Name = task.Name;

            //Load the recurrence rule
            switch (parser.PatternType)
            {
                case PatternType.Daily:
                    LoadDaily();
                    break;
                case PatternType.Weekly:
                    LoadWeekly();
                    break;
                case PatternType.MonthlyDay:
                    LoadMonthlyDay();
                    break;
                case PatternType.MonthlyDayOfWeek:
                    LoadMonthlyDayOfWeek();
                    break;
                case PatternType.MonthlyWeekDay:
                    LoadMonthlyWeekDay();
                    break;
                case PatternType.YearlyDay:
                    LoadYearlyDay();
                    break;
                case PatternType.YearlyDayOfWeek:
                    LoadYearlyDayOfWeek();
                    break;
                case PatternType.YearlyWeekDay:
                    LoadYearlyWeekDay();
                    break;
                default:
                    throw new Exception("Unknown pattern type.");
            }

            //Load the range of the pattenr
            mTaskData.StartDate = DemoUtil.FormatDate(task.Pattern.StartDate);
            mTaskData.StartTime = DemoUtil.FormatTime(task.Pattern.StartDate);
            mTaskData.EndChoice = (int)mRule.EndType;
            switch (mRule.EndType)
            {
                case EndType.None:
                    //Do nothing
                    break;
                case EndType.Count:
                    mTaskData.Count = mRule.Count.ToString();
                    break;
                case EndType.Until:
                    mTaskData.EndDate = DemoUtil.FormatDate(mRule.Until);
                    break;
                default:
                    throw new Exception("Unknown end type.");
            }

            return mTaskData;
        }