IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

5. diel - Uloženie objektov do CSV vo VB.NET časť 2

V minulom dieli seriálu tutoriálov o VB.NET, Uloženie objektov do CSV vo VB.NET , sme načal databázu užívateľov pomocou CSV súborov.

Teraz aplikáciu dokončíme a doladíme.

Načítanie používateľov z CSV súboru

Uloženie nám funguje, zostáva vedieť dáta opätovne načítať. Súbor budeme čítať riadok po riadku, každý riadok rozdelíme metódou Split a následne do kolekcie pridáme objekt s príslušnými hodnotami. Pred načítaním si kolekciu vyprázdnime, aby pri zmene súboru v databáze nezostal ten istý (keby sa aplikácia niekedy rozširovala).

Public Sub Nacti()
    uzivatele.Clear()
    'Otevře soubor pro čtení
    Using sr As New StreamReader(soubor)
        Dim s As String
        While Not sr.EndOfStream
            'Rozdělení stringu podle středníků
            s = sr.ReadLine()
            Dim rozdeleno() As String = s.Split(";")
            Dim jmeno = rozdeleno(0)
            Dim vek = rozdeleno(1)
            Dim registrovan = DateTime.Parse(rozdeleno(2))
            'přidá uživatele s danými hodnotami
            PridejUzivatele(jmeno, vek, registrovan)
        End While
    End Using
End Sub

Trieda databázy je teda kompletná. Teraz sa zameriame na formulárovom časť.

Ako prvý si pripravíme nové formulárové prvky (kontroly z ToolBox). Pridáme tlačidlo načítať, ďalej listbox listUzivatelu, u ktorého nastavíme Sorted na True. Ďalej TextBox na meno nového používateľa, NumericUpDown na jeho vek a DateTimePicker na dátum registrácie. Ku kontrolujeme pridáme nejaké labely. Tieto prvky môžeme zoskupiť do GroupBoxu. V ďalšom GroupBoxu budú 3 labely na detail užívateľa, tie pomenujeme labelJmena, labelVeku a labelRegistrace. Ďalšie 3 labely pridáme ako ich popisok. Pridáme tlačidlo na pridanie používateľa a celú aplikáciu môžeme oživiť PictureBox. Ak to bolo moc rýchle, nezúfajte, tu je obrázok výsledného formulára:

Formulár databázy používateľov v CSV - Súbory a sieť vo Visual Basic .NET

V reáli by bolo pridanie používateľov pravdepodobne prítomné v ďalšom formulári, ktorý by sa zobrazoval ako dialóg, ale nám to bude v tutoriálu stačiť takto.

Z tlačidla Uložiť odstránime vytvorenie testovacích používateľov. Samotné uloženie teraz vložíme do Try-Catch bloku. Vieme totiž, že Finally (teda using blok v našej databáze) výnimky nepohlcuje, čo tiež chceme a budeme na ne reagovať vo formulárové časti, kam reakcie logicky patrí. Upozornenie na chybu priamo v triede Databaze by bolo zle. Po zachytení výnimky zobrazíme MessageBox s chybou. Metóda tlačidla bude teda vyzerať takto:

ate Sub tlacitkoUlozit_Click(sender As Object, e As EventArgs) Handles tlacitkoUlozit.Click
Try
    databaze.Uloz()
