/// <summary> /// Metoda pro vytvoření interní kolekce obsahující pouze záznamy vykreslované na konkrétní stránku. /// </summary> private void VyberZaznamyNaJednuStranku() { // Určení indexu záznamu pro výběr na základě počtu již vykreslených stran int StartIndex = CisloStranky * MaxZaznamuNaStranku; // Smazání kolekce pro možnost přidání nových dat ZaznamyNaJedneStrance.Clear(); // Pokud v kolekci je více položek než se vejde na 1 stránku, vybere se pouze maximální počet na stránku if ((StartIndex + MaxZaznamuNaStranku) <= SeznamZaznamu.Count) { // Postupné přidání určitého počtu položek do kolkece pro vykreslení 1 strany for (int index = StartIndex; index < (StartIndex + MaxZaznamuNaStranku); index++) { ZaznamyNaJedneStrance.Add(SeznamZaznamu[index]); } } // Pokud v kolekci zbýva jen několik záznamů pro vykreslení, vybere se daný počet na poslední stránku else { // Postupné přidání určitého počtu položek do kolkece pro vykreslení 1 strany for (int index = StartIndex; index < SeznamZaznamu.Count; index++) { ZaznamyNaJedneStrance.Add(SeznamZaznamu[index]); } } }
/// <summary> /// Vytvoření grafické reprezentace záznamů na 1 stránce a seskupení těchto položek do interní kolekce. /// </summary> private void VytvorGrafickouStranuZaznamu() { // Smazání obsahu stránky za účelem vykreslení nových dat this.StrankaZaznamu.Children.Clear(); // Vytvoření StackPanel pro seskupení grafických prvků na 1 stránce StackPanel Stranka = new StackPanel { Orientation = Orientation.Vertical }; // Postupné vytvoření grafické reprezentace záznamu a přidání do kolekce grafických záznamů foreach (Zaznam zaznam in ZaznamyNaJedneStrance) { // Převedení kategorie (jedná se o příjem nebo výdaj) na textový řetězec s diakritikou string PrijemVydaj = zaznam.PrijemNeboVydaj == KategoriePrijemVydaj.Prijem ? "Příjem" : "Výdaj"; // Vytvoření bloku reprezentující 1 záznam na stránce StackPanel GrafZaznam = new StackPanel { Orientation = Orientation.Vertical, Background = Controller.BarvaPozadi }; // Název záznamu Label nazev = new Label { Content = zaznam.Datum.Date.ToString("dd.MM.yyyy") + " -> " + zaznam.Nazev, FontSize = 16 }; // Hodnota záznamu Label cena = new Label { Content = PrijemVydaj + ": " + zaznam.Hodnota_PrijemVydaj.ToString() + " Kč", FontSize = 16 }; // Oddělovací čára Rectangle deliciCara = new Rectangle { Width = 300, Height = 2, Fill = Brushes.DarkBlue }; // Přidání prvků do bloku záznamu GrafZaznam.Children.Add(nazev); GrafZaznam.Children.Add(cena); GrafZaznam.Children.Add(deliciCara); // Uložení indexu záznamu v seznamu pro následnou identifikaci konkrétního záznamu GrafZaznam.Name = "obr" + ZaznamyNaJedneStrance.IndexOf(zaznam).ToString(); // Přidání událostí pro grafický blok určený pro vykreslení stránky záznamů GrafZaznam.MouseDown += GrafZaznam_MouseDown; GrafZaznam.MouseMove += GrafZaznam_MouseMove; GrafZaznam.MouseLeave += GrafZaznam_MouseLeave; // Přidání bloku na stránku Stranka.Children.Add(GrafZaznam); } /* Doplnění stránky prázdnými bloky pro zajištění stálé velikosti stránky z důvodu pohodlnějšího ovládání kolečkem myši */ // Počet prázdných bloků potřebných pro doplnění stránky int PocetPrazdnychBloku = MaxZaznamuNaStranku - ZaznamyNaJedneStrance.Count; // Pomocná proměnná pro uchování výšky vytvořeného bloku int VyskaPrazdnehoBloku = (int)Math.Floor(450.0 / MaxZaznamuNaStranku); // Přidání určitého počtu prázdných bloků pro dpolnění stránky na celkovou velikost for (int i = 0; i < PocetPrazdnychBloku; i++) { StackPanel prazdnyBlok = new StackPanel { Height = VyskaPrazdnehoBloku, Width = 300, Background = Controller.BarvaPozadi }; Stranka.Children.Add(prazdnyBlok); } // Vytvoření popisku pro označení aktuální stránky Label OznaceniStranky = new Label { FontSize = 12, Content = "Strana " + (CisloStranky + 1).ToString() + " z " + MaximalniPocetStran.ToString(), Foreground = Brushes.Red }; // Přidání popisu do bloku stránky Stranka.Children.Add(OznaceniStranky); // Uložení indexu stránky pro identifikaci dat a orientaci v celkovém seznamu Stranka.Name = "str" + CisloStranky.ToString(); // Přidání události pro stránku graficky vykreslených dat Stranka.MouseWheel += Stranka_MouseWheel; // Uložení grafické reprezentace stránky do interní proměnné this.StrankaZaznamu.Children.Add(Stranka); }