public override void OnRefresh()
        {
            ContentsBox.Text = "";

            string FullFileName = Controller.ToAbsolute(FileName);

            if (File.Exists(FullFileName))
            {
                APSIMInputFile Metfile = new APSIMInputFile();
                Metfile.Open(FullFileName);
                MetData = Metfile.ToTable();
                Metfile.Close();
                MetData.TableName = "Met";

                // Get latitude for later on.
                if (Metfile.Constant("latitude") == null)
                {
                    MessageBox.Show("A value for latitude was expected, but could not be found in this file.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    Latitude = Double.NaN;
                }
                else
                {
                    Latitude = Convert.ToDouble(Metfile.Constant("latitude").Value, new System.Globalization.CultureInfo("en-US"));
                }

                StartDate = DataTableUtility.GetDateFromRow(MetData.Rows[0]);
                EndDate   = DataTableUtility.GetDateFromRow(MetData.Rows[MetData.Rows.Count - 1]);
                PopulateRawData();
                YearStartBox.ValueChanged -= YearStartBoxChanged;
                NumYearsBox.ValueChanged  -= NumYearsBoxChanged;
                YearStartBox.Value         = StartDate.Year;
                NumYearsBox.Value          = 1;
                if (NumYears != 0)
                {
                    NumYearsBox.Value = NumYears;
                }
                if (YearStart != 0)
                {
                    YearStartBox.Value = YearStart;
                }
                YearStartBox.ValueChanged += YearStartBoxChanged;
                NumYearsBox.ValueChanged  += NumYearsBoxChanged;

                RefreshAllCharts();
            }
            YearPanel.Visible = (TabControl.SelectedIndex != 0);
            YearPanel.Parent  = this;
            YearPanel.Top     = TabControl.SelectedTab.Top + 2;
            YearPanel.BringToFront();
        }
    private DataTable ProcessApsimFileReader(XmlNode Node)
    {
        // -------------------------------------------------
        // The XmlNode is a GDApsimFileReader so go read
        // a series of APSIM output files and return a
        // DataTable with all data.
        // -------------------------------------------------

        List <string> FileNames = XmlHelper.Values(Node, "FileName");

        if (FileNames.Count == 0)
        {
            FileNames.AddRange(DefaultFileNames);
        }

        DataTable Data = null;

        foreach (string FileSpec in FileNames)
        {
            if (FileSpec != "")
            {
                string FileSpecNoMacros = Configuration.RemoveMacros(FileSpec);
                string Dir = Path.GetDirectoryName(FileSpecNoMacros);
                if (Dir == "")
                {
                    Dir = Directory.GetCurrentDirectory();
                }

                foreach (string FileName in Directory.GetFiles(Dir,
                                                               Path.GetFileName(FileSpecNoMacros)))
                {
                    if (FileName != "" && File.Exists(FileName))
                    {
                        string CheckPointFile = Path.Combine(Path.GetDirectoryName(Path.GetFullPath(FileName)), "CheckPoint", Path.GetFileName(FileName));
                        if (File.Exists(FileName))
                        {
                            APSIMInputFile InFile = new APSIMInputFile();
                            InFile.Open(FileName);
                            DataTable FileData = InFile.ToTable();
                            InFile.Close();
                            InFile.AddConstantsToData(FileData);
                            if (Data == null)
                            {
                                Data = FileData;
                            }
                            else
                            {
                                Merge(FileData, Data);
                            }
                        }
                        if (File.Exists(CheckPointFile))
                        {
                            APSIMInputFile InFile = new APSIMInputFile();
                            InFile.Open(CheckPointFile);
                            DataTable FileData = InFile.ToTable();
                            InFile.Close();
                            InFile.SetConstant("title", "{Checkpoint} " + InFile.Constant("title").Value);
                            InFile.AddConstantsToData(FileData);
                            if (Data == null)
                            {
                                Data = FileData;
                            }
                            else
                            {
                                Merge(FileData, Data);
                            }
                        }
                    }
                }
            }
        }
        return(Data);
    }