prezentace aplikace powerpoint - gfp · 2015-03-24 · private void knoflíky_heckedhanged(object...

21
Tabulková data budeme pracovat s CSV soubory – položky oddělené středníkem, např. Číslo zákazníka;Příjmení;Jméno;Datum narození 17;Novotná;Bohdana;25.11.1982 22;Kender;David;24.12.1986 29;Čihák;Jan;18.3.1969 33;Zdobinská;Vlasta;19.6.1932 43;Pohořalá;Michaela;22.6.1946 51;Brejcha;Jiří;27.4.1945 60;Kubále;Zdeněk;8.10.1943 68;Hemelík;Miroslav;21.6.1973 71;Hessingová;Lucie;12.4.1930 75;Balada;Jakub;2.2.1962 76;Kotýnek;Jaroslav;11.7.1948 78;Popek;Marian;1.12.1963 82;Prokopcová;Jiřina;2.11.1963 91;Šachová;Lucie;6.7.1965

Upload: others

Post on 03-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Tabulková data budeme pracovat s CSV soubory – položky oddělené středníkem, např. Číslo zákazníka;Příjmení;Jméno;Datum narození 17;Novotná;Bohdana;25.11.1982 22;Kender;David;24.12.1986 29;Čihák;Jan;18.3.1969 33;Zdobinská;Vlasta;19.6.1932 43;Pohořalá;Michaela;22.6.1946 51;Brejcha;Jiří;27.4.1945 60;Kubále;Zdeněk;8.10.1943 68;Hemelík;Miroslav;21.6.1973 71;Hessingová;Lucie;12.4.1930 75;Balada;Jakub;2.2.1962 76;Kotýnek;Jaroslav;11.7.1948 78;Popek;Marian;1.12.1963 82;Prokopcová;Jiřina;2.11.1963 91;Šachová;Lucie;6.7.1965

Page 2: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Filtrování

• program, který načte CSV soubor a vyfiltruje ženy narozené 1970 a dříve

• http://www.gfp.cz/prg/zakaznici.csv

Page 3: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

private void tlačítkoProcházetVýchozí_Click(object sender, EventArgs e)

{

if (oknoOtevřeníSouboru.ShowDialog() == DialogResult.OK)

poleVýchozí.Text = oknoOtevřeníSouboru.FileName;

}

private void tlačítkoProcházetVýsledný_Click(object sender, EventArgs e)

{

if (oknoUloženíSouboru.ShowDialog() == DialogResult.OK)

poleVýsledný.Text = oknoUloženíSouboru.FileName;

}

private void tlačítkoVyber_Click(object sender, EventArgs e)

{

// Otevření souborů

StreamReader výchozí = new StreamReader(poleVýchozí.Text,

Encoding.Default);

StreamWriter výsledný = new StreamWriter(poleVýsledný.Text,

false, Encoding.Default);

// Přečtení a zápis prvního řádku (záhlaví) string záhlaví = výchozí.ReadLine(); výsledný.WriteLine(záhlaví); // Čtení z výchozího, vyhodnocení a případný zápis do výsledného string řádek; while ((řádek = výchozí.ReadLine()) != null) { // Částečné dekódování řádku string[] hodnoty = řádek.Split(';'); string hodnotaPohlaví = hodnoty[3].Trim().ToLower(); bool žena = hodnotaPohlaví == "žena"; string hodnotaRokNarození = hodnoty[4].Trim(); int rokNarození = Convert.ToInt32(hodnotaRokNarození); // Ženy ročník 1970 a starší do výsledného souboru if (žena && rokNarození <= 1970) výsledný.WriteLine(řádek); } // Zavření obou souborů výchozí.Close(); výsledný.Close(); MessageBox.Show("HOTOVO!"); }

• Split(oddělovač) – rozdělí řetězec na pole položek • Trim() – zlikviduje mezery na začátku a konci řetězce • ToLower() – převede řetězec na malá písmena

Page 4: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Práce s datem • http://www.gfp.cz/prg/zakaznici_s_daty_narozeni.csv • instance DateTime k uložení jednoho data a času • různé varianty konstruktorů

– rok, měsíc, den – rok, měsíc, den, hodina, minuta,

sekunda a další

• DateTime.Today – dnešní datum v 0:00:00 • DateTime.Now – dnešní datum a aktuální čas • vlastnosti Year, Month, Day, Hour, Minute, Second, Millisecond, DayOfWeek, DayOfYear • AddXXX umí přidat udaný počet dní, hodin… • dvě instance DateTime lze odečítat a výsledek uložit do instance

TimeSpan, která má např. užitečnou vlastnost Days

Page 5: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

private void knoflíky_CheckedChanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když // uživatel zvolí variantu "Jindy" poleDatum.Enabled = knoflíkJindy.Checked; } private void tlačítkoProcházet_Click(object sender, EventArgs e) { if (oknoOtevřeníSouboru.ShowDialog() == DialogResult.OK) poleSoubor.Text = oknoOtevřeníSouboru.FileName; } private void tlačítkoVypiš_Click(object sender, EventArgs e) { // Které datum se hledá? DateTime dnes = DateTime.Today; DateTime hledanéDatum; if (knoflíkDnes.Checked) hledanéDatum = dnes; else if (knoflíkZítra.Checked) hledanéDatum = dnes.AddDays(1); else { int letošníRok = dnes.Year; hledanéDatum = Convert.ToDateTime(poleDatum.Text + letošníRok.ToString()); }

// Otevření souboru a přeskočení řádku se záhlavím string jménoSouboru = poleSoubor.Text; StreamReader soubor = new StreamReader(jménoSouboru, Encoding.Default); soubor.ReadLine(); // Čtení položku za položkou a zpracování string řádek, zpráva = null; while ((řádek = soubor.ReadLine()) != null) { // Řádek se rozdělí na hodnoty string[] hodnoty = řádek.Split(';'); // Separování jednotlivých hodnot string čísloZákazníka = hodnoty[0]; string příjmení = hodnoty[1]; string jméno = hodnoty[2]; string datumNarozeníTextem = hodnoty[3]; DateTime datumNarození = Convert.ToDateTime(datumNarozeníTextem); // Má narozeniny? if (datumNarození.Day == hledanéDatum.Day && datumNarození.Month == hledanéDatum.Month) zpráva += jméno + " " + příjmení + " (č. " + čísloZákazníka + ")" + Environment.NewLine; } // Zavření souboru, zobrazení zprávy soubor.Close(); if (zpráva == null) zpráva = "V uvedený den nemá narozeniny žádný zákazník"; poleZobrazení.Text = zpráva; }

Page 6: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Editace dat v tabulce

• v kategorii Data použijeme DataGridView

• vlastnost Dock dáme na Fill – vyplní zbytek okna

Page 7: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

• definice sloupců se provádí ve vlastnosti Columns

Page 8: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Definice barev

• v okně editace sloupců vlastnost DefaultCellStyle – tam BackColor, ForeColor, SelectionBackColor, SelectionForeColor

• RowsDefaultCellStyle určuje nastavení barev podle řádků

• rozlišení na liché a sudé zajistí AlternatingRowsDefaultCellStyle

Page 9: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když
Page 10: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Vlastnosti ovlivňující, co smí uživatel

• AllowUserToAddRows – uživatel smí přidávat řádky

• AllowUserToDeleteRows – smí mazat

• AllowUserToOrderColumns – smí měnit tažením pořadí sloupců

• AllowUserToResizeColumns – smí měnit velikost sloupců

• AllowUserToResizeRows – smí měnit výšku řádků

Page 11: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Přístup k datům v tabulce

• vlastnost Rows – seznam řádků, pomocí indexu dostupný každý řádek

• každý řádek je instance DataGridViewRow – vlastnost Cells – seznam buněk řádku, seznam lze indexovat číslem sloupce nebo názvem sloupce v uvozovkách

• buňky jsou instance DataGridViewCell – zajímavá hlavně vlastnost Value – většinou volaná metodou ToString

Page 12: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

• ulož řetězec “ahoj“ do druhé buňky prvního řádku

DataGridViewRow prvníŘádek = tabulka.Rows[0];

prvníŘádek.Cells[1].Value = “ahoj“;

• z prvního řádku zobraz buňku ze sloupce „sloupecBydliště“

DataGridViewCell buňka = tabulka.Rows[0].Cells[“sloupecBydliště“];

string hodnota = buňka.Value.ToString();

MessageBox.Show(hodnota);

Page 13: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

• lze přistupovat i pomocí dvojice indexů řádek, sloupec

• pozn. použito automatické zjištění typu proměnné pomocí var – když zapomenu přesný název typu buňky

// 2. buňka, 1. řádku

tabulka[0, 1].Value = “ahoj“;

var buňka = tabulka[“sloupecBydliště“, 0];

string hodnota = buňka.Value.ToString();

MessageBox.Show(hodnota);

Page 14: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Plnění tabulky

• metoda Add na seznam řádků Rows

• více variant – např. jedna přebírá pole hodnot

string[] hodnoty = new string[] {“Franta“, “Vomáčka“, “Neratovice“};

tabulka.Rows.Add(hodnoty);

Page 15: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

using System; using System.IO; using System.Text; using System.Windows.Forms; namespace Editace_tabulkových_dat { public partial class oknoProgramu : Form { string jménoSouboru = null; public oknoProgramu() { InitializeComponent(); } private void nabídkaSouborOtevřít_Click(object sender, EventArgs e) { // Zjisti jméno souboru if (oknoOtevřeníSouboru.ShowDialog() != DialogResult.OK) return; jménoSouboru = oknoOtevřeníSouboru.FileName; // Načítej soubor ... StreamReader soubor = new StreamReader(jménoSouboru, Encoding.Default); // Hlavičku přečteme, ale v tomto programu nezpracováváme string hlavička = soubor.ReadLine(); // Vymaž stávající hodnoty z tabulky tabulka.Rows.Clear(); // Postupně načítej řádky a přidávej do tabulky string řádek; while ((řádek = soubor.ReadLine()) != null) { string[] hodnoty = řádek.Split(';'); tabulka.Rows.Add(hodnoty); } // Zavři soubor soubor.Close(); } private void nabídkaSouborUložit_Click(object sender, EventArgs e) { if (sender == nabídkaSouborUložitJako || jménoSouboru == null) { // Zjisti jméno souboru if (oknoUloženíSouboru.ShowDialog() != DialogResult.OK) return; jménoSouboru = oknoUloženíSouboru.FileName; }

// Zapisuj soubor ... StreamWriter soubor = new StreamWriter(jménoSouboru, false, Encoding.Default); // Zapiš hlavičkový řádek string hlavička = "Příjmení;Jméno;Místo bydliště"; soubor.WriteLine(hlavička); // Zapiš jednotlivé řádky tabulky int početŘádků = tabulka.Rows.Count; int početSloupců = tabulka.Columns.Count; for (int čísloŘádku = 0; čísloŘádku < početŘádků; čísloŘádku++) { string řádek = null; for (int čísloSloupce = 0; čísloSloupce < početSloupců; čísloSloupce++) { řádek += tabulka[čísloSloupce, čísloŘádku].Value.ToString(); if (čísloSloupce < početSloupců - 1) řádek += ";"; } soubor.WriteLine(řádek); } // Zavři soubor soubor.Close(); } private void nabídkaSouborKonec_Click(object sender, EventArgs e) { Close(); } private void nabídkaZákazníkNový_Click(object sender, EventArgs e) { string[] prázdnéHodnoty = new string[3]{"", "", ""}; tabulka.Rows.Add(prázdnéHodnoty); } private void nabídkaZákazníkOdstranit_Click(object sender, EventArgs e) { var aktivníBuňka = tabulka.CurrentCell; if (aktivníBuňka != null) { int čísloŘádku = aktivníBuňka.RowIndex; tabulka.Rows.RemoveAt(čísloŘádku); } } } }

Page 16: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

• Př. program, který rozloží větu na jednotlivá slova. Interpunkci pro jednoduchost neřešte, tj. použijeme Split na rozdělení dle mezer.

Page 17: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

• Př. program, který vypíše všechna data letošního roku.

• Tip: Vyrobte si datum 1. ledna letošního roku (DateTime datum = new DateTime(letošníRok, 1, 1);) a přidávejte dny (AddDays), dokud se nezmění rok. K zobrazení použijte ToLongDateString().

Page 18: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

• Př. program, který načte z CSV souboru data ve formátu

příjmení; jméno; známka z M, známka z ČJ, známka z PRG

a uloží do jiného CSV souboru data ve formátu

příjmení; jméno; průměrný prospěch

Page 19: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

• Př. program, který sečte myší označené buňky. Tabulka je vyplněna náhodně.

• Tip: Seznam vybraných buněk se získá dotazem na hodnotu vlastnosti SelectedCells tabulky.

Page 20: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Kalendář

• prvek DateTimePicker

• hlavní vlastnost Value typu DateTime

• vyzkoušejte

Page 21: Prezentace aplikace PowerPoint - GFP · 2015-03-24 · private void knoflíky_heckedhanged(object sender, EventArgs e) { // Pole pro zadání data bude aktivní pouze tehdy, když

Bublinová nápověda

• prvek ToolTip

• dáme do okna

• potom u dalších prvků nastavujeme vlastnost Tooltip na XXX na požadovanou hodnotu

• lze měnit barvy, ikonu…