Laboratorul 3 Lucrul cu baze de date relaționate în Visual C#.NET

Similar documents
2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

Versionare - GIT ALIN ZAMFIROIU

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

Metrici LPR interfatare cu Barix Barionet 50 -

Figura x.1 Ecranul de pornire al mediului de dezvoltare

Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Update firmware aparat foto

1. Creaţi un nou proiect de tip Windows Forms Application, cu numele MdiExample.

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

Ghid pentru configurarea şi utilizarea aplicaţiei clicksign Demo

Itemi Sisteme de Operare

2. Setări configurare acces la o cameră web conectată într-un echipament HG8121H cu funcție activă de router

Procesarea Imaginilor

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

Mai bine. Pentru c putem.

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

Ministerul Educaţiei Naţionale şi Cercetării Ştiinţifice Olimpiada de Tehnologia Informaţiei etapa judeţeană 2 aprilie 2016

X-Fit S Manual de utilizare

Proceduri stocate. Crearea procedurilor stocate. Varianta 1 În Management Studio se dă clic pe New Query ca în imaginea de mai jos: Fig.

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Baza de date: tabele, date. Componentele unei B.D.: tabele, constrangeri, relatii. Entitati ale unei B.D.: formulare, interogari, rapoarte

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

Subiecte Clasa a VI-a

APLICAŢIE INFORMATICĂ PENTRU PREGĂTIREA MISIUNILOR DE NIVEL TACTIC

Propuneri pentru teme de licență

Documentaţie Tehnică

Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

MICROSOFT ACCESS 2007 (DE CĂUTAT???)

Creare baza de data Deschidem aplicaţia Microsoft Access. Lansarea în execuţie a programului se face urmând calea:

Olimpiad«Estonia, 2003

Laboratorul 5 Lucrul cu baze de date în Visual Basic.NET

Modalitǎţi de clasificare a datelor cantitative

Lucrarea nr.1. Crearea unui document Word

1 Vasile Violeta Ion Popescu Avram Maria Câmpuri în tabel

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

Laboratorul 2 Problemă:

Mecanismul de decontare a cererilor de plata

Aplicație de generare a UFI. Ghidul utilizatorului

Modulul 5 Baze de date

PROIECT. La Baze de date. Evidența activității pentru o firmă IT. Îndrumător: ș. l. dr. ing. Mirela Danubianu. Efectuat de: Grigoriev Sergiu gr.

Auditul financiar la IMM-uri: de la limitare la oportunitate

Actualizarea firmware-ului pentru aparatul foto digital SLR

Proiect. Construirea interfetei

UNIVERSITATEA ŞTEFAN CEL MARE SUCEAVA

UTILIZAREA FOILOR DE CALCUL TABELAR - EXCEL

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

Reţele Neuronale Artificiale în MATLAB

Ce pot face pe hi5? Organizare si facilitati. Pagina de Home

Aplicaţia nr. 1. Proiectarea unei aplicaţii în LabWindows/CVI

După efectuarea operaţiilor dorite, calculatorul trebuie închis. Pentru oprirea corectă a sistemului de operare va trebui să folosim butonul

Semnare digitală configurări și proceduri de lucru Manual de utilizare

Ghid de utilizare a Calculatorului valorii U

Excel Advanced. Curriculum. Școala Informală de IT. Educație Informală S.A.

Ghid de pregătire pentru certificarea IC3 Global Standard 4

NEC. Ghid de rezervări

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

MANUAL DE UTILIZARE. Pentru prima utilizare, vă rugăm să apăsați și mențineți apăsată tasta " " pentru a porni ceasul.

CHAMPIONS LEAGUE 2017 SPONSOR:

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

Nu găseşti pe nimeni care să te ajute să transporţi comenzile voluminoase?

MODULUL 5.1. BAZELE UTILIZĂRII APLICAŢIILOR PENTRU PREZENTĂRI ELECTRONICE; APLICAŢIA IMPRESS DIN OPENOFFICE

Capitolul IF.02. Structurarea bazelor de date

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

Curs PowerPoint Lectia 3 Lectia 3 Formatare text si imagini

Universitatea George Bariţiu, Braşov

