/// <summary> /// Provede načtení dat do stránky a jejich zobrazení /// </summary> public void NactiData() { if (dotazNaPocet == "" || dotazNaPolozky == "") // Pokud nejsou nastaveny dotazy, pak není co načítat { return; } int polozka = 0; // Kolik položek bylo načteno (abych věděl, kolik jich musím skrýt) a tím pádem zobrazeno na stránce string tooltip = ""; // Co bude zobrazeno v tooltipu pro danou událost string popisek = ""; // Co bude zobrazeno jako popisek u události Databaze db = new Databaze(); db.Dotaz(dotazNaPolozky + " LIMIT " + (aktualniStranka * tableLayoutPanel.RowCount).ToString() + ", " + tableLayoutPanel.RowCount.ToString() + ";"); // Použijeme předem nastavený dotaz na položky, ale na konec přihodíme limit kvůli omezenému zobrazení stránek while (db.DalsiVysledek() == true) { tableLayoutPanel.GetControlFromPosition(0, polozka).Tag = db.DejVysledekString("ID"); // Uložíme ID události do PictureBoxu s úpravou události tableLayoutPanel.GetControlFromPosition(1, polozka).Tag = db.DejVysledekString("ID"); // Uložíme ID události do PictureBoxu splněnosti události tableLayoutPanel.GetControlFromPosition(2, polozka).Tag = db.DejVysledekString("ID"); // Uložíme ID události do popisku události if (db.DejVysledekInt("Typ") != ((int)Obecne.UdalostiTypy.narozeniny)) // Pokud událost nejsou narozeniny { if (db.DejVysledekInt("Splneno") == 1) // Pokud je událost splněná, tak nastavíme zorbazení křížku pro nesplnění, upravíme taky tooltip křížku a popisek události přeškrtneme { ((PictureBox)tableLayoutPanel.GetControlFromPosition(1, polozka)).Image = Ukolnik.Properties.Resources.krizek; ((PictureBox)tableLayoutPanel.GetControlFromPosition(1, polozka)).Image.Tag = "krizek"; toolTip.SetToolTip(tableLayoutPanel.GetControlFromPosition(1, polozka), "Označit jako nesplněno"); tableLayoutPanel.GetControlFromPosition(2, polozka).Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Strikeout); } else // V opačném případě se nastaví fajka pro splnění, upraví tooltip fajfky a popiske události nebude přeškrtlý { ((PictureBox)tableLayoutPanel.GetControlFromPosition(1, polozka)).Image = Ukolnik.Properties.Resources.fajfka; ((PictureBox)tableLayoutPanel.GetControlFromPosition(1, polozka)).Image.Tag = "fajfka"; toolTip.SetToolTip(tableLayoutPanel.GetControlFromPosition(1, polozka), "Označit jako splněno"); tableLayoutPanel.GetControlFromPosition(2, polozka).Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); } if (zobrazDatum == true) // Pokud se má zobrazit datum v popisku tak bude zobrazeno, jinak bude jen samotný název události { popisek = db.DejVysledekDatumCas("Kdy").ToString("d.M.yyyy") + " " + db.DejVysledekString("Nadpis"); } else { popisek = db.DejVysledekString("Nadpis"); } popisek += " | " + db.DejVysledekDatumCas("Kdy").ToString("H:mm"); // Přidáme do popisku čas konání if (db.DejVysledekString("Zprava").Length > 0) // Pokud není zpráva prázdná, tak ji přiřadíme do popisku { popisek += " | " + db.DejVysledekString("Zprava"); } tableLayoutPanel.GetControlFromPosition(2, polozka).Text = popisek; tooltip = Obecne.DejNazevTypuUdalosti(db.DejVysledekInt("Typ")) + " " + db.DejVysledekDatumCas("Kdy").ToString("H:mm") + "\n" + db.DejVysledekString("Zprava"); // Tooltip bude obsahovat co to je za typ události, kdy nastane daná událost a také její podrobný popis tableLayoutPanel.GetControlFromPosition(1, polozka).Visible = true; // Zobrazí se PictureBox se splněností (mohl být skryt narozeninama z jiného dne) } else // Pokud jsou to narozeniny { if (zobrazDatum == false) // Pokud se nemá zobrazit datum v popisku tak nebude zobrazeno, bude jen samotný název události, v opačném případě bude před názvem události i datum, kdy se narozeniny odehrávají (využívá se přechod, který násobí splněnost, která se přičitá k roku -> znamená, že další narozeniny jsou až v příštím roce) { tableLayoutPanel.GetControlFromPosition(2, polozka).Text = "Narozeniny " + db.DejVysledekString("Nadpis") + " (" + (rok - db.DejVysledekInt("Zprava") + (db.DejVysledekInt("Splneno") * prechodNarozeninDoDalsihoRoku)).ToString() + ")"; // Pouze nápis narozeniny, kdo je má a kolik mu bude v závorce } else { tableLayoutPanel.GetControlFromPosition(2, polozka).Text = db.DejVysledekDatumCas("Kdy").ToString("d.M") + "." + (rok + db.DejVysledekInt("Splneno") * prechodNarozeninDoDalsihoRoku).ToString() + " " + db.DejVysledekString("Nadpis") + " (" + (rok - db.DejVysledekInt("Zprava") + (db.DejVysledekInt("Splneno") * prechodNarozeninDoDalsihoRoku)).ToString() + ")"; // Kdy má narozeniny, kdo má narozeniny a v závorce kolik mu bude (využívá se přechod, který násobí splněnost, která se přičitá k roku -> znamená, že další narozeniny jsou až v příštím roce) } tooltip = "Narodil se v roce " + db.DejVysledekString("Zprava"); // Jednoduchý tooltip, který zobrazuje, dky se dotyčný narodil tableLayoutPanel.GetControlFromPosition(2, polozka).Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); // Text je obyčejný, nepřeškrtnutý tableLayoutPanel.GetControlFromPosition(1, polozka).Visible = false; // PictureBox se splněností se schová (narozeniny nelze splnit, budou tu furt a furt) } toolTip.SetToolTip(tableLayoutPanel.GetControlFromPosition(2, polozka), tooltip); // Nastavíme událostem tooltipy tableLayoutPanel.GetControlFromPosition(0, polozka).Visible = true; // Necháme zjevit PictureBox s úpravou události (mohl být schován z předchozího nedostatku událostí) tableLayoutPanel.GetControlFromPosition(2, polozka).Visible = true; // Necháme zjevit popisek události (mohl být schován z předchozího nedostatku událostí) polozka += 1; // Zvýšíme počet položek, které budou na stránce } if (polozka == 0) // Pokud bylo načtneo nula položek, tak se pokusí změnšit stránka { if (ZmenStranku(aktualniStranka - 1) == true) // Jestliže byla změna stránky úspěšná, tak se dále nepokračuje, protože se mohou znova načítat data a taky se znovu načítat budou, protože díky té změně stránky bylo vyvoláno další načítání { return; } else // Jestliže změna stránky nebyla úspěšná, tak to znamená, že už více snížit nemůžeme a je tam tedy definitivně 0 položek, takže se provede akce, která se má provést při nula položkách a vrátí počet položek, které díky té akci vznikly { polozka += NulaPolozek(); } if (polozka == 0) // Pokud je i nadále nula položek, tak se ukončí načítání, protože se bude zavírat okno { return; } } int velikost = (int)tableLayoutPanel.Height / polozka; // Spočítá kolik místa si mohou rozdělit popisky velikost = velikost - (velikost % ((int)labelDozadu.Font.GetHeight() + 1)); // Zaokrouhlí je na celé řádky for (int i = 0; i < polozka; i++) // Postupně zvětší místo pro popisky - není efektivní využití přidělení místa, za to ale mnohem rychlejší { ((Label)tableLayoutPanel.GetControlFromPosition(2, i)).MaximumSize = new System.Drawing.Size(0, velikost); } for (int i = polozka; i < tableLayoutPanel.RowCount; i++) // Řádky, kterým nebyla přiřazena událost budou zneviditelněny { tableLayoutPanel.GetControlFromPosition(0, i).Visible = false; tableLayoutPanel.GetControlFromPosition(1, i).Visible = false; tableLayoutPanel.GetControlFromPosition(2, i).Visible = false; } db.Dotaz(dotazNaPocet); // Zjistíme kolik máme událostí do stránek while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") > tableLayoutPanel.RowCount) // Pokud je událostí více než se vejde na jendu stránku, tak musíme zobrazit navigační prvky { textBoxStranka.Visible = true; // Zobrazí se textBox obsahující aktuální stránku if (aktualniStranka == 0) // Pokud jsme na první stránce, tak schováme ovládání na skok na začátek nebo dozadu { labelDozadu.Visible = false; labelZacatek.Visible = false; } else // Pokud nejsem na začátku, tak zviditelníme ovládáníé na skok na začátek nebo dozadu, též nastavíme kam dozadu vede { labelDozadu.Visible = true; labelZacatek.Visible = true; labelDozadu.Tag = aktualniStranka - 1; // Vede na předchozí stránku } int stranek = (db.DejVysledekInt("Pocet") - 1) / tableLayoutPanel.RowCount; // Spočítáme počet stránek if (stranek == 0 || aktualniStranka == stranek) // Pokud je stránek nula nebo už jsme na té poslední, tak schováme ovládání na skok vpřed a na konec { labelVpred.Visible = false; labelKonec.Visible = false; } else // V opačném případě zviditelníme ovládání na skok vpřed a na konec, nastavíme kam vede vpřed a kde je konec { labelVpred.Visible = true; labelVpred.Tag = aktualniStranka + 1; // Vede na následující stránku labelKonec.Visible = true; labelKonec.Tag = stranek; // Vede na psolední stránku } } else // Pokud je počet událostí menší než kolik se vejde na jednu stránku, tak navigaci skryjeme { labelZacatek.Visible = false; labelDozadu.Visible = false; labelVpred.Visible = false; labelKonec.Visible = false; textBoxStranka.Visible = false; } } db.Close(); }
/// <summary> /// Načte data a zobrazí je /// </summary> private void NactiData() { Databaze db = new Databaze(); db.Dotaz("SELECT * FROM udalosti WHERE ID=" + Udalost + ";"); // Získáme data k události while (db.DalsiVysledek()) { if (db.DejVysledekInt("Upozorneno") == (int)Obecne.UpozorneniTypy.neupozornit) // Zjistíme, zda se na událost upozorňuje nebo ne a výsledek zobrazíme { labelUpozorneni.Text = "Ne"; } else { labelUpozorneni.Text = db.DejVysledekDatumCas("Upozorneni").ToString("d.M.yyyy H:mm"); } labelNazev.Text = db.DejVysledekString("Nadpis"); // Získáme název události labelTyp.Text = Obecne.DejNazevTypuUdalosti(db.DejVysledekInt("Typ")); // Získáme název typu události if (db.DejVysledekInt("Typ") != (int)Obecne.UdalostiTypy.narozeniny) // Zda to nejsou narozeniny { labelKdy.Text = db.DejVysledekDatumCas("Kdy").ToString("d.M.yyyy H:mm"); // Získáme kdy se koná událost richTextBox.Text = db.DejVysledekString("Zprava"); // Získáme popis k události if (db.DejVysledekInt("Splneno") == 1) // Získáme, zda je událost splněná { labelSplneno.Text = "Ano"; } else { labelSplneno.Text = "Ne"; } } else // Pokud to jsou narozeniny { labelPopisInfo.Visible = false; // Popisek nepotřebujeme richTextBox.Visible = false; DateTime datum = db.DejVysledekDatumCas("Kdy"); // Nastavíme kdy (den, měsíc a rok) se koná událost if (datum.Month > DateTime.Now.Month || (datum.Month == DateTime.Now.Month && datum.Day >= DateTime.Now.Day)) // Pokud nás ty narozeniny čekají ještě letos, tak rok nastavíme na letošek { datum = datum.AddYears(DateTime.Now.Year - datum.Year); } else // Pokud nás narozeniny čekají příští rok, tak se nastaví příští rok { datum = datum.AddYears(1 + DateTime.Now.Year - datum.Year); } labelKdy.Text = datum.ToString("d.M.yyyy") + " (" + (datum.Year - db.DejVysledekInt("Zprava")).ToString() + ". narozeniny)"; // Vypíšeme datum nejbližších budoucích narozenin a nový věk labelNazevInfo.Text = "Jméno:"; // Nadpis události bude jménem labelSplnenoInfo.Text = "Datum narození:"; // Splněnost událostí bude datem narození labelSplneno.Text = db.DejVysledekDatumCas("Kdy").ToString("d.M.") + db.DejVysledekString("Zprava"); // Získáme datum narození } } if (richTextBox.Text == "") // Pokud nebylo nic napsáno do zprávy, tak bude písmo kurzívou a bude tam info o tom, že tam nic napsáno nebylo { richTextBox.Text = "Komentář k události nebyl připsán"; richTextBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(238))); } db.Close(); int vyska = (richTextBox.GetLineFromCharIndex(richTextBox.Text.Length) + 1) * richTextBox.Font.Height + 1 + richTextBox.Margin.Vertical; // Spočítá se výška, kterou zabírá text if (vyska < richTextBox.MaximumSize.Height) // Pokud je ta výška menší než maximální velikost okna, tak se richTextBox zmenší { richTextBox.Size = new Size(this.Width, vyska); } }