From 112b1a968c143e5a5a9784558b5c790111de2383 Mon Sep 17 00:00:00 2001 From: Kuro Date: Sat, 22 Mar 2025 22:25:58 +0100 Subject: [PATCH] added features for editing, tasks and stop funktion --- TimeTable/controll/SqliteTaskCommands.cs | 38 +++++++ ...Commands.cs => SqliteTimeTableCommands.cs} | 5 +- TimeTable/view/Decide.Designer.cs | 4 +- TimeTable/view/Main.Designer.cs | 102 ++++++++++++++---- TimeTable/view/Main.resx | 3 + TimeTable/view/RowEdit.Designer.cs | 58 +++++----- TimeTable/view/RowEdit.cs | 4 - TimeTable/view/TextInsert.Designer.cs | 4 +- 8 files changed, 154 insertions(+), 64 deletions(-) create mode 100644 TimeTable/controll/SqliteTaskCommands.cs rename TimeTable/controll/{SqliteCommands.cs => SqliteTimeTableCommands.cs} (96%) diff --git a/TimeTable/controll/SqliteTaskCommands.cs b/TimeTable/controll/SqliteTaskCommands.cs new file mode 100644 index 0000000..9df688d --- /dev/null +++ b/TimeTable/controll/SqliteTaskCommands.cs @@ -0,0 +1,38 @@ +using Microsoft.Data.Sqlite; +using System.Globalization; + +namespace TimeTable.controll { + internal static class SqliteTaskCommands { + + public static string select = "select uid, lfdr, start, end, text, time from tasks"; + private static CultureInfo ci = System.Globalization.CultureInfo.GetCultureInfo("de-de"); + private static string insertPrefix = "insert into tasks ("; + private static string insertIntermediate = ") values("; + private static string insertPostfix = ");"; + + private static string updatePrefix = "update tasks set "; + private static string updateIntermediate = " where uid = "; + private static string updatePostfix = ";"; + + + public static void CreateTableIfNotExists(string sqlConnection) { + SqliteConnection con = new SqliteConnection(sqlConnection); + con.Open(); + SqliteCommand sqliteCmd = con.CreateCommand(); + sqliteCmd.CommandText = @"SELECT name FROM sqlite_master WHERE type='table' AND name='tasks';"; + + var name = sqliteCmd.ExecuteScalar(); + if (name != null && name.ToString() == "tasks") { + return; + } + var cols = "lfdr INTEGER PRIMARY KEY AUTOINCREMENT,"; + string[] columns = new string[5] { "start", "end", "text", "time", "uid" }; + cols += string.Join(" VARCHAR,", columns); + cols = cols + " Varchar"; + sqliteCmd.CommandText = "CREATE TABLE tasks (" + cols + ")"; + con.Open(); + sqliteCmd.ExecuteNonQuery(); + con.Close(); + } + } +} diff --git a/TimeTable/controll/SqliteCommands.cs b/TimeTable/controll/SqliteTimeTableCommands.cs similarity index 96% rename from TimeTable/controll/SqliteCommands.cs rename to TimeTable/controll/SqliteTimeTableCommands.cs index db6acff..fc608a5 100644 --- a/TimeTable/controll/SqliteCommands.cs +++ b/TimeTable/controll/SqliteTimeTableCommands.cs @@ -3,7 +3,7 @@ using System.Globalization; using TimeTable.model; namespace TimeTable.controll { - internal static class SqliteCommands { + internal static class SqliteTimeTableCommands { public static string select = "select uid, start, end, text, time from timetable"; private static CultureInfo ci = System.Globalization.CultureInfo.GetCultureInfo("de-de"); @@ -149,7 +149,8 @@ namespace TimeTable.controll { if (name != null && name.ToString() == "timetable") { return; } - var cols = string.Join(" VARCHAR,", "uid, start, end, text, time"); + string[] columns = new string[5] { "start", "end", "text", "time", "uid" }; + var cols = string.Join(" VARCHAR,", columns); cols = cols + " Varchar"; sqliteCmd.CommandText = "CREATE TABLE timetable (" + cols + ")"; con.Open(); diff --git a/TimeTable/view/Decide.Designer.cs b/TimeTable/view/Decide.Designer.cs index 58226a7..fc34a60 100644 --- a/TimeTable/view/Decide.Designer.cs +++ b/TimeTable/view/Decide.Designer.cs @@ -78,11 +78,11 @@ namespace TimeTable.view { pictureBox1.TabIndex = 3; pictureBox1.TabStop = false; // - // label1 + // uidText // label1.AutoSize = true; label1.Location = new Point(130, 38); - label1.Name = "label1"; + label1.Name = "uidText"; label1.Size = new Size(267, 20); label1.TabIndex = 4; label1.Text = "What should happen to the Time Item?"; diff --git a/TimeTable/view/Main.Designer.cs b/TimeTable/view/Main.Designer.cs index d2dceb1..eba8108 100644 --- a/TimeTable/view/Main.Designer.cs +++ b/TimeTable/view/Main.Designer.cs @@ -27,6 +27,9 @@ namespace TimeTable { private void InitializeComponent() { components = new System.ComponentModel.Container(); btnPanel = new Panel(); + uidLbl = new Label(); + uidText = new Label(); + btnDelete = new Button(); btnTaskStop = new Button(); btnTaskStart = new Button(); btnStopResume = new Button(); @@ -36,16 +39,19 @@ namespace TimeTable { bindingSource = new BindingSource(components); con = new SQLiteConnection(); dataAdapter = new SQLiteDataAdapter(); - btnDelete = new Button(); + taskTableGridView = new DataGridView(); btnPanel.SuspendLayout(); tableView.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)taskTimeGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)bindingSource).BeginInit(); + ((System.ComponentModel.ISupportInitialize)taskTableGridView).BeginInit(); SuspendLayout(); // // btnPanel // btnPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink; + btnPanel.Controls.Add(uidLbl); + btnPanel.Controls.Add(uidText); btnPanel.Controls.Add(btnDelete); btnPanel.Controls.Add(btnTaskStop); btnPanel.Controls.Add(btnTaskStart); @@ -57,6 +63,34 @@ namespace TimeTable { btnPanel.Size = new Size(233, 378); btnPanel.TabIndex = 0; // + // uidLbl + // + uidLbl.AutoSize = true; + uidLbl.Location = new Point(3, 152); + uidLbl.Name = "uidLbl"; + uidLbl.Size = new Size(42, 20); + uidLbl.TabIndex = 2; + uidLbl.Text = "none"; + // + // uidText + // + uidText.AutoSize = true; + uidText.Location = new Point(3, 122); + uidText.Name = "uidText"; + uidText.Size = new Size(95, 20); + uidText.TabIndex = 5; + uidText.Text = "Selected UID"; + // + // btnDelete + // + btnDelete.Location = new Point(3, 73); + btnDelete.Name = "btnDelete"; + btnDelete.Size = new Size(94, 26); + btnDelete.TabIndex = 4; + btnDelete.Text = "Delete"; + btnDelete.UseVisualStyleBackColor = true; + btnDelete.Click += DeleteRow; + // // btnTaskStop // btnTaskStop.Location = new Point(103, 38); @@ -82,7 +116,7 @@ namespace TimeTable { btnStopResume.Name = "btnStopResume"; btnStopResume.Size = new Size(114, 29); btnStopResume.TabIndex = 1; - btnStopResume.Text = "Stop/Resume"; + btnStopResume.Text = "Stop"; btnStopResume.UseVisualStyleBackColor = true; // // btnStart @@ -98,6 +132,7 @@ namespace TimeTable { // tableView // tableView.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableView.Controls.Add(taskTableGridView); tableView.Controls.Add(taskTimeGridView); tableView.Dock = DockStyle.Fill; tableView.Location = new Point(233, 0); @@ -107,7 +142,7 @@ namespace TimeTable { // // taskTimeGridView // - taskTimeGridView.AutoGenerateColumns = true; + taskTimeGridView.AutoGenerateColumns = false; taskTimeGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; taskTimeGridView.DataSource = bindingSource; taskTimeGridView.Dock = DockStyle.Fill; @@ -117,12 +152,12 @@ namespace TimeTable { taskTimeGridView.RowHeadersWidth = 51; taskTimeGridView.Size = new Size(631, 378); taskTimeGridView.TabIndex = 0; + taskTimeGridView.CellClick += TimeTableClick; taskTimeGridView.CellDoubleClick += TimetableEditDoubleClick; // // con // con.BusyTimeout = 0; - con.ConnectionString = sqlConnectionString; con.DefaultDbType = null; con.DefaultMaximumSleepTime = 150; con.DefaultTimeout = 30; @@ -137,17 +172,17 @@ namespace TimeTable { con.TraceFlags = SQLiteTraceFlags.SQLITE_TRACE_NONE; con.VfsName = null; con.WaitTimeout = 30000; - bindingSource.DataSource = createDataTable(); + OtherTasks(); // - // btnDelete + // taskTableGridView // - btnDelete.Location = new Point(8, 78); - btnDelete.Name = "btnDelete"; - btnDelete.Size = new Size(94, 26); - btnDelete.TabIndex = 4; - btnDelete.Text = "Delete"; - btnDelete.UseVisualStyleBackColor = true; - btnDelete.Click += DeleteRow; + taskTableGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + taskTableGridView.Dock = DockStyle.Bottom; + taskTableGridView.Location = new Point(0, 232); + taskTableGridView.Name = "taskTableGridView"; + taskTableGridView.RowHeadersWidth = 51; + taskTableGridView.Size = new Size(631, 146); + taskTableGridView.TabIndex = 1; // // Main // @@ -159,13 +194,22 @@ namespace TimeTable { Name = "Main"; Text = "TimeTable"; btnPanel.ResumeLayout(false); + btnPanel.PerformLayout(); tableView.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)taskTimeGridView).EndInit(); ((System.ComponentModel.ISupportInitialize)bindingSource).EndInit(); + ((System.ComponentModel.ISupportInitialize)taskTableGridView).EndInit(); ResumeLayout(false); } - private DataTable createDataTable() { + private void OtherTasks() { + SqliteTimeTableCommands.CreateTableIfNotExists(sqlConnectionString); + taskTimeGridView.AutoGenerateColumns = true; + con.ConnectionString = sqlConnectionString; + bindingSource.DataSource = createDataTable(); + } + + public DataTable createDataTable() { DataTable table = new DataTable(); table.Locale = new System.Globalization.CultureInfo("de-de"); SQLiteCommand sqlCommand = new SQLiteCommand("select * from timetable;", con); @@ -177,7 +221,7 @@ namespace TimeTable { private void DeleteRow(object sender, EventArgs e) { DataGridViewRow row = taskTimeGridView.Rows[0]; string currentId = row.Cells[0].Value.ToString(); - SqliteCommands.DeleteTableRow(currentId, sqlConnectionString); + SqliteTimeTableCommands.DeleteTableRow(currentId, sqlConnectionString); bindingSource.DataSource = createDataTable(); } @@ -189,12 +233,27 @@ namespace TimeTable { string text = row.Cells[3].Value.ToString(); RowEdit rowEdit = new RowEdit(); - rowEdit.Data(uid, start, end, text); + rowEdit.Data(uid, start, end, text, this); rowEdit.ShowDialog(); } - private void executeSql(string command) { + private void TimeTableClick(object sender, DataGridViewCellEventArgs e) { + DataGridViewRow row = taskTimeGridView.Rows[0]; + string uid = row.Cells[4].Value.ToString(); + uidLbl.Text = uid; + this.uid = uid; + + BindingSource bindingSource = new BindingSource(); + DataTable table = new DataTable(); + table.Locale = new System.Globalization.CultureInfo("de-de"); + SQLiteCommand sqlCommand = new SQLiteCommand("select * from tasks where uid = " + uid + ";", con); + dataAdapter.SelectCommand = sqlCommand; + dataAdapter.Fill(table); + taskTableGridView.DataSource = table; + } + + public void executeSql(string command) { SqliteConnection con = new SqliteConnection(sqlConnectionString); SqliteCommand sqliteCmd = con.CreateCommand(); sqliteCmd.CommandText = command; @@ -208,7 +267,7 @@ namespace TimeTable { private void btnStartClick(object sender, EventArgs e) { - UidCommand uidCmd = SqliteCommands.InsertCmd(DateTime.Now); + UidCommand uidCmd = SqliteTimeTableCommands.InsertCmd(DateTime.Now); uid = uidCmd.uid; executeSql(uidCmd.command); } @@ -217,8 +276,8 @@ namespace TimeTable { } - private void btnStopResumeClick(object sender, EventArgs e) { - String cmd = SqliteCommands.UpdateEndCmd(uid, DateTime.Now); + private void btnStopResumeClick(object sender, EventArgs e) { + String cmd = SqliteTimeTableCommands.UpdateEndCmd(uid, DateTime.Now); executeSql(cmd); } @@ -243,5 +302,8 @@ namespace TimeTable { private SQLiteDataAdapter dataAdapter; private System.ComponentModel.IContainer components; private Button btnDelete; + private Label uidText; + private Label uidLbl; + private DataGridView taskTableGridView; } } diff --git a/TimeTable/view/Main.resx b/TimeTable/view/Main.resx index d3f3187..19142ec 100644 --- a/TimeTable/view/Main.resx +++ b/TimeTable/view/Main.resx @@ -120,6 +120,9 @@ 381, 17 + + 381, 17 + 161, 17 diff --git a/TimeTable/view/RowEdit.Designer.cs b/TimeTable/view/RowEdit.Designer.cs index 7377035..b01e972 100644 --- a/TimeTable/view/RowEdit.Designer.cs +++ b/TimeTable/view/RowEdit.Designer.cs @@ -1,4 +1,5 @@ using Microsoft.IdentityModel.Tokens; +using System.Windows.Forms; using TimeTable.controll; using TimeTable.model; @@ -8,6 +9,7 @@ namespace TimeTable.view { /// Required designer variable. /// private System.ComponentModel.IContainer components = null; + Main main; /// /// Clean up any resources being used. @@ -37,8 +39,6 @@ namespace TimeTable.view { textBox = new TextBox(); btnSave = new Button(); btnCancel = new Button(); - startTimePicker = new DateTimePicker(); - endTimePicker = new DateTimePicker(); SuspendLayout(); // // uidTxt @@ -77,49 +77,55 @@ namespace TimeTable.view { textTxt.TabIndex = 3; textTxt.Text = "Text"; // - // uidLbl + // uidText // uidLbl.AutoSize = true; uidLbl.Location = new Point(71, 20); - uidLbl.Name = "uidLbl"; + uidLbl.Name = "uidText"; uidLbl.Size = new Size(34, 20); uidLbl.TabIndex = 4; uidLbl.Text = "UID"; // // startDatePicker // + startDatePicker.CustomFormat = "dd-mm-yyyy HH:mm:ss"; + startDatePicker.Format = DateTimePickerFormat.Custom; + startDatePicker.ShowUpDown = true; startDatePicker.Location = new Point(71, 49); startDatePicker.Name = "startDatePicker"; - startDatePicker.Size = new Size(186, 27); + startDatePicker.Size = new Size(230, 27); startDatePicker.TabIndex = 5; // // endDatePicker // + endDatePicker.CustomFormat = "dd-mm-yyyy HH:mm:ss"; + endDatePicker.Format = DateTimePickerFormat.Custom; + endDatePicker.ShowUpDown = true; endDatePicker.Location = new Point(71, 88); endDatePicker.Name = "endDatePicker"; - endDatePicker.Size = new Size(186, 27); + endDatePicker.Size = new Size(230, 27); endDatePicker.TabIndex = 6; // // textBox // textBox.Location = new Point(71, 126); textBox.Name = "textBox"; - textBox.Size = new Size(300, 27); + textBox.Size = new Size(230, 27); textBox.TabIndex = 7; // // btnSave // - btnSave.Location = new Point(156, 173); + btnSave.Location = new Point(98, 173); btnSave.Name = "btnSave"; btnSave.Size = new Size(101, 30); btnSave.TabIndex = 8; btnSave.Text = "Save"; btnSave.UseVisualStyleBackColor = true; - btnSave.Click += button1_Click; + btnSave.Click += btnSaveCmd; // // btnCancel // - btnCancel.Location = new Point(270, 173); + btnCancel.Location = new Point(212, 173); btnCancel.Name = "btnCancel"; btnCancel.Size = new Size(101, 30); btnCancel.TabIndex = 9; @@ -127,29 +133,11 @@ namespace TimeTable.view { btnCancel.UseVisualStyleBackColor = true; btnCancel.Click += btnCancelCmd; // - // startTimePicker - // - startTimePicker.Format = DateTimePickerFormat.Time; - startTimePicker.Location = new Point(263, 49); - startTimePicker.Name = "startTimePicker"; - startTimePicker.Size = new Size(108, 27); - startTimePicker.TabIndex = 10; - // - // endTimePicker - // - endTimePicker.Format = DateTimePickerFormat.Time; - endTimePicker.Location = new Point(263, 88); - endTimePicker.Name = "endTimePicker"; - endTimePicker.Size = new Size(108, 27); - endTimePicker.TabIndex = 11; - // // RowEdit // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(382, 237); - Controls.Add(endTimePicker); - Controls.Add(startTimePicker); + ClientSize = new Size(325, 215); Controls.Add(btnCancel); Controls.Add(btnSave); Controls.Add(textBox); @@ -167,20 +155,24 @@ namespace TimeTable.view { PerformLayout(); } - private void btnCancelCmd(object sender, EventArgs e) { this.Close(); } + private void btnSaveCmd(object sender, EventArgs e) { + string cmd = SqliteTimeTableCommands.UpdateCmd(uidLbl.Text, startDatePicker.Value, endDatePicker.Value, textBox.Text); + main.executeSql(cmd); + } #endregion - public void Data(string uid, string start, string end, string text) { + public void Data(string uid, string start, string end, string text, Main mainView) { + main = mainView; uidLbl.Text = uid; if (!start.IsNullOrEmpty()) { startDatePicker.Text = start; } - if (!end.IsNullOrEmpty()) { + if (!end.IsNullOrEmpty()) { endDatePicker.Text = end; } @@ -199,8 +191,6 @@ namespace TimeTable.view { private TextBox textBox; private Button btnSave; private Button btnCancel; - private DateTimePicker startTimePicker; - private DateTimePicker endTimePicker; } diff --git a/TimeTable/view/RowEdit.cs b/TimeTable/view/RowEdit.cs index d66da88..4cbd3a5 100644 --- a/TimeTable/view/RowEdit.cs +++ b/TimeTable/view/RowEdit.cs @@ -3,9 +3,5 @@ public RowEdit() { InitializeComponent(); } - - private void button1_Click(object sender, EventArgs e) { - - } } } diff --git a/TimeTable/view/TextInsert.Designer.cs b/TimeTable/view/TextInsert.Designer.cs index faff4a2..bdc6f41 100644 --- a/TimeTable/view/TextInsert.Designer.cs +++ b/TimeTable/view/TextInsert.Designer.cs @@ -27,11 +27,11 @@ textBox = new TextBox(); SuspendLayout(); // - // label1 + // uidText // label1.AutoSize = true; label1.Location = new Point(12, 23); - label1.Name = "label1"; + label1.Name = "uidText"; label1.Size = new Size(36, 20); label1.TabIndex = 0; label1.Text = "Text";