Wikiknihy cswikibooks https://cs.wikibooks.org/wiki/Wikiknihy:Hlavn%C3%AD_strana MediaWiki 1.46.0-wmf.26 first-letter Média Speciální Diskuse Uživatel Diskuse s uživatelem Wikiknihy Diskuse k Wikiknihám Soubor Diskuse k souboru MediaWiki Diskuse k MediaWiki Šablona Diskuse k šabloně Nápověda Diskuse k nápovědě Kategorie Diskuse ke kategorii TimedText TimedText talk Modul Diskuse k modulu Podujatie Diskusia k podujatiu Jak postupovat při tvorbě webu 0 9767 55309 2026-04-28T13:13:34Z ~2026-25884-96 11634 nové 55309 wikitext text/x-wiki === 1. Základy (C#) – Cyklus a podmínka === C# <code>string[] jmena = { "Petr", "Jana", "Eva" }; foreach (var jmeno in jmena) { if (jmeno.StartsWith("J")) Console.WriteLine($"Nalezeno: {jmeno}"); }</code> === 2. OOP – Třída, Vlastnost a Dědičnost === C# <code>public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); } public class Pes : Zvire { public string Jmeno { get; set; } // Vlastnost public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus }</code> === 3. WinForms – Událost a Messagebox === C# <code>private void btnPozdrav_Click(object sender, EventArgs e) { string jmeno = txtJmeno.Text; if (!string.IsNullOrWhiteSpace(jmeno)) MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK); }</code> === 4. Práce s daty – Čtení textového souboru === C# <code>try { string obsah = File.ReadAllText("data.txt"); Console.WriteLine(obsah); } catch (IOException ex) { Console.WriteLine("Chyba při čtení: " + ex.Message); }</code> === 5. GDI+ – Kreslení obdélníku a textu === C# <code>protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň g.DrawString("GDI+", Font, Brushes.Black, 10, 130); }</code> === 6. ASP.NET Core (Controller) – Akce v MVC === C# <code>public class HomeController : Controller { public IActionResult Index(string jmeno) { ViewBag.Zprava = $"Vítej, {jmeno}!"; return View(); } }</code> === 7. SQL – Základní DML a DDL === SQL <code>-- Vytvoření tabulky (DDL) CREATE TABLE Uzivatele (ID int PRIMARY KEY, Jmeno varchar(50)); -- Manipulace s daty (DML) INSERT INTO Uzivatele VALUES (1, 'Admin'); SELECT * FROM Uzivatele WHERE Jmeno = 'Admin';</code> === 8. Web (JS) – Manipulace s DOM === JavaScript <code>// Změna textu prvku po kliknutí document.querySelector('#tlacitko').addEventListener('click', () => { document.querySelector('#nadpis').textContent = 'Změněno JavaScriptem!'; document.body.style.backgroundColor = 'lightgray'; });</code> = Příprava na praktickou maturitní zkoušku z IT = == 1. Základy programování == Základní stavební kameny pro práci s daty a řízení toku programu v C#.<syntaxhighlight lang="csharp"> string[] jmena = { "Petr", "Jana", "Eva" }; foreach (var jmeno in jmena) { if (jmeno.StartsWith("J")) Console.WriteLine($"Nalezeno: {jmeno}"); } </syntaxhighlight> == 2. Objektově orientované programování (OOP) == Práce se třídami, dědičností a polymorfismem.<syntaxhighlight lang="csharp"> public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); } public class Pes : Zvire { public string Jmeno { get; set; } // Vlastnost public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus } </syntaxhighlight> == 3. Grafické uživatelské rozhraní (Windows Forms) == Základy event-driven programování v desktopových aplikacích.<syntaxhighlight lang="csharp"> private void btnPozdrav_Click(object sender, EventArgs e) { string jmeno = txtJmeno.Text; if (!string.IsNullOrWhiteSpace(jmeno)) MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK); } </syntaxhighlight> == 4. Práce s daty == Čtení ze souborů a základní ošetření chyb.<syntaxhighlight lang="csharp"> try { string obsah = File.ReadAllText("data.txt"); Console.WriteLine(obsah); } catch (IOException ex) { Console.WriteLine("Chyba při čtení: " + ex.Message); } </syntaxhighlight> == 5. GDI+ Grafika == Vykreslování na plátno (Canvas) pomocí objektu Graphics.<syntaxhighlight lang="csharp"> protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň g.DrawString("GDI+", Font, Brushes.Black, 10, 130); } // Příklad koláčového grafu private void DrawPieChart(Graphics g) { float[] hodnoty = { 30, 20, 50 }; Color[] barvy = { Color.Red, Color.Green, Color.Blue }; float soucet = hodnoty.Sum(); float startAngle = 0; for (int i = 0; i < hodnoty.Length; i++) { float sweepAngle = (hodnoty[i] / soucet) * 360; using (Brush brush = new SolidBrush(barvy[i])) { g.FillPie(brush, 50, 50, 200, 200, startAngle, sweepAngle); } startAngle += sweepAngle; } } </syntaxhighlight> == 6. Tvorba webových stránek v .NET (MVC) == Architektura Model-View-Controller v ASP.NET Core.<syntaxhighlight lang="csharp"> public class HomeController : Controller { public IActionResult Index(string jmeno) { ViewBag.Zprava = $"Vítej, {jmeno}!"; return View(); } } </syntaxhighlight> == 7. MS-SQL == Práce s databází pomocí jazyků DDL a DML.<syntaxhighlight lang="sql"> -- Vytvoření tabulky (DDL) CREATE TABLE Uzivatele ( ID int PRIMARY KEY, Jmeno varchar(50) NOT NULL ); -- Manipulace s daty (DML) INSERT INTO Uzivatele VALUES (1, 'Admin'); SELECT * FROM Uzivatele WHERE Jmeno = 'Admin'; </syntaxhighlight> == 8. Základy webových technologií == === HTML5 Struktura === Základní šablona dokumentu.<syntaxhighlight lang="html"> <!DOCTYPE html> <html lang="cs"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Maturitní projekt</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1>Tělo stránky</h1> <script src="script.js"></script> </body> </html> </syntaxhighlight> === CSS3 Selektory a Flexbox === <syntaxhighlight lang="css"> .rodic { display: flex; justify-content: space-between; align-items: center; gap: 15px; } .polozka:hover { background-color: #ffeb3b; transition: 0.3s; } </syntaxhighlight> === JavaScript (DOM a Fetch) === Asynchronní komunikace se serverem.<syntaxhighlight lang="javascript"> async function ziskejData() { try { const response = await fetch('https://api.priklad.cz/data'); if (!response.ok) throw new Error("Chyba sítě"); const data = await response.json(); console.log(data); } catch (error) { console.error("Chyba:", error.message); } } </syntaxhighlight> == 9. Backend (Node.js & Express) == Ukázka vrstvené architektury serveru.<syntaxhighlight lang="javascript"> import express from 'express'; const app = express(); app.use(express.json()); app.get('/api/studenti', async (req, res) => { // Volání servisní vrstvy const studenti = await studentsService.getAll(); res.json(studenti); }); app.listen(3000, () => console.log('Server běží na portu 3000')); </syntaxhighlight> Konec Webů ted práci se soubory a databázemi == 4. Práce se soubory a daty (System.IO) == V .NET používáme pro manipulaci se soubory jmenný prostor `System.IO`. Nejdůležitějšími nástroji jsou `StreamWriter` pro zápis a `StreamReader` pro čtení. === Zápis do souboru (StreamWriter) === Slouží k ukládání textových dat na disk. Konstruktor umožňuje nastavit, zda se má soubor přepsat nebo data přidat na konec.<syntaxhighlight lang="csharp"> using System.IO; string cesta = "data.txt"; // false = přepsat soubor, true = připsat data na konec using (StreamWriter sw = new StreamWriter(cesta, false)) { sw.WriteLine("První řádek"); sw.WriteLine("Druhý řádek"); } </syntaxhighlight> === Čtení ze souboru (StreamReader) === Umožňuje načítat data řádek po řádku, což je šetrné k operační paměti u velkých souborů.<syntaxhighlight lang="csharp"> using (StreamReader sr = new StreamReader("data.txt")) { string radek; while ((radek = sr.ReadLine()) != null) { Console.WriteLine(radek); } } </syntaxhighlight> === Ošetření výjimek (try-catch) === Práce se soubory je riziková operace (soubor může chybět nebo být zamčený). Vždy používáme blok `try-catch`.<syntaxhighlight lang="csharp"> try { string text = File.ReadAllText("data.txt"); } catch (FileNotFoundException) { MessageBox.Show("Soubor nebyl nalezen!"); } catch (Exception ex) { MessageBox.Show("Nastala obecná chyba: " + ex.Message); } </syntaxhighlight> == 5. Práce s databází (Entity Framework) == Pro moderní přístup k databázím (ORM) se používá Entity Framework Core. Ten mapuje databázové tabulky přímo na C# třídy. === AppDbContext a Mapování === <syntaxhighlight lang="csharp"> // Definice tabulky jako C# třídy [Table("Students")] public class Student { [Key] public int Id { get; set; } public string Name { get; set; } } // Konfigurace připojení (DbContext) public class AppDbContext : DbContext { public DbSet<Student> Students { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // Connection string obsahuje adresu, jméno DB a přihlášení string conn = "server=localhost;database=moje_db;user=root;password=heslo;"; optionsBuilder.UseMySQL(conn); } } </syntaxhighlight> === Použití v kódu === <syntaxhighlight lang="csharp"> using (var db = new AppDbContext()) { // Načtení všech dat do Listu var seznamStudentu = db.Students.ToList(); } </syntaxhighlight> == 6. Oddělení dat od vizuálu (DataTable a Grid) == Pokud nepotřebujeme databázi, používáme `DataTable` jako dočasnou tabulku v paměti. Tato technika odděluje data (logiku) od jejich zobrazení (`DataGridView`). === Vytvoření DataTable a napojení na Grid === <syntaxhighlight lang="csharp"> DataTable dt = new DataTable(); // 1. Definice struktury (sloupce) dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Jmeno", typeof(string)); // 2. Přidání dat (řádky) dt.Rows.Add(1, "Jan Novák"); dt.Rows.Add(2, "Petr Svoboda"); // 3. Zobrazení v UI (DataGridView) dataGridView1.DataSource = dt; </syntaxhighlight> === Praktický příklad: Načtení CSV do tabulky === Ukázka, jak zkombinovat čtení souboru s vizuálním zobrazením v gridu.<syntaxhighlight lang="csharp"> DataTable dt = new DataTable(); dt.Columns.Add("Jmeno"); dt.Columns.Add("Vek"); string[] radky = File.ReadAllLines("uzivatele.csv"); foreach (string radek in radky) { string[] bunky = radek.Split(';'); // Rozdělení podle středníku dt.Rows.Add(bunky[0], bunky[1]); } dgvData.DataSource = dt; dalsi kod static void Main() { // 1. Vytvořit spojení s databází AutobazarDbContext context = new AutobazarDbContext(); // 2. Vyhledat auta dražší než 200 000 Kč a seřadit od nejdražšího List<Auto> drahaAuta = context.Auta .Where(a => a.Cena > 200000) .OrderByDescending(a => a.Cena) .ToList(); // 3. Vypsat auta do konzole foreach (Auto auto in drahaAuta) { Console.WriteLine($"{auto.Znacka} {auto.Model} - {auto.Cena} Kč"); } } using MaturitaNightmare.Data; using MaturitaNightmare.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MaturitaNightmare.Forms { public partial class MainForm : Form { private AppDbContext DbContext { get; set; } private BindingList<Question> Questions { get; set; } public MainForm() { InitializeComponent(); //Pozor, je potřeba vytvořit DbContext DbContext = new AppDbContext(); //1. Načteme otázky do List<Question> List<Question> dataFromDb = DbContext.Questions.ToList(); //2. Vytvořím si BindingList z Listu Questions = new BindingList<Question>(dataFromDb); //3. Nastavit DataSource dataGridView_Questions.DataSource = Questions; } private void button_Start_Click(object sender, EventArgs e) { MessageBox.Show("ahoj"); } private void button_Add_Click(object sender, EventArgs e) { QuestionAddForm form = new QuestionAddForm(); DialogResult result = form.ShowDialog(); if (result == DialogResult.OK) { //vzít data a narvat je do DB + BindingList string subject = form.GetQuestionSubject(); string text = form.GetQuestionText(); bool choiceOption = form.GetQuestionChoiceOption(); Question question = new Question() { Subject = subject, Text = text, IsMultipleChoice = choiceOption }; Questions.Add(question); DbContext.Questions.Add(question); DbContext.SaveChanges(); } } private void button_Delete_Click(object sender, EventArgs e) { //GUARD CLAUSES if (dataGridView_Questions.CurrentRow == null) { return; } DialogResult result = MessageBox.Show( "Doopravdy chcete smazat tuto otázku?", "Potvrzení smazání", MessageBoxButtons.OKCancel); if (result != DialogResult.OK) { return; } int index = dataGridView_Questions.CurrentRow.Index; Question question = Questions[index]; //smažeme z BindingListu Questions.Remove(question); DbContext.Questions.Remove(question); DbContext.SaveChanges(); } private void button_Update_Click(object sender, EventArgs e) { if (dataGridView_Questions.CurrentRow == null) { return; } int index = dataGridView_Questions.CurrentRow.Index; Question question = Questions[index]; QuestionEditForm form = new QuestionEditForm(question); DialogResult result = form.ShowDialog(); if (result != DialogResult.OK) { return; } question.Subject = form.GetQuestionSubject(); question.Text = form.GetQuestionText(); question.IsMultipleChoice = form.GetQuestionChoiceOption(); //DbContext.Questions.Update(question); // <--- není potřeba DbContext.SaveChanges(); Questions.ResetBindings(); } private void button_OpenGraphSummary_Click(object sender, EventArgs e) { GraphSummaryForm form = new GraphSummaryForm(); form.ShowDialog(); } private void dataGridView_Questions_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void MainForm_Load(object sender, EventArgs e) { } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MaturitaNightmare.Entities { [Table("Questions")] public class Question { public static readonly IEnumerable<string> AvailableSubjects = ["MAT", "PRG", "NEJ", "FYZ", "TEV", "ČJ"]; [Key] [Column("id")] [Browsable(false)] public int Id { get; set; } [Column("subject")] [DisplayName("Předmět")] public string Subject { get; set; } [Column("text")] [DisplayName("Text")] public string Text { get; set; } [Column("is_multiple_choice")] [DisplayName("Je multiple choice?")] public bool IsMultipleChoice { get; set; } //Navigační vlastnost (je potřeba buďto lazyloading nebo .Include) public List<Answer> Answers { get; set; } = new List<Answer>(); } } </syntaxhighlight> l23wu8e0tds7j9r3yf8wtkc4fvdn2w0 55310 55309 2026-04-28T13:14:54Z ~2026-25884-96 11634 a 55310 wikitext text/x-wiki <syntaxhighlight lang="csharp"> private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; int[] hodnoty = { 10, 40, 25, 60 }; int sirkaSloupce = 40; int mezera = 20; int maxVyska = 200; int maxHodnota = hodnoty.Max(); for (int i = 0; i < hodnoty.Length; i++) { int vyska = (hodnoty[i] * maxVyska) / maxHodnota; int x = 50 + i * (sirkaSloupce + mezera); int y = 300 - vyska; g.FillRectangle(Brushes.Blue, x, y, sirkaSloupce, vyska); } } </syntaxhighlight> === 1. Základy (C#) – Cyklus a podmínka === C# <code>string[] jmena = { "Petr", "Jana", "Eva" }; foreach (var jmeno in jmena) { if (jmeno.StartsWith("J")) Console.WriteLine($"Nalezeno: {jmeno}"); }</code> === 2. OOP – Třída, Vlastnost a Dědičnost === C# <code>public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); } public class Pes : Zvire { public string Jmeno { get; set; } // Vlastnost public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus }</code> === 3. WinForms – Událost a Messagebox === C# <code>private void btnPozdrav_Click(object sender, EventArgs e) { string jmeno = txtJmeno.Text; if (!string.IsNullOrWhiteSpace(jmeno)) MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK); }</code> === 4. Práce s daty – Čtení textového souboru === C# <code>try { string obsah = File.ReadAllText("data.txt"); Console.WriteLine(obsah); } catch (IOException ex) { Console.WriteLine("Chyba při čtení: " + ex.Message); }</code> === 5. GDI+ – Kreslení obdélníku a textu === C# <code>protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň g.DrawString("GDI+", Font, Brushes.Black, 10, 130); }</code> === 6. ASP.NET Core (Controller) – Akce v MVC === C# <code>public class HomeController : Controller { public IActionResult Index(string jmeno) { ViewBag.Zprava = $"Vítej, {jmeno}!"; return View(); } }</code> === 7. SQL – Základní DML a DDL === SQL <code>-- Vytvoření tabulky (DDL) CREATE TABLE Uzivatele (ID int PRIMARY KEY, Jmeno varchar(50)); -- Manipulace s daty (DML) INSERT INTO Uzivatele VALUES (1, 'Admin'); SELECT * FROM Uzivatele WHERE Jmeno = 'Admin';</code> === 8. Web (JS) – Manipulace s DOM === JavaScript <code>// Změna textu prvku po kliknutí document.querySelector('#tlacitko').addEventListener('click', () => { document.querySelector('#nadpis').textContent = 'Změněno JavaScriptem!'; document.body.style.backgroundColor = 'lightgray'; });</code> = Příprava na praktickou maturitní zkoušku z IT = == 1. Základy programování == Základní stavební kameny pro práci s daty a řízení toku programu v C#.<syntaxhighlight lang="csharp"> string[] jmena = { "Petr", "Jana", "Eva" }; foreach (var jmeno in jmena) { if (jmeno.StartsWith("J")) Console.WriteLine($"Nalezeno: {jmeno}"); } </syntaxhighlight> == 2. Objektově orientované programování (OOP) == Práce se třídami, dědičností a polymorfismem.<syntaxhighlight lang="csharp"> public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); } public class Pes : Zvire { public string Jmeno { get; set; } // Vlastnost public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus } </syntaxhighlight> == 3. Grafické uživatelské rozhraní (Windows Forms) == Základy event-driven programování v desktopových aplikacích.<syntaxhighlight lang="csharp"> private void btnPozdrav_Click(object sender, EventArgs e) { string jmeno = txtJmeno.Text; if (!string.IsNullOrWhiteSpace(jmeno)) MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK); } </syntaxhighlight> == 4. Práce s daty == Čtení ze souborů a základní ošetření chyb.<syntaxhighlight lang="csharp"> try { string obsah = File.ReadAllText("data.txt"); Console.WriteLine(obsah); } catch (IOException ex) { Console.WriteLine("Chyba při čtení: " + ex.Message); } </syntaxhighlight> == 5. GDI+ Grafika == Vykreslování na plátno (Canvas) pomocí objektu Graphics.<syntaxhighlight lang="csharp"> protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň g.DrawString("GDI+", Font, Brushes.Black, 10, 130); } // Příklad koláčového grafu private void DrawPieChart(Graphics g) { float[] hodnoty = { 30, 20, 50 }; Color[] barvy = { Color.Red, Color.Green, Color.Blue }; float soucet = hodnoty.Sum(); float startAngle = 0; for (int i = 0; i < hodnoty.Length; i++) { float sweepAngle = (hodnoty[i] / soucet) * 360; using (Brush brush = new SolidBrush(barvy[i])) { g.FillPie(brush, 50, 50, 200, 200, startAngle, sweepAngle); } startAngle += sweepAngle; } } </syntaxhighlight> == 6. Tvorba webových stránek v .NET (MVC) == Architektura Model-View-Controller v ASP.NET Core.<syntaxhighlight lang="csharp"> public class HomeController : Controller { public IActionResult Index(string jmeno) { ViewBag.Zprava = $"Vítej, {jmeno}!"; return View(); } } </syntaxhighlight> == 7. MS-SQL == Práce s databází pomocí jazyků DDL a DML.<syntaxhighlight lang="sql"> -- Vytvoření tabulky (DDL) CREATE TABLE Uzivatele ( ID int PRIMARY KEY, Jmeno varchar(50) NOT NULL ); -- Manipulace s daty (DML) INSERT INTO Uzivatele VALUES (1, 'Admin'); SELECT * FROM Uzivatele WHERE Jmeno = 'Admin'; </syntaxhighlight> == 8. Základy webových technologií == === HTML5 Struktura === Základní šablona dokumentu.<syntaxhighlight lang="html"> <!DOCTYPE html> <html lang="cs"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Maturitní projekt</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1>Tělo stránky</h1> <script src="script.js"></script> </body> </html> </syntaxhighlight> === CSS3 Selektory a Flexbox === <syntaxhighlight lang="css"> .rodic { display: flex; justify-content: space-between; align-items: center; gap: 15px; } .polozka:hover { background-color: #ffeb3b; transition: 0.3s; } </syntaxhighlight> === JavaScript (DOM a Fetch) === Asynchronní komunikace se serverem.<syntaxhighlight lang="javascript"> async function ziskejData() { try { const response = await fetch('https://api.priklad.cz/data'); if (!response.ok) throw new Error("Chyba sítě"); const data = await response.json(); console.log(data); } catch (error) { console.error("Chyba:", error.message); } } </syntaxhighlight> == 9. Backend (Node.js & Express) == Ukázka vrstvené architektury serveru.<syntaxhighlight lang="javascript"> import express from 'express'; const app = express(); app.use(express.json()); app.get('/api/studenti', async (req, res) => { // Volání servisní vrstvy const studenti = await studentsService.getAll(); res.json(studenti); }); app.listen(3000, () => console.log('Server běží na portu 3000')); </syntaxhighlight> Konec Webů ted práci se soubory a databázemi == 4. Práce se soubory a daty (System.IO) == V .NET používáme pro manipulaci se soubory jmenný prostor `System.IO`. Nejdůležitějšími nástroji jsou `StreamWriter` pro zápis a `StreamReader` pro čtení. === Zápis do souboru (StreamWriter) === Slouží k ukládání textových dat na disk. Konstruktor umožňuje nastavit, zda se má soubor přepsat nebo data přidat na konec.<syntaxhighlight lang="csharp"> using System.IO; string cesta = "data.txt"; // false = přepsat soubor, true = připsat data na konec using (StreamWriter sw = new StreamWriter(cesta, false)) { sw.WriteLine("První řádek"); sw.WriteLine("Druhý řádek"); } </syntaxhighlight> === Čtení ze souboru (StreamReader) === Umožňuje načítat data řádek po řádku, což je šetrné k operační paměti u velkých souborů.<syntaxhighlight lang="csharp"> using (StreamReader sr = new StreamReader("data.txt")) { string radek; while ((radek = sr.ReadLine()) != null) { Console.WriteLine(radek); } } </syntaxhighlight> === Ošetření výjimek (try-catch) === Práce se soubory je riziková operace (soubor může chybět nebo být zamčený). Vždy používáme blok `try-catch`.<syntaxhighlight lang="csharp"> try { string text = File.ReadAllText("data.txt"); } catch (FileNotFoundException) { MessageBox.Show("Soubor nebyl nalezen!"); } catch (Exception ex) { MessageBox.Show("Nastala obecná chyba: " + ex.Message); } </syntaxhighlight> == 5. Práce s databází (Entity Framework) == Pro moderní přístup k databázím (ORM) se používá Entity Framework Core. Ten mapuje databázové tabulky přímo na C# třídy. === AppDbContext a Mapování === <syntaxhighlight lang="csharp"> // Definice tabulky jako C# třídy [Table("Students")] public class Student { [Key] public int Id { get; set; } public string Name { get; set; } } // Konfigurace připojení (DbContext) public class AppDbContext : DbContext { public DbSet<Student> Students { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // Connection string obsahuje adresu, jméno DB a přihlášení string conn = "server=localhost;database=moje_db;user=root;password=heslo;"; optionsBuilder.UseMySQL(conn); } } </syntaxhighlight> === Použití v kódu === <syntaxhighlight lang="csharp"> using (var db = new AppDbContext()) { // Načtení všech dat do Listu var seznamStudentu = db.Students.ToList(); } </syntaxhighlight> == 6. Oddělení dat od vizuálu (DataTable a Grid) == Pokud nepotřebujeme databázi, používáme `DataTable` jako dočasnou tabulku v paměti. Tato technika odděluje data (logiku) od jejich zobrazení (`DataGridView`). === Vytvoření DataTable a napojení na Grid === <syntaxhighlight lang="csharp"> DataTable dt = new DataTable(); // 1. Definice struktury (sloupce) dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Jmeno", typeof(string)); // 2. Přidání dat (řádky) dt.Rows.Add(1, "Jan Novák"); dt.Rows.Add(2, "Petr Svoboda"); // 3. Zobrazení v UI (DataGridView) dataGridView1.DataSource = dt; </syntaxhighlight> === Praktický příklad: Načtení CSV do tabulky === Ukázka, jak zkombinovat čtení souboru s vizuálním zobrazením v gridu.<syntaxhighlight lang="csharp"> DataTable dt = new DataTable(); dt.Columns.Add("Jmeno"); dt.Columns.Add("Vek"); string[] radky = File.ReadAllLines("uzivatele.csv"); foreach (string radek in radky) { string[] bunky = radek.Split(';'); // Rozdělení podle středníku dt.Rows.Add(bunky[0], bunky[1]); } dgvData.DataSource = dt; dalsi kod static void Main() { // 1. Vytvořit spojení s databází AutobazarDbContext context = new AutobazarDbContext(); // 2. Vyhledat auta dražší než 200 000 Kč a seřadit od nejdražšího List<Auto> drahaAuta = context.Auta .Where(a => a.Cena > 200000) .OrderByDescending(a => a.Cena) .ToList(); // 3. Vypsat auta do konzole foreach (Auto auto in drahaAuta) { Console.WriteLine($"{auto.Znacka} {auto.Model} - {auto.Cena} Kč"); } } using MaturitaNightmare.Data; using MaturitaNightmare.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MaturitaNightmare.Forms { public partial class MainForm : Form { private AppDbContext DbContext { get; set; } private BindingList<Question> Questions { get; set; } public MainForm() { InitializeComponent(); //Pozor, je potřeba vytvořit DbContext DbContext = new AppDbContext(); //1. Načteme otázky do List<Question> List<Question> dataFromDb = DbContext.Questions.ToList(); //2. Vytvořím si BindingList z Listu Questions = new BindingList<Question>(dataFromDb); //3. Nastavit DataSource dataGridView_Questions.DataSource = Questions; } private void button_Start_Click(object sender, EventArgs e) { MessageBox.Show("ahoj"); } private void button_Add_Click(object sender, EventArgs e) { QuestionAddForm form = new QuestionAddForm(); DialogResult result = form.ShowDialog(); if (result == DialogResult.OK) { //vzít data a narvat je do DB + BindingList string subject = form.GetQuestionSubject(); string text = form.GetQuestionText(); bool choiceOption = form.GetQuestionChoiceOption(); Question question = new Question() { Subject = subject, Text = text, IsMultipleChoice = choiceOption }; Questions.Add(question); DbContext.Questions.Add(question); DbContext.SaveChanges(); } } private void button_Delete_Click(object sender, EventArgs e) { //GUARD CLAUSES if (dataGridView_Questions.CurrentRow == null) { return; } DialogResult result = MessageBox.Show( "Doopravdy chcete smazat tuto otázku?", "Potvrzení smazání", MessageBoxButtons.OKCancel); if (result != DialogResult.OK) { return; } int index = dataGridView_Questions.CurrentRow.Index; Question question = Questions[index]; //smažeme z BindingListu Questions.Remove(question); DbContext.Questions.Remove(question); DbContext.SaveChanges(); } private void button_Update_Click(object sender, EventArgs e) { if (dataGridView_Questions.CurrentRow == null) { return; } int index = dataGridView_Questions.CurrentRow.Index; Question question = Questions[index]; QuestionEditForm form = new QuestionEditForm(question); DialogResult result = form.ShowDialog(); if (result != DialogResult.OK) { return; } question.Subject = form.GetQuestionSubject(); question.Text = form.GetQuestionText(); question.IsMultipleChoice = form.GetQuestionChoiceOption(); //DbContext.Questions.Update(question); // <--- není potřeba DbContext.SaveChanges(); Questions.ResetBindings(); } private void button_OpenGraphSummary_Click(object sender, EventArgs e) { GraphSummaryForm form = new GraphSummaryForm(); form.ShowDialog(); } private void dataGridView_Questions_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void MainForm_Load(object sender, EventArgs e) { } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MaturitaNightmare.Entities { [Table("Questions")] public class Question { public static readonly IEnumerable<string> AvailableSubjects = ["MAT", "PRG", "NEJ", "FYZ", "TEV", "ČJ"]; [Key] [Column("id")] [Browsable(false)] public int Id { get; set; } [Column("subject")] [DisplayName("Předmět")] public string Subject { get; set; } [Column("text")] [DisplayName("Text")] public string Text { get; set; } [Column("is_multiple_choice")] [DisplayName("Je multiple choice?")] public bool IsMultipleChoice { get; set; } //Navigační vlastnost (je potřeba buďto lazyloading nebo .Include) public List<Answer> Answers { get; set; } = new List<Answer>(); } } </syntaxhighlight> 5luhdrbneegn33miwamtixfstwtlo2i