Managementul referinţelor cu

Proceduri de analizã a datelor

ISBN-13:

FORȚA Femei Ocupate, Resursă pentru o Țară Activă POSDRU/144/6.3/S/ Suport de curs OPERATOR INTRODUCERE, VALIDARE SI PRELUCRARE DATE MODULUL 5

CERERI SELECT PE O TABELA

Laboratorul 4 Dezvoltarea unei aplicații ASP.NET cu C#

Calculatoare Numerice II Interfaţarea unui dispozitiv de teleghidare radio cu portul paralel (MGSH Machine Guidance SHell) -proiect-

Editorul Power Point

Mods euro truck simulator 2 harta romaniei by elyxir. Mods euro truck simulator 2 harta romaniei by elyxir.zip

SISTEME DE OPERARE WINDOWS

[{CYCLE NOCYCLE}] [{CACHE

Ghid de utilizare a platformei elearning din cadrul portalului

Macrocomenzi. Figura 1. Personalizarea barei de meniuri. Se va afișa fereastra din figura 2. Figura 2. Includerea tab ului Developer.

Presto! PageManager pentru scanere Kodak

Baze de date distribuite și mobile

TEHNOLOGII INFORMAŢIONALE PENTRU AFACERI

SGBD Access 2010: Query

După efectuarea operaţiilor dorite, calculatorul trebuie închis. Pentru oprirea corectă a sistemului de operare va trebui să folosim butonul

CAIETUL DE SARCINI Organizare evenimente. VS/2014/0442 Euro network supporting innovation for green jobs GREENET

1. Ce este Mobility Tool+ şi la ce foloseşte?

R O M Â N I A CURTEA CONSTITUŢIONALĂ

5.1 Definirea datelor în SQL

Proiectarea Sistemelor Software Complexe

3. Realizarea prezentărilor

Metoda BACKTRACKING. prof. Jiduc Gabriel

Displaying data from databases using different ASP.NET controls

Serviciul Declaraţia Rapidă. (ghidul utilizatorului)

MANUAL UTILIZARE PORTAL ONRC SERVICIUL RECOM ONLINE

Noţiuni introductive privind pachetul software OrCAD

Ghidul utilizatorului

Proiectarea bazelor de date # 11. PL/SQL Funcții în PL/SQL (partea a II-a) Adrian Runceanu

HTML Reference Prof. Marius Măciucă

Transcription:

Laboratorul 3 Lucrul cu baze de date relaționate în Visual C#.NET Ce ne propunem astăzi? În acest laborator ne propunem să implementăm în Visual C#.NET o aplicație destinată unui cabinet medical de radiologie, care va trebui să păstreze o evidență a pacienților și a imaginilor radiologice ale acestora. Aplicația va permite adăugarea și vizualizarea tuturor imaginilor radiologice ale unui pacient. Toate aceste date vor fi păstrate într-o bază de date relaționată. Aplicația va opera cu datele dintr-o bază de date care conține două tabele relaționate (tabelele Pacienti și Radiografii). Pe fereastra principală va fi afișată sub formă tabelară o listă a tuturor pacienților care au efectuat consultații în cadrul cabinetului medical. Se va prevedea posibilitatea de căutare a pacienților după nume. Operațiile de adăugare de pacienți noi sau de modificare a datelor pacienților existenți se vor efectua direct în controlul tabelar (DataGridView). Pentru fiecare pacient se vor putea adăuga imagini radiologice care vor putea fi apoi vizualizate sub formă de miniaturi într-o listă. La click pe o miniatură, imaginea radiologică se va încărca la dimensiune completă într-un control de tip PictureBox, iar celelalte detalii vor fi afișate într-o casetă text (Figura 1). Figura 1. Interfața aplicației pentru cabinete medicale de radiologie Mai pe larg, vom proceda astfel Baza de date cu care vom lucra va fi de tip SQL Server și poate fi creată direct din Visual Studio (vă va fi totuși mai ușor dacă aveți instalat SQL Server Management Studio). În panoul Server Explorer dați click dreapta pe nodul Data Connections și creați o noua bază de date SQL Server (Figura 2). 1

Laborator 3 MTP Figura 2. Crearea unei noi baze de date. În fereastra dialog care se va deschide selectați serverul SQL și introduceți numele noii baze de date (Figura 3). Figura 3. Alegerea numelui bazei de date Se poate întâmpla ca modificările efectuate asupra structurii bazei de date să nu fie vizibile în panoul Server Explorer decât după comanda refresh. Baza de date nu conține niciun tabel, astfel că vom adăuga două tabele noi (vezi Figura 4). Figura 4. Adăugarea unui tabel nou Cele două tabele pe care le vom adăuga sunt: Pacienti și Radiografii. Structurile lor sunt prezentate în Figura 5, respectiv Figura 6. 2

Lucrul cu baze de date relaționate în Visual C#.NET Figura 5. Structura tabelului Pacienti După definirea în acest fel a structurii fiecărui tabel se va da comanda Update (plasată în colțul stânga-sus al ferestrei) apoi, în fereastra dialog care se va deschide, comanda Update Database. Figura 7. Structura tabelului Radiografii Restricția de tip Foreign Key aplicată câmpului CNP impune relaționarea celor două tabele în sensul în care unei înregistrări din tabelul Pacienti (identificată prin CNP) îi poate corespunde oricâte înregistrări din tabelul Radiografii. Cele două script-uri pentru crearea tabelelor sunt expuse în continuare: CREATE TABLE [dbo].[pacienti] ( [CNP] NCHAR(13) NOT NULL PRIMARY KEY, [Nume] VARCHAR(50) NOT NULL, [Adresa] VARCHAR(50) NULL ) CREATE TABLE [dbo].[radiografii] ( [Id] INT IDENTITY (1,1) PRIMARY KEY, [CNP] NCHAR(13) NOT NULL FOREIGN KEY REFERENCES Pacienti(CNP), 3

Laborator 3 MTP ) [Imagine] VARCHAR(100) NOT NULL, [Data] DATETIME NOT NULL, [Diagnostic] VARCHAR(100) NOT NULL, [Comentarii] VARCHAR(255) NULL Legarea aplicației la baza de date Putem asigura legarea aplicației la baza de date fără a scrie nicio linie de cod urmând pașii descriși în continuare. În Visual Studio se selectează din fereastra flotantă Data Sources comanda Add New Data Source. Se configurează o nouă conexiune la o bază de date. Se alege o nouă conexiune la Microsoft SQL Server, apoi se indică baza de date creată anterior (Figura 8). Figura 8. Alegerea bazei de date În continuare, se parcurge wizard-ul până la dialogul Choose your database objects, în care vom selecta ambele tabele ale bazei de date (Figura 9). 4

Lucrul cu baze de date relaționate în Visual C#.NET Figura 9. Selectarea obiectelor pe care dorim să le includem în DataSource. După finalizarea wizardului, se poate observa în fereastra Data Sources că tabelul Radiografii este listat atât ca nod independent, cât și ca nod fiu al tabelului Pacienti, deoarece există o relație părinte-copil între cele două (Figura 10). Figura 10. Fereastra Data Sources. Dacă la comanda Add New Data Source ați optat ca sursa datelor să fie Microsoft SQL Server Database File, veți fi informați că baza de date este un fișier local și veți fi întrebați dacă vreți să o adăugați la proiect (Figura 11). Dacă selectați Yes, baza de date va fi inclusă în proiect și va apărea în fereastra Project Explorer, iar la fiecare compilare a proiectului baza de date va fi copiată în directorul care conține fișierul executabil. Dacă selectați No, atunci aplicația va lucra cu baza de date aflată într-o locație fixă. Dacă la întrebare ați ales răspunsul Yes, atunci, pentru a evita problemele de sincronizare a datelor, selectați numele bazei de date (Pacienti.mdf) în Solution Explorer și selectați pentru proprietatea Copy to Output Directory valoarea Copy if newer. 5

Laborator 3 MTP Figura 11. Dialogul pentru adăugarea bazei de date la proiectul curent După ce am creat sursa de date putem construi extrem de ușor aplicații pentru lucrul cu baza de date. Trebuie doar să efectuăm operații drag and drop cu obiectele din fereastra Data Sources pe un formular. Putem facem click pe un tabel din Data Sources apoi drag-and-drop pe un formular iar Visual C# va crea automat controalele BindingNavigator, DataGridView împreună cu alte controale și componente pentru afișarea datelor din tabel. Datele din tabel pot fi afișate în mod tabelar (control DataGridView) sau detaliat (datele din fiecare câmp sunt afișate în controale separate). Modul de afișare poate fi ales din meniul ce va fi afișat la click pe un tabel din fereastra Data Sources (Figura 12). Figura 12. Setarea modului de afișare a datelor dintr-un tabel În fereastra DataSource vom alege tabelul Pacienti (vizualizare tabelară) și îl vom trage peste formular (drag-and-drop), apoi vom face același lucru pentru tabelul Radiografii (vizualizare tabelară), cel afișat ca nod fiu al tabelului Pacienti. Împreună cu cele două controale de tip DataGridView vor fi adăugate automat pe formular un control de tip BindingNavigator și o serie de componente utile pentru lucrul cu datele din cele două tabele. În acest moment se poate rula aplicația, putându-se observa legătura dintre cele două tabele ale bazei de date: la selectarea unui pacient din controlul pacientidatagridview în controlul radiografiidatagridview vor fi afișate numai radiografiile asociate pacientului selectat. După aceasta vom șterge de pe formular controlul pacientibindingnavigator (nu avem nevoie de el) și controlul radiografiidatagridview (avem nevoie doar de componentele create odată cu acesta: radiografiibindingsource și radiografiitableadapter). În final, pentru interacțiunea cu baza de date, vor rămâne pe formular următoarele controale și componente: pacientidatagridview pacientidataset pacientibindingsource pacientitableadapter tableadaptermanager radiografiibindingsource radiografiitableadapter. 6

Lucrul cu baze de date relaționate în Visual C#.NET Reamintim faptul că atât operația de adăugare a unui pacient cât și cea de modificare a datelor acestuia se vor efectua direct din controlul pacientidatagridview. Iată o scurtă descriere a rolului pe care îl are fiecare tip de control/componentă utilizat pentru operarea cu datele din baza de date: Un obiect DataSet reprezintă o întreagă bază de date. Acesta conține obiecte de tip DataTable care reprezintă tabelele din baza de date. Fiecare obiect DataTable conține obiecte DataRow care reprezintă înregistrările din baza de date, iar fiecare obiect DataRow reprezintă câte o coloană a unei înregistrări. Obiectele de tip TableAdapter sunt utilizate pentru comunicația dintre aplicație (DataSet) și o bază de date. Acestea oferă metode pentru efectuarea operațiilor asupra bazei de date. Obiectele TableAdapter mai sunt utilizate pentru a trimite date actualizate de la aplicația curentă înapoi la baza de date. TableAdapterManager reprezintă o componentă nouă începând cu Visual Studio 2008 și oferă funcții de salvare a datelor în tabele relaționate. Un obiect BindingSource încapsulează toate datele din DataSet și oferă funcții pentru controlul acestora din cadrul programului. BindingNavigator oferă o interfață grafică pentru ca utilizatorul să poată controla BindingSource. În mod implicit, controlul de tip DataGridView permite adăugarea, modificarea și ștergerea înregistrărilor. Totuși, pentru ca aceste modificări efectuate asupra datelor din control să fie reflectate și la nivelul bazei de date este nevoie de salvarea acestora. Codul asociat cu comanda Salvează modificări este următorul. this.validate(); this.pacientibindingsource.endedit(); this.tableadaptermanager.updateall(this.pacientidataset); Afișarea imaginilor și crearea dinamică a controalelor Pentru a putea afișa sub formă miniaturală imaginile radiologice asociate unui pacient va trebui să utilizăm un control container de tip FlowLayoutPanel și o modalitate de creare dinamică a unor controale de tip PictureBox, câte unul pentru fiecare imagine radiologică. Crearea dinamică a controalelor este folosită în special atunci când nu avem cum să știm cu exactitate numărul de controale de care vom avea nevoie pe timpul rulării aplicației. Pentru controalele componente ale containerului FlowLayoutPanel nu trebuie precizată poziția, deoarece acest container distribuie automat controalele componente, în ordine, fie pe orizontală, fie pe verticală. Iată un exemplu de creare dinamică a unui control și de adăugare a unui handler de eveniment (procedură de tratare a unui eveniment). PictureBox mypict; mypict = new PictureBox(); //Setarea proprietatilor controlului: mypict.name = "numecontrol"; mypict.setbounds(0, 0, latimecontrol, inaltimecontrol); mypict.backcolor = Color.Black; mypict.sizemode = PictureBoxSizeMode.Zoom; mypict.image = Bitmap.FromFile(numeFisier); //Adaugarea controlului nou creat la colectia de controale a containerului: flowlayoutpanel1.controls.add(mypict); //Adaugarea unui handler pentru evenimentul Click: mypict.click += mypict_click; 7

Laborator 3 MTP Procedura eveniment mypict_click va fi creată automat la crearea handlerului pentru evenimentul Click (vezi secvența de cod anterioară), imediat după tastarea operatorului +=, și va avea următoarea formă: void mypict_click(object sender, EventArgs e) { } Parametrul sender poate oferi informații despre controlul PictureBox pentru care a fost apelat: PictureBox mypict = (PictureBox)sender; Accesul la datele din tabelul Radiografii se face astfel: // parcurgerea tuturor radiografiilor unui pacient foreach (DataRowView drv in radiografiibindingsource.list) { data = drv["data"]; // obtinerea valorii din campul 'Data' //... } Controlul container FlowLayoutPanel permite adăugarea automată a unor bare de derulare în cazul în care conținutul acestuia depășește marginile controlului container (proprietatea AutoScroll setată pe true). Același mecanism va fi utilizat și în cazul afișării imaginii radiologice la dimensiune completă (un control PictureBox în interiorul unui control container de tip Panel). Afișarea imaginilor sub formă de miniatură se face prin dimensionarea controlului PictureBox la lățimea și înălțimea dorite, apoi prin setarea proprietății SizeMode la valoarea Zoom. Astfel, imaginea încărcată în controlul PictureBox va fi afișată astfel încât să fie cuprinsă în întregime pe suprafața controlului, indiferent de dimensiunile acestuia (dacă imaginea are dimensiuni mai mari decât controlul, atunci aceasta va fi micșorată la dimensiunile controlului, iar dacă imaginea are dimensiuni mai mici decât controlul, atunci aceasta va fi mărită la dimensiunile controlului). Afișarea imaginii radiologice la dimensiune completă (împreună cu celelalte detalii, vezi Figura 1) se va face la click pe una dintre imaginile miniaturale. Imaginea miniaturală selectată își va schimba aspectul, producând aceeași impresie precum un buton apăsat, prin setarea proprietății BorderStyle la valorile BorderStyle.None sau BorderStyle.Fixed3d. Pentru ca o imagine să fie afișată la dimensiunile ei normale, vom seta proprietatea SizeMode a controlului PictureBox la valoarea AutoSize. După cum am amintit la început, aplicația va prevedea posibilitatea adăugării unei imagini radiologice noi pentru un pacient. La apăsarea butonului corespunzător se va deschide o fereastră dialog în care utilizatorul va putea indica toate detaliile asociate imaginii radiologice (Figura 13). Câmpul CNP-ul va fi precompletat, valoarea acestuia putând fi obținută astfel: string cnp = ((DataRowView)pacientiBindingSource.Current)["CNP"]; Figura 13. Adăugarea detaliilor unei radiografii 8

Lucrul cu baze de date relaționate în Visual C#.NET Salvarea datelor La apăsarea butonul OK va trebui ca în tabelul Radiografii să fie adăugată o nouă înregistrare. La operația de adăugare ne vom folosi de componenta radiografiitableadapter. // Adaugarea datelor radiografiitableadapter.insert(cnp, imagine, data, diagnostic, comentarii); // Salvarea datelor tableadaptermanager.updateall(pacientidataset); // Reincarcarea datelor radiografiitableadapter.fill(pacientidataset.radiografii); Metoda Insert() a obiectului de tip TableAdapter acceptă ca parametri valorile care să fie introduse în câmpurile noii înregistrări. Acești parametri trebuie indicați în ordinea în care apar câmpurile din tabel și trebuie să aibă același tip de date pe care îl au câmpurile. Căutarea unui pacient Cea mai simplă modalitate de efectuare a căutării unui pacient din baza de date este setarea corespunzătoare a proprietății Filter a unei componente de tip BindingSource. Pentru anularea filtrului de căutare se va apela metoda RemoveFilter() a componentei de tip BindingSource. Accesul restricționat la datele aplicației Considerăm că datele din aplicația de radiografie sunt date confidențiale, astfel că accesul la acestea ar trebui să fie protejat prin parolă. În mod obligatoriu, accesul în aplicația de radiografie se va face prin autentificarea utilizatorului. În acest sens se va crea un nou formular de autentificare (vezi Figura 14). Figura 14. Fereastra de autentificare a utilizatorilor în aplicația de Radiografie, înainte și după autentificare Pentru acest formular se vor seta proprietățile MaximizeBox și MinimizeBox pe false, iar proprietatea FormBorderStyle la valoarea FormBorderStyle.FixedDialog. Pentru crearea și utilizarea acestei ferestre trebuie precizate câteva lucruri. 9

Laborator 3 MTP 1. Pentru afișarea ferestrei de autentificare înaintea ferestrei principale a aplicației, instanțiați și deschideți fereastra în handlerul evenimentului Load al ferestrei principale: FormLogin f = new FormLogin(); if (f.showdialog() == DialogResult.Cancel) this.close(); 2. Controlul TextBox asociat parolei va trebui să ascundă textul introdus prin setarea proprietății PasswordChar a acestuia. 3. Dacă s-a apăsat butonul OK, iar numele utilizatorului și parola de acces sunt corecte, atunci cele două casete text și butoanele OK și Cancel vor fi dezactivate, trecându-se la pasul următor 4. Fereastra va utiliza o componentă Timer și un control de tip ProgressBar (indică grafic progresul unei operații). Se vor utiliza proprietățile Minimum (0), Maximum (20) și Value (inițial având valoarea 0). Se dorește ca, la autentificarea cu succes a utilizatorului, controlul ProgressBar să se umple treptat, indicând posibile operații efectuate în fundal (inițializări diverse, încărcare de date etc.) 5. Pentru componenta Timer va fi setată proprietatea Interval la valoarea 100. Aceasta indică numărul de milisecunde scurs între generarea a două evenimente Tick. La autentificarea utilizatorului, dacă numele utilizatorului și parola au fost introduse corect, se va activa componenta Timer (metoda Start() a acesteia), iar din acest moment, la fiecare 100 ms va fi generat câte un eveniment Tick. Handlerul acestui eveniment poate fi utilizat pentru a indica operații care trebuie efectuate periodic, cu o anumită temporizare. În cazul nostru, operația aceasta este cea de incrementare a valorii controlului ProgressBar, până la atingerea valorii maxime, situație în care componenta Timer va fi dezactivată (metoda Stop() a acesteia), fereastra de autentificare va fi închisă, iar fereastra principală a aplicației de radiografie va fi afișată. 6. Pentru ca fereastra de autentificare să se comporte precum o fereastră dialog, trebuie să putem folosi valoarea returnată de metoda ShowDialog() a acesteia. În acest sens setați proprietățile AcceptButton și CancelButton ale formularului. Pentru părăsirea ferestrei puteți seta proprietatea DialogResult a formularului, acest lucru având ca efect și închiderea formularului. this.dialogresult = DialogResult.OK; Cu ce ne-am ales? Prin aplicația dezvoltată în cadrul laboratorului de astăzi am reușit să ne familiarizăm cu utilizarea bazelor de date relaționate, să creăm dinamic controale și să le gestionăm cu ajutorul controalelor container. Bibliografie [1] Visual C# Resources, http://msdn.microsoft.com/enus/vstudio/hh341490%28v=msdn.10%29.aspx 10