prezentace aplikace powerpoint - gfp · 2015-03-24 · private void knoflíky_heckedhanged(object...
TRANSCRIPT
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
Filtrování
• program, který načte CSV soubor a vyfiltruje ženy narozené 1970 a dříve
• http://www.gfp.cz/prg/zakaznici.csv
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
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
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; }
Editace dat v tabulce
• v kategorii Data použijeme DataGridView
• vlastnost Dock dáme na Fill – vyplní zbytek okna
• definice sloupců se provádí ve vlastnosti Columns
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
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ů
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
• 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);
• 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);
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);
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); } } } }
• Př. program, který rozloží větu na jednotlivá slova. Interpunkci pro jednoduchost neřešte, tj. použijeme Split na rozdělení dle mezer.
• 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().
• 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
• 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.
Kalendář
• prvek DateTimePicker
• hlavní vlastnost Value typu DateTime
• vyzkoušejte
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…