public DisplaySignupSheet(Control parent, string filePath, SignupSheet newSheet)
        {
            this.dataLoaded = false;

            InitializeComponent();

            // Reassign its parent.
            this.Parent = parent;

            // Generate the new file path.
            string startTimeString = newSheet.StartTime.ToString("yyyy-MM-dd-HH-mm-ss");
            string endTimeString = newSheet.EndTime.ToString("yyyy-MM-dd-HH-mm-ss");
            filePath += '\\' + newSheet.SessionName + '_' + startTimeString + '_' + endTimeString + ".json";
            Console.WriteLine("New signup sheet location: " + filePath);

            // Store the file path, which is the basis of a document.
            this.filePath = filePath;

            // Use the assigned sheet instead of dump it from the file.
            this.sheet = newSheet;
            // Bind the data source after instantiate the BindingList.
            this.dataViewer.DataSource = new BindingSource(this.sheet.Entries, null);
            this.dataLoaded = true;

            // Save immediately, since this file is newly created.
            SaveToFile();
        }
        public void LoadFromFile()
        {
            // If the file doesn't exist, the table IS dirty upon opening.
            if(File.Exists(this.filePath))
            {
                this.isDirty = false;
                using(StreamReader reader = new StreamReader(this.filePath))
                {
                    string content = reader.ReadToEnd();
                    sheet = JsonConvert.DeserializeObject<SignupSheet>(content);
                }
            }
            else
            {
                this.isDirty = true;
            }

            // Bind the data source after instantiate the BindingList.
            this.dataViewer.DataSource = new BindingSource(this.sheet.Entries, null);

            this.dataLoaded = true;
        }
        private void newSignupSheet_Click(object sender, EventArgs e)
        {
            DialogResult status;

            string filePath = ChooseFolder();
            if(filePath.Length == 0)
            {
                return;
            }

            using(SignupSheetDetail details = new SignupSheetDetail())
            {
                status = details.ShowDialog();

                if(status == DialogResult.OK)
                {
                    bool showNewSignupSheet = true;

                    if(!IsUserListLoaded())
                    {
                        status = MessageBox.Show("Please load a user list to continue.",
                                                 "No user list loaded.",
                                                 MessageBoxButtons.OKCancel,
                                                 MessageBoxIcon.Question);
                        if(status == DialogResult.OK)
                        {
                            this.openUserList.PerformClick();
                        }
                        else
                        {
                            showNewSignupSheet = false;
                        }
                    }

                    // Force save the user list.
                    DisplayUserList userList = this.displayRegion.Panel2.Controls["display"] as DisplayUserList;
                   userList.ForceSave();

                    if(showNewSignupSheet)
                    {
                        // Create a dummy signup sheet object.
                        SignupSheet newSheet = new SignupSheet();
                        newSheet.SessionName = details.SessionName;
                        newSheet.StartTime = details.StartTime;
                        newSheet.EndTime = details.EndTime;

                        // Import the users from the user list.
                        BindingList<Entry> templateEntries = new BindingList<Entry>();
                        foreach(UserInfo user in userList.GetUsers())
                        {
                            Entry newEntry = new Entry();
                            newEntry.Name = user.FirstName + ' ' + user.LastName;
                            newEntry.Signed = false;
                            templateEntries.Add(newEntry);
                        }
                        newSheet.Entries = templateEntries;

                        // Create the object and add to panel.
                        DisplaySignupSheet display = new DisplaySignupSheet(this, filePath, newSheet);
                        AddDisplayToPanel(this.displayRegion.Panel1, display);

                        // Write hint on the status bar.
                        this.applicationStatus.Text = "Right click on the list to close it.";

                        this.serverToolStripMenuItem.Enabled = true;
                    }
                    else
                    {
                        this.applicationStatus.Text = "Abort create new signup sheet.";
                        this.applicationStatus.ForeColor = Color.Red;
                    }
                }
                else
                {
                    this.applicationStatus.Text = "Abort creation.";
                }
            }
        }