Vizuá lis prográmozá s

Hasonló dokumentumok
Entity Framework alapú adatbáziselérés 2

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Access adatbázis elérése OLE DB-n keresztül

Vizuális programozás gyakorlat

Segítség a megoldáshoz: 1. Készítse el a Window-t az ábrának és az osztálydiagramnak megfelelően.

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Vizuális programozás gyakorlat

Ugráló gomb oktatási segédlet Ugráló gomb

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

BME MOGI Gépészeti informatika 4.

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

C#---Access adatbáziskezelési gyakorlat

BME MOGI Gépészeti informatika 7.

Entity Framework alapú adatbáziselérés

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Johanyák Zsolt Csaba: Képnézegető program oktatási segédlet

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Eseményvezérelt és objektumorientált programozás

Óranyilvántartás (NEPTUN)

Vizuális programozás gyakorlat

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Szoftvertechnolo gia gyakorlat

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

BME MOGI Gépészeti informatika 13.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Objektumorientált programozás C# nyelven III.

BME MOGI Gépészeti informatika 8.

Informatika terméktervezőknek

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Entity Framework alapú adatbáziselérés

Adatbázis-kezelés ActiveX vezérl kkel 2.rész

munkafüzet open eseményéhez

BME MOGI Gépészeti informatika 5.

Java és web programozás

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

3. Osztályok II. Programozás II

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

Kétdimenziós rajzolás WPF-ben

Közlemények kézi felvitele

Adatbázis rendszerek SQL nyomkövetés

Vizuális, eseményvezérelt programozás I.

OOP #14 (referencia-elv)

Fogalmak: Adatbázis Tábla Adatbázis sorai: Adatbázis oszlopai azonosító mező, egyedi kulcs Lekérdezések Jelentés Adattípusok: Szöveg Feljegyzés Szám

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Programozási nyelvek Java

OOP: Java 8.Gy: Abstract osztályok, interfészek

Oktatási anyag az MLSZ-IFA rendszerhez

INFORMATIKAI ALAPISMERETEK

Bánsághi Anna

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

1. ábra Fájl feltöltése 2. ábra Megtekintés

Elektromos gépkocsi vásárlás támogatása Pályázati kiírás kereskedői regisztráció segédlete

Kézikönyv. Szelekciós operátorok használata

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Szoftvertechnológia alapjai Java előadások

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Adatbázisok webalkalmazásokban

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

és az instanceof operátor

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

ZH mintapélda. Feladat. Felület

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozási technológia

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

1. Felhasználói név és jelszó

INFORMATIKAI ALAPISMERETEK

Események C#-ban Krizsán Zoltán iit

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Elemi Alkalmazások Fejlesztése Beadandó Feladat Juhász Ádám

Kalapácsvetés 2016 szöveges

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Osztályok. 4. gyakorlat

Adatbázis Rendszerek II. 3. SQL alapok

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Adatbázis-kezelés. Harmadik előadás

B I T M A N B I v: T M A N

Neptun.Net Oktatásszervezői segédanyag. Debreceni egyetem május 07.

BME MOGI Gépészeti informatika 6.

A C# programozási nyelv alapjai

Entity Framework + LINQ oktatási segédlet

Adatbázis Rendszerek II. 8. Gyakorló környezet

Átírás:

Vizuá lis prográmozá s Készítsen egy WPF alkalmazást, ami a hallgatok.mdf adatbázis állomány felhasználásával a következő feladatokat oldja meg: Kapcsolat nélküli adatbázis modell típusos DataSet segítségével. A két tábla egyesítésével kapott adatok kiíratása a menüsor alatt megjelenő adatrácsban (megjelenítendő adatok az alábbi ábrán). e-mail címek listájának megjelenítése egy csak olvasható szövegmezőben. Hallgatói adatok felvitele a Hallgatók táblába. Hallgatói adatok módosítása. A hallgató az EHA kód alapján választható ki, és módosítható a neve, e-mail címe, szakja. A DataSet-ben tárolt adatokon végrehajtott módosítások mentése az adatbázis állományba. wndfőablak wndfoablak.xaml Title="Hallgatói adatok" <Window x:class="hallgatok.wndfőablak" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Hallgatói adatok" Height="350" Width="525"> <Grid x:name="grrács"> <Grid.RowDefinitions> <RowDefinition Height="30" />

