using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using GreatHomeChildcare.Models; /* Refs: * https://stackoverflow.com/questions/10063770/how-to-add-a-new-row-to-datagridview-programmatically * https://stackoverflow.com/questions/3370236/changing-the-row-height-of-a-datagridview */ namespace GreatHomeChildcare { public partial class frmAdminForm : Form { //globals for cheap access. SqliteDataAccess SqliteDataAccess = new SqliteDataAccess(); public static int child_id = 0; public frmAdminForm() { InitializeComponent(); } // Load the datagridview of children when this form opens. private void frmAdminForm_Load(object sender, EventArgs e) { RefreshAdminView(); } /* Load the admin form with a datagridview of * all the children in the sql database. * the 'id' field is present in the datagridview for easy access * but is hidden in the UI. * INPUT: List of all children * OUTPUT: Datagridview. */ private void RefreshAdminView() { dgvChildren.Rows.Clear(); List children = new List(); children = SqliteDataAccess.GetAllChildren(); foreach (Child c in children) { Image photo = (c.photo != null) ? ImageWrangler.ByteArrayToImage(c.photo) : Properties.Resources.child; dgvChildren.Rows.Add(c.id, photo, c.DisplayName); } } //Close this screen, we're all done here. private void btnClose_Click(object sender, EventArgs e) { Close(); } /* VS generated delegate to handle report button clicking * Pops up the report form and hides this one. */ private void btnReports_Click(object sender, EventArgs e) { Form frmRep = new frmReports(); //We can use the same event handler here, don't mind the name. frmRep.FormClosed += new FormClosedEventHandler(CrudFormClosed); frmRep.Show(); Hide(); } /* Pop-open a new form for crud operations for children * and their guardians. Be sure you set the child_id * to -1 here just to be on the super-safe side. */ private void btnAdd_Click(object sender, EventArgs e) { child_id = -1; //ENSURE!!!! ShowChildCrudForm(); } /* Call the same crud form for adding a new child * but store the child_id so the crud form * can pick it up on form load. */ private void btnUpdate_Click(object sender, EventArgs e) { /* Get the child's database ID which is secretly hidden * in the datagrid view at column 0. Since value is an * Object, cast it to Int because that's what we know it is. */ child_id = (int)dgvChildren.CurrentRow.Cells[0].Value; ShowChildCrudForm(); } /* Seperate function to show the crud form * because both the add and the update buttons * will show the same crud form. * INPUT: void * OUTPUT: void */ private void ShowChildCrudForm() { Form frmCrud = new frmChildCrud(); frmCrud.FormClosed += new FormClosedEventHandler(CrudFormClosed); frmCrud.Show(); Hide(); } //Show this admin screen after the child crud form is closed. private void CrudFormClosed(object sender, FormClosedEventArgs e) { RefreshAdminView(); Show(); } /* Allow the admin to quit the program as a normal login * will not be able to exit the attendence program * from the main pin screen on the shared tablet. */ private void btnQuit_Click(object sender, EventArgs e) { MessageBox.Show("Thank you for using the program! Your data has been saved. Good bye!", "Great Home Childcare", MessageBoxButtons.OK, MessageBoxIcon.None); //TODO: I got the program to crash here by exiting from reports form then clicking quit?? Environment.Exit(0); } } }