Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
S Sample_Solutions
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OOP
  • Sample_Solutions
  • Wiki
  • Cv8

Cv8 · Changes

Page history
Create Cv8 authored Nov 12, 2019 by Ing. Lukáš Hruška's avatar Ing. Lukáš Hruška
Hide whitespace changes
Inline Side-by-side
Showing with 81 additions and 0 deletions
+81 -0
  • Cv8.md Cv8.md +81 -0
  • No files found.
Cv8.md 0 → 100644
View page @ 66b00109
# Cvičenie 8
Cieľom dnešného cvičenia bude vytvoriť UI pre knižnicu, ktorú sme robili minule.
## 1.0
Vytvorte si nový Windows forms projekt (v tom istom solution ako minule) a pridajte si do referencií knižnicu, čo ste robili minulý týždeň.
Pridajte si na formulár DataGridView, tento nástroj slúži na automatické zobrazenie dát obsiahnutých v kolekcií - informácie o zamestnancoch, ktoré ste si pripravili na minulom cvičení. Na to, aby sme však dáta vedeli zobraziť si potrebujeme pripraviť niekoľko vecí. Pre jednoduchosť sa dnes nebudeme zaoberať s obojsmerným previazaním dát medzi DataGridView a kolekciou, poskytujúcou dáta (v tomto prípade by sa nám zmeny v DataGridView prejavili priamo v kolekcií, napr. BindingList).
Budeme potrebovať:
- referenciu na objekt CompanyEmployees
- BindingSource - slúži na zaobalenie kolekcie pre využitie DataGridView; BindingSource obsahuje neparametrický konštruktor, ktorý použite
následne si nastavte zdroj dát pre DataGridView:
```csharp
bindingSource.DataSource = companyEmployees.GetEmployees();
DataGridViewEmplyees.DataSource = bindingSource;
```
Nevykonajte túto akciu priamo pri načítaní formuláru, ale priajte si tlačítko, ktoré je zodpovedné za zistenie cesty k súboru (OpenFileDialog) a predaniu tejto cesty knižnici, ktorá ho otvorí a načíta. Následne zobrazte obsah na obrazovke.
OpenFileDialog dokumentácia - https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.openfiledialog?view=netframework-4.8
## 1.1
Pridajte si na formulár TextBox, ktorý bude slúžiť ako vyhľadávanie - pridajte si preň event TextChanged a v rámci tohoto eventu zabezpečte, že sa nám budú zobrazené hodnoty filtrovať - uvažujte, že zadaný reťazec môže byť časť mena alebo priezviska (tzn. nemusíte hľadať osobitne). Nástroje, ktoré k tomu potrebujete:
- `GetEmployees(Func<Employee, bool> predicate)`
- vlastná lambda fukcia, ktorá vykonáva filtrovanie - stačí, ak je priamo ako parameter v GetEmployees - GetEmployees(x => ...)
- `String.Contains(substring)`
- fragment kódu na aktualizovanie DataGridView (keďže nemáme automatické aktualizovanie)
```csharp
bindingSource.DataSource = employees.GetEmployees(x => ...); //nie je nutné, ak sa nemení filter
bindingSource.ResetBindings(false); // false -> metadata nezmenené, ak by ste sem dali úplne novú kolekciu, napr. Items / Users, trebalo by nastaviť na true
```
## 2.0
Pridajte si nový formulár - FormEditEmployee, pridajte si do neho niekoľko TextBox-ov, pre všetky hodnoty, ktoré má v sebe Employee (na popisky použite komponent Label). Pridajte si ešte dva tlačítka - submit a cancel. Následne si pridajte konštruktor s jedným parametrom typu Employee (pozor, v tomto prípade chceme pracovať s týmto konkrétnym zamestnancom, nie jeho kópiou, teda referencia (pointer) musí zostať nezmenená).
## 2.1
Pridajte si do DataGridView event pre DoubleClick, v ktorom vytvoríte formulár a umožníte editáciu zvolených hodnôt:
`dataGridView.CurrentRow.DataBoundItem` nám vráti referenciu na objekt ktorý je v riadku, na ktorý sme dali dvojklik. Pozor, DataBoundItem je triedy __object__ - treba ho správne pretypovať na Employee.
Form obsahuje v sebe property `DialogResult` - táto slúži na predanie informácie o úspechu / neúspechu daného formuláru - napr. či užívateľ potvrdil alebo zrušil zmenu.
V rámci akcií tlačidiel Submit a Cancel, _okrem iného_, nastavte túto hodnotu na `DialogResult.OK` / `DialogResult.Cancel` a zavolajte this.Close();
Otvorte si formulár z predchádzajúceho kroku pomocou:
```csharp
using (FormEditEmployee form = new FormEditEmployee(employee))
{
form.ShowDialog(); //nutné zavolať Dispose alebo použiť IDisposable pattern
if (form.DialogResult == DialogResult.OK)
{
...
}
else if (form.DialogResult == DialogResult.Cancel)
{
...
}
}
//v prípade, že chcete mať na sebe nezávislé okná, je potrebné použiť
form.Show(); //teraz toto nechceme
//následne
form.Close();
```
Pozrite si https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators--and-
Pomocou Null-conditional operator zabezpečte, aby neskončil program chybou, ak sa pokúsite zobraziť properties zamestnanca, keď nemá hodnotu (__null__).
Zabezpečte, aby sa pri dvojkliku na prázdny riadok rovnako otvoril formulár ale po jeho zavretí sa nám pridá nový užívateľ - na získanie nového užívateľa môžete vytvoriť metódu v rámci FormEditEmployee, nepridávajte ho tam však do employees.
Clone repository
  • Assignment part 1
  • Assignment part 2
  • Assignment part 3
  • Cv10
  • Cv11
  • Cv4
  • Cv5
  • Cv7
  • Cv8
  • Cv9
  • Requirements
  • Home