<RowDefinition /> </Grid.RowDefinitions> <Menu x:name="mnfőmenü" Grid.Row="0" FontSize="13"> <Menu.ItemsPanel> <ItemsPanelTemplate> <DockPanel HorizontalAlignment="Stretch"/> </ItemsPanelTemplate> </Menu.ItemsPanel> <MenuItem x:name="mifájl" Header="Fájl" > <MenuItem Header="Mentés" x:name="mimentés" Click="miMentés_Click"/> <Separator /> <MenuItem Header="Kilépés" x:name="mikilépés" Click="miKilépés_Click"/> </MenuItem> <MenuItem x:name="milekérdezés" Header="Lekérdezés" > <MenuItem x:name="miösszesadat" Header="Összes adat" Click="miÖsszesAdat_Click"/> <MenuItem x:name="miemailcímeklistája" Header="e-mail címek listája" Click="miEmailCímekListája_Click"/> </MenuItem> <MenuItem x:name="miadatrögzítésmódosítás" Header="Adatrögzítés/Módosítás" > <MenuItem x:name="mihallgatóadatrögzítés" Header="Hallgatói adatok rögzítése" Click="miHallgatóAdatrögzítés_Click"/> <MenuItem x:name="mihallgatómódosítás" Header="Hallgatói adatok módosítása" Click="miHallgatóAdatmódosítás_Click"/> <MenuItem x:name="miszakadatrögzítés" Header="Szak adatok rögzítése" Click="miSzakAdatrögzítés_Click"/> <MenuItem x:name="miszakmódosítás" Header="Szak adatok módosítása" Click="miSzakMódosítás_Click"/> </MenuItem> </Menu> <!-- Összes adat megjelenítés kezdete --> <DataGrid x:name="dgösszesadat" Grid.Row="1" FontSize="13" Visibility="Hidden" IsVisibleChanged="dgÖsszesAdat_IsVisibleChanged" ItemsSource="Binding" /> <!-- Összes adat megjelenítés vége --> <!-- E-mail címek listája kezdete --> <TextBox x:name="tbemailcímlista" Grid.Row="1" IsReadOnly="True" Visibility="Hidden" FontSize="13" IsVisibleChanged="tbEmailCímLista_IsVisibleChanged" /> <!-- E-mail címek listája kezdete -->

</Grid> </Window> uchallgatoadatrogzites.xaml uchallgatóadatrögzítés : UserControl <UserControl x:class="hallgatok.uchallgatóadatrögzítés" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:ignorable="d" d:designheight="300" d:designwidth="300" IsVisibleChanged="ucHallgatóAdatrögzítés_OnIsVisibleChanged"> <!-- Hallgatói adatok rögzítése kezdete--> <Grid x:name="grhallgatóadatrögzítés" > <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="80" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Content="Név" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" Margin="10,0,0,0"/> <Label Content="EHA" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left" Margin="10,0,0,0"/> <Label Content="e-mail" Grid.Row="2" Grid.Column="0"

HorizontalAlignment="Left" Margin="10,0,0,0"/> <Label Content="Szak" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Left" Margin="10,0,0,0"/> <TextBox x:name="tbarnév" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" /> <TextBox x:name="tbareha" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" /> <TextBox x:name="tbaremail" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" /> <ComboBox x:name="cbarszak" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" Grid.Row="3" ItemsSource="Binding"/> <Button x:name="btarrögzít" Grid.Row="4" Grid.ColumnSpan="2" Grid.Column="0" HorizontalAlignment="Center" Content="Rögzít" Width="75" Height="25" Click="btARRögzít_Click" /> </Grid> <!-- Hallgatói adatok rögzítése vége--> </UserControl> <!-- Hallgatói adatok rögzítése kezdete--> <hallgatok:uchallgatóadatrögzítés x:name="uchallgatóadatrögzítés" Grid.Row="1" Visibility="Hidden" /> <!-- Hallgatói adatok rögzítése vége-->

uchallgatoadatmodositas.xaml uchallgatóadatmódosítás : UserControl <UserControl x:class="hallgatok.uchallgatóadatmódosítás" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:ignorable="d" d:designheight="300" d:designwidth="300" IsVisibleChanged="ucHallgatóAdatmódosítás_OnIsVisibleChanged"> <!-- Hallgatói adatok módosítása kezdete--> <Grid x:name="grhallgatómódosítás" > <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="80" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Content="Név" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Left" Margin="10,0,0,0"/> <Label Content="EHA" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left" Margin="10,0,0,0"/> <Label Content="e-mail" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Left"