Catch ex As Exception
    MessageBox.Show("Databázi se nepodařilo uložit, zkontrolujte přístupová práva k souboru.",
"Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

Obdobne naklikne metódu tlačidla Načítať, iba po načítaní databázy vložíme objekty do listbox. Ten predtým vymastíme, aby nám tam nezostávali používatelia z predošlého načítanie. V reáli by sa načítanie vykonalo asi automaticky po spustení aplikácie a uloženie po ukončení, pre názornosť si to však ponecháme na tlačidlách. Metóda tlačidla Načítať teda vyzerá takto:

Try
    databaze.Nacti()
    listUzivatelu.Items.Clear()
    listUzivatelu.Items.AddRange(databaze.VratVsechny())
Catch ex As Exception
    MessageBox.Show("Databázi se nepodařilo načíst, soubor zřejmě neexisituje.",
"Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

Teraz spracujeme kliknutie na listUzivatelu, ktoré vykoná zobrazenie detailu užívateľa do pripravených labelov:

If Not IsNothing( listUzivatelu.SelectedItem) Then
    Dim u As Uzivatel = listUzivatelu.SelectedItem
    labelJmena.Text = u.Jmeno
    labelVeku.Text = u.Vek.ToString()
    labelRegistrace.Text = u.Registrovan.ToShortDateString()
End If

Kód sme opodmínkovali pre prípad, že by nebol žiadny užívateľ vybraný (list by bol prázdny), za reč stojí pretypovanie označené položky na typ Uzivatel, pretože listbox nie je generická kolekcie a VB.NET teda nevie, akého je item typu. Môžete si vyskúšať, že všetko funguje.

Posledné tlačidlo bez metódy je Pridanie nového používateľa. Rozkliknite ho teda, vloženie bude veľmi jednoduché, prvok však musíme pridať ako do databázy, tak do listUzivatelu. Pri zložitejších aplikácií by sme použili tzv. DataBinding, ale nás by to teraz len plietlo.

Private Sub talcitkoPridat_Click(sender As Object, e As EventArgs) Handles talcitkoPridat.Click
    Dim jmeno As String = jmenoTextbox.Text
    Dim vek As Integer = vekNumericupdown.Value
    Dim registrovan As DateTime = registrovanDatetimepicker.Value
    databaze.PridejUzivatele(jmeno, vek, registrovan)
    listUzivatelu.Items.Add(New Uzivatel(jmeno, vek, registrovan))
End Sub

Skúsime pridať nového používateľa:

Formulár databázy používateľov v CSV - Súbory a sieť vo Visual Basic .NET

Podobne by sme si mohli napísať aj mazanie užívateľov, ale to už nechám na vás. Zostáva nám ešte ošetriť cestu k súboru, aby viedla do zložky AppData, nie do zložky s programom. To vieme z tutoriálu Úvod do práce so súbormi. Tiež by sme mohli vymazať text labelov pri štarte programu. Oboje vykonáme v konstruktoru formulára, do using si pridáme System.IO.

Public Sub New()
    InitializeComponent()
    ' vyprázdnění labelů detailu uživatele
    labelJmena.Text = ""
    labelVeku.Text = ""
    labelRegistrace.Text = ""
    ' vytvoření složky aplikace v AppData
    Dim cesta As String = ""
    Try
        cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "DatabazeUzivatelu")
        If Not Directory.Exists(cesta) Then
            Directory.CreateDirectory(cesta)
        End If
    Catch
        MessageBox.Show("Nepodařilo se vytvořit složku " & cesta & ", zkontrolujte prosím svá oprávnění.", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    End Try
    ' vytvoření databáze
    databaze = New Databaze(Path.Combine(cesta, "uzivatele.csv"))
End Sub

A je to :)

Naša aplikácia je takmer hotová, ešte sa zamyslíme nad tým, čo sa stane, keď niekto do mena vloží bodkočiarka. Aplikácia sa rozbije. Preto budeme v metóde Uloz () bodkočiarkami z mena odstraňovať. Keby sme robili aplikáciu, kde by sme ich potrebovali (čo sa nestáva príliš často), môžeme vybrať iný zástupný znak. Ak by sme chceli byť dokonalí, vložíme takú hodnotu sa bodkočiarkou do úvodzoviek. Potom sa však už nejde o jednoduché CSV a metóda Split nám prestane stačiť, záujemcov odkázať na triedu Microsoft.Visu­alBasic.FileI­O.TextFieldPar­ser. Ďalej by sa to samozrejme dalo riešiť iným formátom. My si teda bodkočiarkami iba odstráňme, presnejšie ich nahradíme medzerami zmenou jediného riadku v metóde Uloz ():

Dim hodnoty As String() = {u.Jmeno.Replace(";", " "), u.Vek.ToString(), u.Registrovan.ToShortDateString()}

A sme hotoví. Ak vám niečo nešlo úplne hladko, hotový projekt máte ako vždy v prílohe aj so zdrojovým kódom.

Nabudúce, Úvod do XML a zápis Saxe , sa pozrieme na formát XML.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 262x (96.09 kB)
Aplikácia je vrátane zdrojových kódov v jazyku VB

 

Predchádzajúci článok
Uloženie objektov do CSV vo VB.NET
Všetky články v sekcii
Súbory a sieť vo Visual Basic .NET
Preskočiť článok
(neodporúčame)
Úvod do XML a zápis Saxe
Článok pre vás napísal Michal Žůrek - misaz
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity