using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlServerCe; using System.IO; namespace organiser { public partial class Form1 : Form { bool updating = false; int id; double range = 0; SqlCeEngine engine; SqlCeConnection connect; SqlCeDataReader readNotes; public Form1() { InitializeComponent(); if (File.Exists("data.sdf")) { engine = new SqlCeEngine("Data Source = data.sdf"); connect = new SqlCeConnection("Data Source = data.sdf"); } else { // Pokud neexistuje db, vytvořit engine = new SqlCeEngine("Data Source = data.sdf"); engine.CreateDatabase(); connect = new SqlCeConnection("Data Source = data.sdf"); connect.Open(); SqlCeCommand crdb = connect.CreateCommand(); crdb.CommandText = "CREATE TABLE organiser (id INT PRIMARY KEY IDENTITY NOT NULL, name NTEXT NOT NULL, description NTEXT NULL, dt DATETIME NOT NULL, rep INT NULL, alert INT NOT NULL)"; crdb.ExecuteNonQuery(); connect.Close(); } // Je nutné to pokaždé nastavovat na dnešní datum? monthCalendar1.SelectionStart = DateTime.Today; monthCalendar1.SelectionEnd = DateTime.Today; dateTimePicker1.Value = DateTime.Today; // Zobrazit úkoly updateList(); checkToDo(); } private void sqlIUD(string cmdt) // SQL Insert, Update, Delete { SqlCeCommand cmd = connect.CreateCommand(); cmd.CommandText = cmdt; connect.Open(); cmd.ExecuteNonQuery(); connect.Close(); } private void Form1_Load(object sender, EventArgs e) { } private void delete(object sender, EventArgs e) { Button clicked = (Button)sender; string deleteNote = "DELETE FROM organiser WHERE id = '" + clicked.Name.ToString() + "'"; // Které tlačítko zmáčknuto? (name = autoincrement id) sqlIUD(deleteNote); MessageBox.Show("Deleted."); updateList(); } private void update(object sender, EventArgs e) { Insert.Visible = false; Update_table.Visible = true; Cancel_update.Visible = true; Button clicked = (Button)sender; SqlCeCommand selectNote = connect.CreateCommand(); selectNote.CommandText = "SELECT * FROM organiser WHERE id = '" + clicked.Name.ToString() + "'"; //Které tlačítko zmáčknuto? connect.Open(); readNotes = selectNote.ExecuteReader(); updating = true; //umožní editovat datum readNotes.Read(); // Načíst data k upravení (do původního formuláře), znemožnit insert id = Convert.ToInt32(readNotes.GetInt32(0)); // uložit id z tlačítka pro pozdější použití při UPDATE monthCalendar1.SelectionStart = readNotes.GetDateTime(3); monthCalendar1.SelectionEnd = readNotes.GetDateTime(3); dateTimePicker1.Value = readNotes.GetDateTime(3); insert_name.Text = readNotes.GetString(1); insert_description.Text = readNotes.GetString(2); insert_repeat_numeric.Value = Convert.ToDecimal(readNotes.GetInt32(4)); insert_alert_days.Value = Convert.ToDecimal(readNotes.GetInt32(5)); connect.Close(); } private void updateList() // zobrazit data pro den/týden/měsíc (+ double range - počet zobrazených dní) { DateTime oneDay = dateTimePicker1.Value.Subtract(dateTimePicker1.Value.TimeOfDay).AddHours(23.9); connect.Open(); SqlCeCommand selectCount = connect.CreateCommand(); selectCount.CommandText = "SELECT count(*) FROM organiser WHERE dt BETWEEN '" + dateTimePicker1.Value.ToString("MM.dd.yyyy HH:mm:ss") + "' AND '" + oneDay.AddDays(range).ToString("MM.dd.yyyy HH:mm:ss") + "'"; int count = Convert.ToInt32(selectCount.ExecuteScalar()); // kvůli dynamickým prvkům, je nutné zjistit potřebnou velikost pole SqlCeCommand selectNotes = connect.CreateCommand(); selectNotes.CommandText = "SELECT * FROM organiser WHERE dt BETWEEN '" + dateTimePicker1.Value.ToString("MM.dd.yyyy HH:mm:ss") + "' AND '" + oneDay.AddDays(range).ToString("MM.dd.yyyy HH:mm:ss") + "' ORDER BY dt ASC"; readNotes = selectNotes.ExecuteReader(); Label[] label = new Label[count]; Button[] b = new Button[count]; Button[] b2 = new Button[count]; int x = 0; int paintY = 0; todo_list.Controls.Clear(); // vymazání labelů/buttonů z minulého updateListu while (readNotes.Read()) { b[x] = new Button(); //mazací čudlík b[x].Size = new Size(10, 10); b[x].Text = "x"; b[x].Location = new Point(0, paintY); b[x].FlatStyle = FlatStyle.Flat; b[x].Click += new EventHandler(delete); b[x].Name = readNotes.GetInt32(0).ToString(); b[x].BackColor = Color.Red; b2[x] = new Button(); //editovací čudlík b2[x].Size = new Size(10, 10); b2[x].Text = "e"; b2[x].Location = new Point(10, paintY); b2[x].FlatStyle = FlatStyle.Flat; b2[x].Click += new EventHandler(update); b2[x].Name = readNotes.GetInt32(0).ToString(); b2[x].BackColor = Color.Green; label[x] = new Label(); // samotná poznámka label[x].Text.Trim(); label[x].MaximumSize = new Size(344, 1000); label[x].MinimumSize = new Size(344, 1); label[x].AutoSize = true; label[x].Location = new Point(20, paintY); label[x].Text = readNotes.GetDateTime(3).ToString() + "; " + readNotes.GetString(1) + " - " + readNotes.GetString(2); if (x % 2 == 0) // střídání barev label[x].BackColor = Color.Aqua; else label[x].BackColor = Color.Yellow; todo_list.Controls.Add(label[x]); todo_list.Controls.Add(b[x]); todo_list.Controls.Add(b2[x]); paintY += label[x].Height; //na jakém Y začít kreslit další label? x++; } connect.Close(); } private void checkToDo() { // stejný princip jako kód výše, přidána podmínka pokud (dnešní den + Alert dní)>= den poznámky; zobraz upozornění DateTime date = DateTime.Today; connect.Open(); SqlCeCommand selectCount = connect.CreateCommand(); selectCount.CommandText = "SELECT count(*) FROM organiser WHERE dt >= '" + date.ToString("MM.dd.yyyy HH:mm:ss") + "'"; int count = Convert.ToInt32(selectCount.ExecuteScalar()); SqlCeCommand selectNotes = connect.CreateCommand(); selectNotes.CommandText = "SELECT * FROM organiser WHERE dt >= '" + date.ToString("MM.dd.yyyy HH:mm:ss") + "' ORDER BY dt ASC"; readNotes = selectNotes.ExecuteReader(); Label[] label2 = new Label[count]; int x = 0; int paintY = 0; alert_panel.Controls.Clear(); while (readNotes.Read()) { if (date.AddDays(Convert.ToDouble(readNotes.GetInt32(5))) >= Convert.ToDateTime(readNotes.GetDateTime(3))) { label2[x] = new Label(); label2[x].Text.Trim(); label2[x].MaximumSize = new Size(660, 1000); label2[x].MinimumSize = new Size(660, 1); label2[x].AutoSize = true; label2[x].Location = new Point(0, paintY); label2[x].Text = readNotes.GetDateTime(3).ToString() +"; " + readNotes.GetString(1) + " - " + readNotes.GetString(2); if (x % 2 == 0) label2[x].BackColor = Color.Aqua; else label2[x].BackColor = Color.Yellow; alert_panel.Controls.Add(label2[x]); paintY += label2[x].Height; x++; } } connect.Close(); } private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) { dateTimePicker1.Value = monthCalendar1.SelectionStart; // nutný check kvůli editaci data if (updating == false) { updateList(); } } private void Insert_Click(object sender, EventArgs e) // klasický insert { for (int x = 0; x < Convert.ToInt32(insert_repeat_numeric.Value); x++) { string insertNote = "INSERT INTO organiser (name, description, dt, rep, alert) VALUES ('" + insert_name.Text + "', '" + insert_description.Text + "', '" + dateTimePicker1.Value.AddDays(Convert.ToDouble(x)).ToString("MM.dd.yyyy HH:mm:ss") + "', '" + Convert.ToInt32(insert_repeat_numeric.Value) + "', '" + Convert.ToInt32(insert_alert_days.Value) + "')"; sqlIUD(insertNote); updateList(); } MessageBox.Show("Done."); updateList(); //netuším proč to jednou nebere } private void Cancel_update_Click(object sender, EventArgs e) // zrušení editace { Insert.Visible = true; Update_table.Visible = false; Cancel_update.Visible = false; updating = false; } private void Update_table_Click(object sender, EventArgs e) // dokončení editace { string updateNote = "UPDATE organiser SET name = '" + insert_name.Text + "', description = '" + insert_description.Text + "', dt = '" + dateTimePicker1.Value.ToString("MM.dd.yyyy HH:mm:ss") + "', alert = '" + Convert.ToInt32(insert_alert_days.Value) + "' WHERE id = '" + id.ToString() + "'"; sqlIUD(updateNote); MessageBox.Show("Updated."); updating = false; updateList(); } private void timer1_Tick(object sender, EventArgs e) // check na (dnešní den + Alert dní)>= den poznámky; zobraz upozornění jednou za 5s { checkToDo(); } private void day1_Click(object sender, EventArgs e) // upravit počet zobrazených dní { range = 0; updateList(); } private void day7_Click(object sender, EventArgs e) { range = 7; updateList(); } private void day30_Click(object sender, EventArgs e) { range = 30; updateList(); } } }