Margin="10,0,0,0"/> <Label Content="Szak" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Left" Margin="10,0,0,0"/> <TextBox x:name="tbamnév" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" /> <ComboBox x:name="cbameha" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" ItemsSource="Binding" SelectionChanged="cbAMEHA_SelectionChanged" /> <TextBox x:name="tbamemail" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" /> <ComboBox x:name="cbamszak" Grid.Column="1" HorizontalAlignment="Stretch" FontSize="13" Margin="0,0,15,0" Grid.Row="3" ItemsSource="Binding"/> <Button x:name="btamrögzít" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Center" Content="Rögzít" Width="75" Height="25" Click="btAMRögzít_Click" /> </Grid> <!-- Hallgatói adatok módosítása vége--> </UserControl> <!-- Hallgatói adatok módosítása kezdete--> <hallgatok:uchallgatóadatmódosítás x:name="uchallgatóadatmódosítás" Grid.Row="1" Visibility="Hidden" /> <!-- Hallgatói adatok módosítása vége-->

Adjunk nevet a táblának CREATE TABLE [dbo].[szakok] ( [Azonosító] INT NOT NULL PRIMARY KEY, [Szaknév] CHAR(25) NOT NULL, [Típus] NCHAR(25) NOT NULL ) Létrehozzuk a Hallgatok táblát A Szak mező legyen idegen kulcs. CREATE TABLE [dbo].[hallgatok] ( [EHA] NCHAR(12) NOT NULL PRIMARY KEY, [Név] NCHAR(25) NOT NULL, [e-mail] NCHAR(25) NOT NULL, [Szak] INT NOT NULL, CONSTRAINT [FK_Hallgatok_ToSzakok] FOREIGN KEY (Szak) REFERENCES [Szakok]([Azonosító]) ) Update/Update Database Vigyünk fel adatokat először a Szakok táblába, majd a Hallgatok táblába.

Generáljuk le az adatkezeléshez szükséges osztályokat.

Nevezzük át a DataSet-et dshallgatók-ra, valamint a DataTabla és TableAdapter osztályokat az ábra szerint.

using Hallgatok.dsHallgatókTableAdapters; A főablak osztályában /// A memóra beli adatbázis az adatok tárolásásra. private readonly dshallgatók dshallgatók; /// Táblaadapter a dthallgatók táblához. private readonly tahallgatók tahallgatók; /// Táblaadapter a dtszakok táblához. private readonly taszakok taszakok; /// Adapter menedzser a két táblaadapterhez. private readonly TableAdapterManager tam; /// Konstruktor public wndfőablak() InitializeComponent(); // DataSet objektum létrehozása. dshallgatók = new dshallgatók(); // Táblaadapter objektumok létrehozása. taszakok = new taszakok(); tahallgatók = new tahallgatók();

tam = new TableAdapterManager tahallgatók = tahallgatók, taszakok = taszakok ; try // Adatok betöltése a DataSet-be. taszakok.fill(dshallgatók.dtszakok); tahallgatók.fill(dshallgatók.dthallgatók); // A dataset-et elérhetővé tesszük a teljes alkalmazásban. Application.Current.Properties["dsHallgatók"] = dshallgatók; catch (Exception exc) MessageBox.Show("Adatbeolvasási hiba!\r\n"+ exc.message); Az App.config-ban: <?xml version="1.0" encoding="utf-8"?> <configuration> <configsections> </configsections> <connectionstrings> <add name="hallgatok.properties.settings.cshallgatok" connectionstring="data Source=(LocalDB)\v11.0;AttachDbFilename= DataDirectory \hallgatok.mdf;integrated Security=True;Connect Timeout=30" providername="system.data.sqlclient" /> </connectionstrings> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.5" /> </startup> </configuration> Megoldás 1: A DataDirectory -t lecseréljük a tényleges elérési útvonalra. Megoldás 2: A try blokk elé tegyük be a következő utasítást: AppDomain.CurrentDomain.SetData("DataDirectory", @"d:\dropbox\vp\2013 2014 2 fe Vizualis prograrmozas\gyakorlat\06\hallgatok");

Figyeljünk oda, hogy az útvonal végén ne legyen \. /// Eseménykezelő: kattintás a Kilépés menüponton. Kilépés az alkalmazásból. /// <param name="sender">kilépés menüpont.</param> private void mikilépés_click(object sender, RoutedEventArgs e) Application.Current.Shutdown(); /// Eseménykezelő: kattintás az Összes adat menüponton. Megjeleníti a két /// tábla összekapcsolásával kapott fontosabb adatokat adatrácsban. /// <param name="sender">összes adat menüpont.</param> private void miösszesadat_click(object sender, RoutedEventArgs e) // Elrejtjük a többi menüponthoz tartozó felületelemeket. tbemailcímlista.visibility = Visibility.Hidden; uchallgatóadatrögzítés.visibility = Visibility.Hidden; uchallgatóadatmódosítás.visibility = Visibility.Hidden; // Megjenítjük az adatrácsot. dgösszesadat.visibility = Visibility.Visible; /// A dgösszesadat láthatósága megváltozott. Amikor láthatóvá /// válik, megjelenítjük az adatokat. /// <param name="sender">a dgösszesadat objektum.</param> private void dgösszesadat_isvisiblechanged(object sender, DependencyPropertyChangedEventArgs e) if (dgösszesadat.visibility!= Visibility.Visible) return; // Ha látható, akkor kapcsoljuk a két táblát, és kiválasztjuk a megjelenítendő // mezőket. var er = from x in dshallgatók.dthallgatók join y in dshallgatók.dtszakok on x.szak equals y.azonosító select new x.eha, x.név, x._e_mail, y.szaknév, y.típus ; // Adatkötés. dgösszesadat.itemssource = er.tolist();

/// Eseménykezelő: kattintás az e-mail címek listája menüponton. Megjeleníti /// az összes e-mail címet. /// <param name="sender">e-mail címek listája menüpont.</param> private void miemailcímeklistája_click(object sender, RoutedEventArgs e) // Elrejtjük a többi menüponthoz tartozó felületelemeket. dgösszesadat.visibility = Visibility.Hidden; uchallgatóadatrögzítés.visibility = Visibility.Hidden; uchallgatóadatmódosítás.visibility = Visibility.Hidden; // Megjelenítjük a szövegdobozt. tbemailcímlista.visibility = Visibility.Visible; /// A tbemailcímlista láthatósága megváltozik. Ha látható, akkor megjelnítjük az /// e-mail címeket. /// <param name="sender"></param> private void tbemailcímlista_isvisiblechanged(object sender, DependencyPropertyChangedEventArgs e) if (!tbemailcímlista.isvisible) return; // Ha látható a vezérlő, akkor lekérdezzük az e-mail címeket, és az // eredményt egy listává alakítjuk. var er = (from x in dshallgatók.dthallgatók select x._e_mail).distinct().tolist(); // A lista elemeit egyetlen sztringgé fűzzük össze. var s = er.aggregate("", (current, x) => current + (x + "\r\n")); // A sztring megjelenítése. tbemailcímlista.text = s;

Hallgatói adatok rögzítése A public partial class uchallgatóadatrögzítés : UserControl -ban /// A memória beli adatbázis. private dshallgatók dshallgatók; /// A Hallgatói adatok rögzítése űrlap láthatósága változott. Ha látható, akkor /// feltölti a szakokat tartalmazó legördülő listát. /// <param name="sender">a grhallgatóadatrögzítés objektum.</param> private void uchallgatóadatrögzítés_onisvisiblechanged(object sender, DependencyPropertyChangedEventArgs e) if (!this.isvisible) return; // referencia lekérése a dataset-hez. dshallgatók = Application.Current.Properties["dsHallgatók"] as dshallgatók; // Ha még nincs szak megadva, akkor nem vihetünk fel hallgatói adatokat. if (dshallgatók.dtszakok.rows.count < 1)

MessageBox.Show("Még nincs szak megadva!"); return; // Ha látható az űrlap, akkor a szakok tábláját a kominált listaablakhoz rendeljük. cbarszak.itemssource = dshallgatók.dtszakok; // A listaablak egy rekordból csak egy mezőt tud megjeleníteni. Megadjuk, hogy // ez a mező legyen a Szaknév. cbarszak.displaymemberpath = "Szaknév"; // A legelső szak legyen alapból kiválasztva. cbarszak.selectedindex = 0; /// Eseménykezelő: kattintás a rögzít gombon. Ellenőrzi a bevitt adatokat, /// és azok helyessége esetén rögzíti azokat a DataSet-ben. /// <param name="sender">a btarrögzít objektum.</param> private void btarrögzít_click(object sender, RoutedEventArgs e) // Kilépés, ha nem sikeres az ellenőrzés. if (!AREllenőriz()) return; // A kiválasztott szak rekordjának referenciája. var SzakSor = (cbarszak.selectedvalue as DataRowView).Row as dshallgatók.dtszakokrow; if (SzakSor == null) return; // Felvisszük az új rekordot a dthallgatók táblába. dshallgatók.dthallgatók.adddthallgatókrow(tbareha.text, tbarnév.text, tbaremail.text, SzakSor); MessageBox.Show("Adatok rögzítve!"); // Szövegmezők ürítése. tbarnév.text = ""; tbareha.text = ""; tbaremail.text = ""; // Első szak kiválasztása. cbarszak.selectedindex = 0; /// Ellenőrzi a Hallgatói adatok rögzítése űrlapon megadott adatokat. /// <returns>true - ha helyesen van kitöltve, /// false - egyébként</returns> private bool AREllenőriz() // Ha a tbarnév mező kitöltése nem megfelelő akkor hamis visszatérési érték. // Ha a tbareha mező kitöltése nem megfelelő akkor hamis visszatérési érték. // Ha a tbaremail mező kitöltése nem megfelelő akkor hamis visszatérési érték. return Név_Ellenőriz(tbARNév) && (EHA_Ellenőriz(tbAREHA) && Email_Ellenőriz(tbAREmail)); /// Ellenőrzi a Név szövegmező kitöltését. /// <param name="tbnév">a szövegmező objektum</param>

