using Microsoft.Data.Sqlite; using System.ComponentModel; using trakker.Data; using trakker.Forms; using trakker.Interfaces; using trakker.Models; using trakker.Services; namespace trakker { public partial class MainForm : Form, IMainForm { //private readonly string _dbversion = "[N.N.N]"; private string connectionString = string.Empty; readonly MainCtrl _ctrl; /// /// Initializes a new instance of the class. /// Sets up the form's controls and event handlers by calling /// which is generated by the designer. /// public MainForm() { InitializeComponent(); // build connection string that will be used for database connections // ------------------------------------------------------------------------ var dbPath = Path.Combine(AppContext.BaseDirectory, "trakker.db"); connectionString = new SqliteConnectionStringBuilder { DataSource = dbPath, Mode = SqliteOpenMode.ReadWriteCreate, Cache = SqliteCacheMode.Shared }.ToString(); tabControlMainForm.TabPages[0].Text = " Home "; tabControlMainForm.TabPages[1].Text = " Clients "; tabControlMainForm.TabPages[2].Text = " Projects "; _ctrl = new Services.MainCtrl(this, connectionString); } /// /// Handles the Click event of the Exit menu item. When invoked, this /// method terminates the application. /// /// The source of the event. /// Event data associated with the click event. private void MainForm_Exit_MenuItem_Click(object sender, EventArgs e) { Application.Exit(); } public void InitDataGridViewClients(BindingList clients) { dataGridViewClients.AllowUserToAddRows = true; dataGridViewClients.AllowUserToDeleteRows = true; dataGridViewClients.AutoGenerateColumns = false; dataGridViewClients.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridViewClients.BackgroundColor = Color.White; dataGridViewClients.ColumnHeadersVisible = true; dataGridViewClients.DataSource = clients; dataGridViewClients.MultiSelect = false; dataGridViewClients.RowHeadersVisible = false; dataGridViewClients.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridViewClients.Columns.Clear(); { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "Name", Name = "Name", Visible = true, }; dataGridViewClients.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "Company", Name = "Company", Visible = true, }; dataGridViewClients.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "Email", Name = "Email", Visible = true, }; dataGridViewClients.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "Phone", Name = "Phone", Visible = true, }; dataGridViewClients.Columns.Add(textColumn); } dataGridViewClients.DoubleClick += (s, e) => { if (dataGridViewClients.SelectedRows.Count > 0) { var selectedClient = dataGridViewClients.SelectedRows[0].DataBoundItem as Client; if (selectedClient != null) { var dialog = new ClientForm(selectedClient, _ctrl.GetLOV("state")); if (dialog.ShowDialog(this) == DialogResult.OK) { Client client = dialog.Client; ClientData clientData = new ClientData(connectionString); try { clientData.Upsert(client); dataGridViewClients.Refresh(); // Refresh the DataGridView to reflect changes } catch (Exception ex) { MessageBox.Show($"Error saving client: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } }; dataGridViewClients.SelectionChanged += (s, e) => { if (dataGridViewClients.SelectedRows.Count > 0) { var selectedClient = dataGridViewClients.SelectedRows[0].DataBoundItem as Client; if (selectedClient != null) { // Handle the selected client as needed // MessageBox.Show($"Selected Client: {selectedClient.AddressStreet}", "Client Selected", MessageBoxButtons.OK, MessageBoxIcon.Information ); } } }; } public void FillDataGridViewProjects(BindingSource projects) { dataGridViewProjects.DataSource = projects; } public void InitDataGridViewProjects() { dataGridViewProjects.AllowUserToAddRows = true; dataGridViewProjects.AllowUserToDeleteRows = true; dataGridViewProjects.AutoGenerateColumns = false; dataGridViewProjects.BackgroundColor = Color.White; dataGridViewProjects.ColumnHeadersVisible = true; dataGridViewProjects.MultiSelect = false; dataGridViewProjects.RowHeadersVisible = false; dataGridViewProjects.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridViewProjects.Columns.Clear(); { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.None, DataPropertyName = "ProjectName", Name = "Project Name", Visible = true, Width = 350, }; dataGridViewProjects.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "ClientName", Name = "Client Name", Visible = true, }; dataGridViewProjects.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "StartDate", DefaultCellStyle = { Format = "MM/dd/yyyy" }, Name = "Start Date", Visible = true, }; dataGridViewProjects.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "EndDate", DefaultCellStyle = { Format = "MM/dd/yyyy" }, Name = "End Date", Visible = true, }; dataGridViewProjects.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "HourlyRate", Name = "Hourly Rate", Visible = true, }; textColumn.DefaultCellStyle.Format = "$#,##0.00"; textColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; textColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; dataGridViewProjects.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "Budget", Name = "Budget", Visible = true, }; textColumn.DefaultCellStyle.Format = "$#,##0.00"; textColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; textColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; dataGridViewProjects.Columns.Add(textColumn); } { var textColumn = new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, DataPropertyName = "StatusName", Name = "Status", Visible = true, }; dataGridViewProjects.Columns.Add(textColumn); } dataGridViewProjects.DoubleClick += (s, e) => { if (dataGridViewProjects.SelectedRows.Count > 0) { var selectedProject = dataGridViewProjects.SelectedRows[0].DataBoundItem as Project; if (selectedProject != null) { var dialog = new ProjectForm(selectedProject, _ctrl.GetClients(), _ctrl.GetLOV("project.status")); if (dialog.ShowDialog(this) == DialogResult.OK) { Project project = dialog.Project; ProjectData projectData = new ProjectData(connectionString); try { projectData.Upsert(project); _ctrl.LoadProjects(); // Reload projects to update the DataGridView with any changes } catch (Exception ex) { MessageBox.Show($"Error saving project: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } return; } } }; dataGridViewClients.SelectionChanged += (s, e) => { if (dataGridViewClients.SelectedRows.Count > 0) { var selectedClient = dataGridViewClients.SelectedRows[0].DataBoundItem as Client; if (selectedClient != null) { // Handle the selected client as needed // MessageBox.Show($"Selected Client: {selectedClient.AddressStreet}", "Client Selected", MessageBoxButtons.OK, MessageBoxIcon.Information ); } } }; } //private void button1_Click(object sender, EventArgs e) //{ // var dialog = new ClientForm(new Client()); // if (dialog.ShowDialog(this) == DialogResult.OK) // { // Client client = dialog.Client; // ClientData clientData = new ClientData(connectionString); // try // { // clientData.Upsert(client); // } // catch (Exception ex) // { // MessageBox.Show($"Error saving client: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); // } // } //} } }