/// <returns>true - ha helyesen van kitöltve, /// false - egyébként</returns> public static bool Név_Ellenőriz(TextBox tbnév) // Ha nincs kitöltve. if (tbnév.text.length == 0) MessageBox.Show("Név megadása kötelező!"); return false; // Ha betűn és szóközön kívül más karaktert is tartalmaz. if (tbnév.text.tochararray().any(c =>!Char.IsLetter(c) && c!= ' ')) MessageBox.Show("Csak betű és szóköz szerepelhet a névben!"); return false; return true; /// Ellenőrzi az EHA szövegmező kitöltését. /// <param name="tbeha">a szövegmező objektum</param> /// <returns>true - ha helyesen van kitöltve, /// false - egyébként</returns> private bool EHA_Ellenőriz(TextBox tbeha) // Ha nincs kitöltve. if (tbeha.text.length == 0) MessageBox.Show("EHA kód megadása kötelező!"); return false; // Ha betűn és ponton kívül más karaktert is tartalmaz. if (tbeha.text.tochararray().any(c =>!Char.IsLetter(c) && c!= '.')) MessageBox.Show("Csak betű és pont szerepelhet a névben!"); return false; // Megnézzük, szerepel-e már az adatbázisban. var er = from x in dshallgatók.dthallgatók where x.eha == tbeha.text select x.eha; // Ha van találat, akkor hibaüzenet és hamis visszatérési érték. if (er.any()) MessageBox.Show("A megadott EHA kód már szerepel az adatbázisban!"); return false; return true; /// Ellenőrzi az Email szövegmező kitöltését. /// <param name="tbaremail">a szövegmező objektum</param> /// <returns>true - ha helyesen van kitöltve, /// false - egyébként</returns> public static bool Email_Ellenőriz(TextBox tbaremail) // Ellenőrzés reguláris kifejezés segítségével. if (!Regex.IsMatch(tbAREmail.Text, @"^([\w-\.]+)@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.) " +

9]1,3)(\]?)$" )) MessageBox.Show("Az e-mail cím érvénytelen!"); return false; return true; @"(([\w-]+\.)+))([a-za-z]2,4 [0- /// Ellenőrzi az Szak azonosító szövegmező kitöltését. /// <param name="tbazonosító">a szövegmező objektum</param> /// <returns>true - ha helyesen van kitöltve, /// false - egyébként</returns> private bool Azonosító_Ellenőriz(TextBox tbazonosító) // Ha nincs kitöltve. if (tbazonosító.text.length == 0) MessageBox.Show("Azonosító megadása kötelező!"); return false; Int32 Azonosító; // Ha nem Int32. if (!Int32.TryParse(tbAzonosító.Text, out Azonosító)) MessageBox.Show("Az azonosító egész szám kell legyen " + Int32.MinValue + " és " + Int32.MaxValue + " között!"); return false; // Ha az azonosító már létezik az adatbázisban. var er = (from x in dshallgatók.dtszakok where x.azonosító == Azonosító select x.azonosító).any(); if (er) MessageBox.Show("A megadott azonosító már szerepel az adatbázisban!"); return false; return true;

Hallgatói adatok módosítása A főablak osztályában /// Eseménykezelő: kattintás a Hallgatói adatok módosítása menüponton. /// Megjeleníti az űrlapot. /// <param name="sender">hallgatói adatok módosítása menüpont.</param> private void mihallgatómódosítás_click(object sender, RoutedEventArgs e) // Elrejtjük a többi menüponthoz tartozó felületelemeket. dgösszesadat.visibility = Visibility.Hidden; tbemailcímlista.visibility = Visibility.Hidden; uchallgatóadatrögzítés.visibility = Visibility.Hidden; // Megjelenítjük a módosításhoz szükséges űrlapot. uchallgatóadatmódosítás.visibility = Visibility.Visible; A public partial class uchallgatóadatmódosítás : UserControl osztályban: /// A memória beli adatbázis. private dshallgatók dshallgatók; /// A Hallgatói adatok módosítása űrlap láthatósága változott. Ha látható, akkor /// feltölti a szakokat tartalmazó és az EHA kódokat legördülő listákat. /// <param name="sender">a grhallgatómódosítás objektum.</param> private void uchallgatóadatmódosítás_onisvisiblechanged(object sender, DependencyPropertyChangedEventArgs e) if (!this.isvisible) return; // Referencia lekérése a dataset-hez. dshallgatók = Application.Current.Properties["dsHallgatók"] as dshallgatók; // Ha még nincs hallgató megadva, akkor nem módosíthatunk hallgatói adatokat.

if (dshallgatók.dthallgatók.rows.count < 1) MessageBox.Show("Még nincs hallgató megadva!"); return; // A szakok tábláját a kombinált listaablakhoz rendeljük. cbamszak.itemssource = dshallgatók.dtszakok; // A megjelenített információ legyen a szaknév. cbamszak.displaymemberpath = "Szaknév"; // A hallgatók tábláját a kombinált listaablakhoz rendeljük. cbameha.itemssource = dshallgatók.dthallgatók; // A megjelenített információ legyen az EHA kód. cbameha.displaymemberpath = "EHA"; // A legeleső hallgató legyen alapból kiválasztva. cbameha.selectedindex = 0; // A kiválasztott hallgatónak megfelelő szak lesz alapból kiválasztva. /// Eseménykezelő: megváltozott a kiválasztott EHA kód. Kitölti a Név és e-mail /// mezőket a kiválasztott EHA kód alapján. /// <param name="sender">a cbameha objektum.</param> private void cbameha_selectionchanged(object sender, SelectionChangedEventArgs e) try // Referencia a kiválasztott EHA kódnak megfelelő rekordra a // dthallgatók táblában. var drh = (cbameha.selectedvalue as DataRowView).Row as dshallgatók.dthallgatókrow; // Adatmezők kitöltése a rekordban tárolt adatok alapján. tbamnév.text = drh.név; tbamemail.text = drh._e_mail; // A kiválasztott hallgatónak megfelelő szak legyen alapból kiválasztva. for (var i = 0; i < cbamszak.items.count; i++) if ((dshallgatók.dtszakokrow)((datarowview)cbamszak.items[i]).row!= drh.dtszakokrow) continue; cbamszak.selectedindex = i; break; catch (NullReferenceException) /// Eseménykezelő: kattintás a Rögzít gombon. Ellenőrzi a bevitt adatokat, /// és azok helyessége esetén rögzíti azokat a DataSet-ben. /// <param name="sender">a btamrögzít objektum.</param> private void btamrögzít_click(object sender, RoutedEventArgs e) // Kilépés, ha nem sikeres az ellenőrzés. if (!AMEllenőriz()) return; // A kiválasztott hallgató rekordjának referenciája. var drh = (cbameha.selectedvalue as DataRowView).Row

as dshallgatók.dthallgatókrow; // Tároljuk a módosításokat. drh.beginedit(); drh.név = tbamnév.text; drh._e_mail = tbamemail.text; drh.dtszakokrow = (cbamszak.selecteditem as DataRowView).Row as dshallgatók.dtszakokrow; drh.endedit(); MessageBox.Show("Rögzítve!"); /// Ellenőrzi a Hallgatói adatok módosítása űrlapon megadott adatokat. /// <returns>true - ha helyesen van kitöltve, /// false - egyébként</returns> private bool AMEllenőriz() // Ha a tbamnév mező kitöltése nem megfelelő akkor hamis visszatérési érték. // Ha a tbamemail mező kitöltése nem megfelelő akkor hamis visszatérési érték. return uchallgatóadatrögzítés.név_ellenőriz(tbamnév) && uchallgatóadatrögzítés.email_ellenőriz(tbamemail); Házi feladat Készítse el a szakok táblába történő adatfelvitel és módosítás megoldását.