Documente Academic
Documente Profesional
Documente Cultură
Manual ASP PDF
Manual ASP PDF
Programarea
WEB cu
Microsoft
.NET ASP.NET
I. PRINCIPII GENERALE ALE PROIECTRII INTERFEELOR WEB ............................ 5
I.1. INTRODUCERE ........................................................................................................................................ 5
I.2. REALIZAREA INTERFEELOR WEB UTILIZND LIMBAJUL DE MARCARE HTML ..................................... 6
I.2.1. Ce este HTML ? ................................................................................................................... 6
I.2.2. Structura unui document HTML .......................................................................................... 7
I.2.3. Elemente HTML avansate .................................................................................................... 8
I.2.3.1 Tabele............................................................................................................................................. 8
I.2.3.2 Cadre .............................................................................................................................................. 9
I.2.3.2.1 Cadre interne .......................................................................................................................... 10
I.2.3.2.2 Deschiderea documentelor n alte cadre ................................................................................. 11
I.2.3.3 Layere........................................................................................................................................... 12
I.2.3.4 Formulare..................................................................................................................................... 12
I.2.4. Evaluare............................................................................................................................. 16
I.3. UTILIZAREA TEHNICII CSS PENTRU FORMATAREA DOCUMENTELOR WEB ........................................... 19
I.3.1. Ce este un stil? ................................................................................................................... 19
I.3.2. Definiii de stil.................................................................................................................... 20
I.3.2.1 Definiii de stil inline .................................................................................................................... 21
I.3.2.2 Definiii de stil ncapsulate (interne) ......................................................................................... 21
I.3.2.3 Definiii de stil extern .................................................................................................................. 23
I.3.3. Stiluri n cascad ............................................................................................................... 24
I.3.4. Clase de stiluri ................................................................................................................... 24
I.3.5. Stiluri identificator............................................................................................................. 25
I.3.6. Pseudoclase i pseudoelemente.......................................................................................... 26
I.3.7. Stiluri pentru liste............................................................................................................... 28
I.3.8. Casete n CSS ..................................................................................................................... 30
I.3.9. Poziionare n CSS ............................................................................................................. 31
I.3.10. Notaii i uniti de msur................................................................................................ 32
I.3.11. Evaluare............................................................................................................................. 34
II. MEDIUL DE LUCRU VISUAL WEB DEVELOPER EXPRESS 2008 ........................... 36
II.1. MEDIUL DE LUCRU ............................................................................................................................... 36
II.2. CUM MANEVRM PANOURILE .............................................................................................................. 37
II.3. MENIUL VIEW ...................................................................................................................................... 38
II.4. PAGINA DE START ................................................................................................................................ 38
II.5. PUBLICAREA UNUI SITE WEB ................................................................................................................ 38
II.6. COMPILAREA DINAMIC A SITE-ULUI ................................................................................................... 39
II.7. WEB SITE/WEB PROJECT ...................................................................................................................... 39
II.8. CREAREA UNUI SITE WEB ..................................................................................................................... 40
II.9. DESPRE OPIUNEA LOCATION( FILE SYSTEM, HTTP, FTP).................................................................. 41
II.10. CREAREA I UTILIZAREA DIRECTOARELOR........................................................................................... 42
II.11. EDITAREA PAGINILOR .......................................................................................................................... 42
II.12. SCHIMBAREA PROPRIETILOR ............................................................................................................ 43
II.13. SALVAREA MODIFICRILOR ................................................................................................................. 43
II.14. DESPRE FIIERELE COD ........................................................................................................................ 43
II.15. VIZUALIZAREA PAGINILOR NTR-UN BROWSER WEB ........................................................................... 44
II.16. MASTER PAGES .................................................................................................................................... 44
II.17. SERVERE WEB N VISUAL WEB DEVELOPER ........................................................................................ 45
II.18. ASP.NET DEVELOPMENT SERVER ...................................................................................................... 45
II.19. RULAREA SERVERULUI INTEGRAT ....................................................................................................... 46
II.20. SECURITATE N ASP.NET DEVELOPMENT SERVER ............................................................................. 46
III. LIMBAJUL DE SCRIPTING SERVER-SIDE ASP.NET............................................... 47
III.1. STRUCTURA UNEI PAGINI ASP.NET .................................................................................................... 47
III.1.1. Controale ASP.NET........................................................................................................... 49
III.1.2. Ciclul de via al unei pagini web. .................................................................................... 50
III.1.3. Aplicaii rezolvate.............................................................................................................. 51
III.2. LIMBAJUL C#....................................................................................................................................... 53
III.2.1. Vocabularul limbajului ...................................................................................................... 54
III.2.2. Tipuri de date..................................................................................................................... 55
III.2.3. Operatori ........................................................................................................................... 56
Principii generale ale proiectrii interfeelor Web 3
III.2.4. Conversii............................................................................................................................ 58
III.2.5. Funcii matematice ............................................................................................................ 59
III.2.6. Instruciuni C# ................................................................................................................... 60
III.2.7. Tablouri n C#.................................................................................................................... 67
III.2.8. iruri de caractere ............................................................................................................. 71
III.2.9. Date calendaristice ............................................................................................................ 73
IV. MODELUL CLIENT-SERVER....................................................................................... 75
IV.1. CONTROALE SERVER WEB .................................................................................................................... 75
IV.1.1. Label .................................................................................................................................. 76
IV.1.2. Button, LinkButton, ImageButton....................................................................................... 76
IV.1.3. TextBox .............................................................................................................................. 78
IV.1.4. CheckBox, CheckBoxList ................................................................................................... 79
IV.1.5. RadioButton ....................................................................................................................... 81
IV.1.6. RadioButtonList ................................................................................................................. 82
IV.1.7. BulletList............................................................................................................................ 83
IV.1.8. Image ................................................................................................................................. 84
IV.1.9. DropDownList.................................................................................................................... 84
IV.1.10. HyperLink ........................................................................................................................ 85
IV.1.11. Table, TableRow, TableCell............................................................................................. 86
IV.1.12. MultiView, View............................................................................................................... 87
IV.1.13. FileUpload ....................................................................................................................... 87
IV.1.14. Evaluare........................................................................................................................... 89
IV.2. POST BACK .......................................................................................................................................... 90
IV.2.1. Evaluare............................................................................................................................. 92
IV.3. CONTROALE PENTRU VALIDAREA DATELOR ......................................................................................... 93
IV.3.1. RequiredFieldValidator ..................................................................................................... 93
IV.3.2. RangeValidator .................................................................................................................. 93
IV.3.3. RegularExpressionValidator.............................................................................................. 93
IV.3.4. CompareValidator ............................................................................................................. 93
IV.3.5. CustomValidator ................................................................................................................ 94
IV.3.6. Evaluare............................................................................................................................. 97
IV.4. CONTROALE SERVER WEB AVANSATE. ................................................................................................. 98
IV.4.1. ImageMap .......................................................................................................................... 98
IV.4.2. Ad Rotator........................................................................................................................ 101
IV.4.3. Calendar .......................................................................................................................... 103
IV.4.4. Evaluare........................................................................................................................... 107
IV.5. CONECTAREA LA O SURS DE DATE A CONTROALELOR ...................................................................... 107
IV.6. PSTRAREA INFORMAIILOR NTRE PAGINILE WEB ........................................................................... 109
IV.6.1. Controlul HiddenField..................................................................................................... 110
IV.6.2. ViewState ......................................................................................................................... 111
IV.6.3. Cookies............................................................................................................................. 113
IV.6.4. Query String..................................................................................................................... 114
IV.6.5. Session ............................................................................................................................. 116
IV.6.6. Application....................................................................................................................... 119
IV.6.7. Evaluare........................................................................................................................... 121
V. INTERACIUNEA CU BAZE DE DATE WEB............................................................ 122
V.1. ROLUL BAZELOR DE DATE........................................................................................................ 122
V.2. ACCESAREA BAZELOR DE DATE WEB..................................................................................... 123
V.3. PROIECTAREA BAZELOR DE DATE........................................................................................... 125
V.3.1. Entiti, instane, atribute, identificator unic ................................................................... 125
V.3.2. Relaii ntre entiti .......................................................................................................... 126
V.3.3. Evaluare........................................................................................................................... 127
V.4. CONFIGURAREA BAZEI DE DATE ............................................................................................. 128
V.4.1. Evaluare........................................................................................................................... 136
V.5. ACCESUL DIRECT LA DATE........................................................................................................ 137
V.5.1. Limbajul SQL- Elemente de baz..................................................................................... 137
V.5.2. Comenzi de manipulare a datelor .................................................................................... 140
V.5.2.1 Comanda SELECT.................................................................................................................. 140
V.5.2.2 Gruparea datelor ..................................................................................................................... 143
4
I.1. Introducere
ASP.NET este un set de tehnologii care ne permit crearea de aplicaii web. Este evoluia
de la Microsoft Active Server Pages (ASP), dar beneficiaz de suportul platformei de
dezvoltare Microsoft .NET.
Una dintre cele mai importante caliti ale ASP.NET este timpul redus necesar dezvoltrii
aplicaiilor web. Att tehnologia n sine, ct i uneltele de dezvoltare de aplicaii web de la
Microsoft (cum ar fi Visual Web Developer Express - VWD) reduc considerabil timpul de
dezvoltare al aplicaiilor web fa de alte tehnologii prin simplitatea unui limbaj de
programare managed de genul C# sau Visual Basic .NET, prin colecia bogat de biblioteci
de clase i controale .NET care ofer foarte mult funcionalitate out of the box, prin
orientarea pe construirea de aplicaii web a mediului de dezvoltare VWD.
Chiar dac ASP.NET este gndit pentru a dezvolta aplicaii web foarte complexe prin
faptul c se bazeaz pe .NET, prin faptul c se insist pe un model de dezvoltare OOP,
respectiv pe separarea interfeei de logica aplicaiei totui, este extrem de simplu ca
folosind ASP.NET s dezvoltm aplicaii mici, de genul magazinelor online, al aplicaiilor care
sunt pur i simplu un front-end pentru o baz de date, sau al site-urilor personale.
ASP.NET cuprinde toate tehnologiile necesare pentru a dezvolta o aplicaie web, scriind
cantitatea minim de cod. Limbajele de programare care pot fi utilizate pentru a crea aplicaii
ASP.NET sunt cele suportate de platforma .NET cum sunt Visual Basic .NET i C#, iar o
alt caracteristica importanta a acestor limbaje (nafara faptului c sunt managed) este ca
au fost create avnd n vedere paradigma programrii orientat pe obiecte. Totul din .NET, i
evident din ASP.NET, este un obiect.
Evident, orice site / aplicaie web trebuie s fie gzduit pe un server pentru a putea fi
utilizat. Chiar dac n capitolele viitoare vom discuta mai mult despre instalarea aplicaiilor
ASP.NET, aici a dori s prezint pe scurt variantele de gzduire.
Exist dou variante de a gzdui aplicaiile ASP.NET: (1) intern, pe serverele proprii sau
(2) extern, la o firm care ofer servicii de gzduire (hosting). Decizia trebuie luat innd
cont de civa parametri:
6
Pentru programatorii care doresc s aib un site dezvoltat din pasiune sau pentru a
nva, dar vor totui s l aib instalat undeva, variantele de mai sus devin: (1) acas, pe
Windows XP / Vista cu IIS; (2) la o firm care ofer servicii de hosting gratuit. Da, exist
variante de acest gen, unde v putei instala propriul site ASP.NET fr s v coste nimic
(cutai pe www.live.com asp.net free hosting).
Pe perioada dezvoltrii unei aplicaii web, nu este nevoie ca aceasta s fie gzduit pe
un server IIS, ci poate fi rulat din Visual Web Developer folosind serverul web integrat (vezi
mai multe n capitolul II).
De ce HTML?
1
Hypertext Markup Language n englez
2
tags n englez
Principii generale ale proiectrii interfeelor Web 7
<html>
<head><title>Exemplu</title></head>
<body bgcolor=gray leftmargin="100" topmargin="50">
<body >
<p>Linie orizontala de culoare albastra si grosime 2
<hr color=blue size=3>
<p><font face="Arial" color="red" size="4">
Textul este scris cu fontul "Arial", culoare rosie si marime 7.
<p><i>Am inserat o imagine</i><img src="i7.gif" border=5>
</body>
</body>
</html>
3
container tags n englez
4
empty tags n englez
5
aceste elemente au fost studiate la Tehnologia informaiei i comunicaiilor, n clasa a IX-a
8
<table>
<caption>...</caption>
<TR><TH><TH> ... </TR>
<TR><TD><TD> ... </TR>
...
<TR><TD><TD> ... </TR>
</table>
unde etichetele:
<table></table> delimiteaz tabelul
<tr></tr> delimiteaz o linie a tabelului
<td></td> delimiteaz o celul de date a tabelului
<th></th> delimiteaz o celul a primei linii din tabel (a capului de tabel)
<caption></caption> delimiteaz titlul tabelului
Exemplu: pagina urmtoare conine un tabel cu bordur, avnd culoare stabilit de fundal,
cu celule unite.
<body>
<h3 align=left >tabel</h3>
<table border=2 bgcolor=gray>
<tr><td rowspan=3>HTML</td><td>TABELE</td></tr>
<tr><td>FORMULARE</td><td bgcolor=red>ASP</td></tr>
<tr><td>CADRE</td><td bgcolor=red>Visual Web DevExpress
2008</td>
</tr>
</table></body></html>
I.2.3.2 Cadre 6
Observaii:
Exist browsere care nu suport cadre. Pentru acestea se utilizeaz n interiorul
blocului <frameset> eticheta <noframes> </noframes>. Dac browserul poate s
interpreteze cadre, va ignora ce se gsete n aceast poriune, iar dac nu, materialul
cuprins n zona <noframes> </noframes> va fi singurul care va fi recunoscut i afiat.
Atribut Semnificaie
cols mparte pagina n coloane i are valori exprimate n procente din
dimensiunea ferestrei sau numr de pixeli sau * 7 (spaiul rmas)
rows mparte pagina n rnduri cu aceleai valori ca la cols
bordercolor stabilete culoarea tuturor chenarelor conform modelului #rrggbb 8
frameborder permite/inhib afirea chenarelor cu valorile yes sau no
6
n englez frames
7
dac mai multe elemente din list sunt configurate cu *, atunci spaiu disponibil rmas se va mpri n
mod egal ntre ele
8
culorile pot fi precizate prin nume sau prin construcia #rrggbb, unde r(red), g(green) i b(blue) sunt cifre
hexazecimale
10
Cadrele sunt introduse prin perechea de etichete <frame> </frame>, i suport atributele:
Atribut Semnificaie
name stabilete numele asociat cadrului
src stabilete fiierul sau adresa fiierului introdus
bordercolor stabilete culoarea chenarului cadrului curent conform
noresize dezactiveaz posibilitatea vizitatorului de a redimensiona cadrul
scrolling permite/inhib adaugarea barelor de defilare cu valorile yes no si auto
frameborder stabilete dac se afieaz chenarul cadrului (1-implicit) sau nu (0)
marginheight permite stabilirea distanei n pixeli dintre coninutul unui cadru i
marginile verticale ale cadrului
marginwidth permite stabilirea distanei n pixeli dintre coninutul unui cadru i
marginile orizontale ale cadrului
Exemplu: pagin cu dou cadre verticale n proporia 30% i 70% din limea total.
Cadrul din dreapta este mprit la rndul su n dou cadre orizontale.
<frameset cols="30%,*">
<frame src="f1.html" name="f1">
<frameset rows="40%,*">
<frame src="f2.html" name="f2">
<frame src="f3.html" name="f3">
</frameset >
</frameset>
Un cadru intern este specificat prin intermediul marcajului <iframe> </iframe>. Acesta
definete o arie rectangular n interiorul documentului, arie n care browserul va afia un alt
document HTML complet, inclusiv marginile i barele de derulare. Un cadru intern se
insereaz ntr-o pagin Web n mod asemntor cu o imagine, n interiorul blocului <body>.
Exemplu: pagin cu trei link-uri; acestea deschid paginile referite de ele n cadrul intern din
centrul paginii.
<html>
<head><title>Cadre interne</title></head>
<body>
<a href="t1.html" target="mijloc">link 1</a>
<a href="t2.html" target="mijloc">link 2</a>
<a href="c1.html" target="mijloc">link 3</a>
<center>
<iframe width="60%" height="50%" name="mijloc" src="c2.html">
</iframe>
</center>
</body>
</html >
Principii generale ale proiectrii interfeelor Web 11
Dac ntr-unul dintre documentele deschise n cadru exist link-uri, acestea vor
deschide paginile referite de ele n cadrul curent. Acest comportament se poate schimba prin
plasarea n eticheta <a> a atributului target, care precizeaz numele ferestrei (cadrului)
n care se va ncrca pagina nou referit de legtur, conform sintaxei:
<a href="URL" target="nume_cadru"> </a>
Exemplu: pagin cu dou cadre de tip coloan. n cel din stnga se va deschide
documentul c5.html, iar n cel din dreapta, documentul c7.html. Cel de-al doilea cadru a fost
numit "cadru_dreapta".
c5.html: acest document conine patru link-uri. Prin intermediul atributului target am
specificat faptul c toate legturile ncarc paginile referite n cadrul din dreapta.
c5.html
<body>
<a href="t2.html" target="cadru_dreapta">Tabele</a><br>
<a href="t1.html" target="cadru_dreapta">Cadre</a><br>
<a href="t3.html" target="cadru_dreapta">Formulare</a><br>
<a href="c7.html" target="cadru_dreapta">Home</a><br>
</body>
Atribut Semnificaie
_self ncrcarea noii pagini are loc n cadrul curent
_blank ncrcarea noii pagini are loc ntr-o fereastr nou, anonim
_parent ncrcarea noii pagini are loc n cadrul printe al cadrului curent dac acesta
exist, altfel are loc n fereastra curent a browserului
_top ncrcarea noii pagini are loc n fereastra browserului ce conine cadrul curent
I.2.3.3 Layere 9
Layer-ele sunt elemente HTML asemntoare frame-urilor, adic sunt nite containere
pentru orice altceva ar putea intra ntr-o pagina HTML, dar spre deosebire de acestea, se pot
suprapune (ca i regiunile unei hri). Etichetele <layer></layer> definesc un layer.
Observaii:
Putem avea un layer n alt layer. n acest caz valorile atributelor left i top ale
layer-ului din interior vor indica poziia acestuia fa la marginea de sus i marginea din
stnga a layer-ului care l cuprinde.
Layer-ele sunt acceptate doar de versiunile de la Netscape 4.0 n sus.
I.2.3.4 Formulare
Un formular este un ansamblu de zone active alctuit din casete combinate, cmpuri de
editare, butoane radio, butoane de comand etc. Formularele asigur construirea unor pagini
Web care permit utilizatorilor s introduc informaii i s le transmit serverului. O sesiune
cu o pagin Web ce conine un formular cuprinde dou etape:
9
straturi
Principii generale ale proiectrii interfeelor Web 13
Un formular este definit ntr-un bloc delimitat de etichetele <form> </form>. n interiorul
blocului sunt incluse:
elementele formularului, n care vizitatorul urmeaz s introduc informaii,
un buton de expediere, la apsarea cruia, datele sunt transmise ctre server,
opional, un buton de anulare, prin care utilizatorul poate anula datele nscrise n
formular.
Calea prin care informaiile introduse ntr-un formular pot parveni creatorului paginii
este folosirea comenzii mailto:
<a href="mailto:autor@domeniu.com">
acestuia
submit buton de este butonul a crui activare declaneaz
transmitere operaiunea de trimitere a datelor catre server
reset buton de este butonul a crui activare readuce
resetare controalele din formular la valorile lor iniiale
image imagine permite nlocuirea unui buton submit cu o imagine
specificat
password caset de este similar controlului text, diferenele
text special constnd n faptul c datele introduse de utilizator
vor fi afiate printr-un caracter "masc" (ex: "*")
pentru a oferi un anumit grad de confidenialitate.
Este folosit de obicei la introducerea unor parole.
hidden cmp ascuns permite introducerea n formular a unui cmp
ascuns
file permite expedierea coninutului unui fiier a crui adres URL este
transmis prin intermediul atributului value sau poate fi tastat ntr-
un cmp de editare ce apare odat cu formularul sau poate fi
selectat prin intermediul unei casete de tip File Upload sau
Choose File care apare la apsarea butonului Browse din formular.
<input type="file" name="file">
name permite ataarea unui nume fiecrui element al formularului
value permite atribuirea unei valori iniiale unui element al formularului
checked are rolul de a preseta o anumit opiune, pe care ns utilizatorul o poate
schimba, dac dorete
size seteaz numrul de caractere al csuei de text afiate
maxlength seteaz numrul maxim de caractere al csuei de text afiate
Exemplu: pagina urmtoare conine elemente de mai multe tipuri ncadrate ntr-un
formular unic. Pentru alinierea elementelor utilizate pentru informaiile personale am utilizat
un tabel.
Principii generale ale proiectrii interfeelor Web 15
Atribut Semnificaie
name ataeaz listei un nume (utilizat n perechile name=value) expediat serverului
size precizeaz cte elemente din list sunt vizibile la un moment dat pe ecran,
valoarea implicit fiind 1
multiple permite selectarea mai multor valori din cadrul unei liste de selecie
Atribut Semnificaie
value primete ca valoare un text care va fi expediat serverului n perechea
name=value; dac acest atribut lipsete, atunci ctre server va fi expediat
textul ce urmeaz dup <option>:
<option value=1>Exemplu</option>
<option value=2 selected>Exemplu</option>
I.2.4. Evaluare
1. Care dintre urmtoarele expresii HTML pentru introducerea unui hyperlink, este corect
din punct de vedere sintactic?
a) <a url="http://www.microsoft.com/express/download/default.aspx">Visual
Studio 2008 Express Editions</a>
b) <a name="http://www.microsoft.com/express/download/default.aspx">Visual
Studio 2008 Express Editions</a>
c) <a href="http://www.microsoft.com/express/download/default.aspx">Visual
Studio 2008 Express Editions </a>
d) <a>http://www.microsoft.com/express/download/default.aspx </a>
5. Secvena :
<frameset cols=20%,*>
<frame src="A.html">
<frameset rows=40%,*>
<frame src="B.html">
<frame src="C.html"> a b c d
</frameset>
</frameset>
are ca rezultat :
6. Cte cadre sunt create prin secvena de cod HTML de mai jos?
<frameset rows="60%,*">
<frame src="Despre.html" name="titlu" id="titlu" scrolling="No" noresize>
<frameset cols="150,*">
<frame src="Frame.html" name="continut" id="continut" scrolling="Auto">
<frame name="main">
</frameset>
</frameset>
a) 2 b) 5 c) 3 d) 4
a) "opt=Informatica" c) "inf=Informatica"
b) "opt=inf" d) "radio=inf"
<option>optiunea3
<option selected>optiunea4
</select>
9. Pentru a grupa un numr de butoane radio, acestea trebuie s aib aceeai valoare
pentru atributul:
a) type b) value c) id d) name
a) o list cu 4 elemente
b) 2 liste imbricate cu cte 2 elemente fiecare
c) 2 liste neimbricate cu cte 2 elemente fiecare
d) 4 liste
12. Scriei codul HTML care s afieze cadrele de mai jos. Imaginile afiate sunt distincte i
nu sunt neaprat identice cu cele din exemplu.
Formulare
I.3. Utilizarea tehnicii CSS 10 pentru formatarea documentelor Web
De ce CSS?
Urmtorul segment de cod definete proprietile font, font-size, color i text-align pentru
nivelele de titlu H1, H2 i H3:
H1,H2,H3 {font-family:Arial,Garamond;text-align:center} 11
H1 {font-size:18px;color:red;background-color:gray}
H2 {font-size:16px;color:blue}
10
Cascading Style Sheets n englez
11
n scrierea definiiei unui stil este posibil s grupm selectorii n liste, separai prin virgul
20
H3 {font-size:14px;color:blue}
La nivel de element 12: stilurile sunt incluse ca atribute n cadrul etichetelor HTML din
document. Aceasta nseamn c ele vor afecta doar elementul asupra cruia sunt aplicate.
Este o modalitate mai puin utilizat, deoarece contrazice principiul general al stilurilor, acela
de a simplifica i de a face mai lizibil codul documentului HTML.
ncapsulate 13: stilurile sunt incluse n documentul asupra cruia se aplic, i anume n
seciunea <head> a documentului, prin utilizarea marcajului <style>.
Legate 14: stilurile sunt definite n fiiere separate de documentul HTML. Documentul
face apel la foaia de stiluri prin intermediul etichetei <link>. Avantajul folosirii foilor de stiluri
externe este dublu. Pe de-o parte, ele se pot aplica la nivelul mai multor documente HTML,
realiznd astfel o legtur de stil ntre ele, lucru deosebit de util la construirea unui site. Pe
de alt parte, acelai document poate folosi foi de stiluri diferite, oferind vizitatorului
posibilitatea de a opta la un moment dat, pentru unul sau altul dintre ele, n funcie de
propriile preferine.
<html>
<head>
V <style>
H1 {color: #008000; font-weight: bold}
P {font-family: Arial; color: #800080; font-size: 14px} ncapsulate
</style>
</head>
<body>
</body>
12
inline n englez
13
embedded n englez
14
linked n englez
Principii generale ale proiectrii interfeelor Web 21
</html>
Spre deosebire de stilurile ncapsulate i de foile de stiluri externe, stilurile inline fac
parte chiar din corpul documentului HTML. Ele se aplic prin folosirea atributului style n
asociere cu etichetele HTML standard.
Definiiile de stil inline se aplic numai asupra elementelor incluse ntre etichetele care
au asociat atributul style. Din acest motiv, dac dorim s repetm n alt loc din cuprinsul
documentului aceleai definiii de stil, ele vor trebui scrise din nou, ncrcnd astfel
documentul HTML. Totui, utilitatea stilurilor inline este aceea c fiind definite chiar n
cuprinsul documentului, definiiile lor sunt prioritare fa de cele din stilurile ncapsulate sau
externe.
Exemplu: pagina urmtoare conine o definiie de stil pentru al II-lea titlu de nivel 3 15
care nu se aplic i celorlalte titluri de acelai nivel.
Crearea unui astfel de stil se realizeaz folosind eticheta <style> </style>. Eticheta de
stil este plasat n antetul documentului adic n seciunea <head>.
15
textele cuprinse ntre etichetele <H3> </H3>
22
Exemplu: pagina conine o definiie de stil care realizeaz afiarea tuturor titlurilor de
nivel 1 cu caractere bold i culoare gri. Textele incluse ntre etichetele <p> </p> vor fi afiate
cu fontul arial, de mrime 12 i culoare violet. De asemenea, este creat un stil "stil_text"
care poate fi aplicat oricrui text. Prin intermediul su, textul este afiat cu caractere de
dimensiuni mai mari i culoare roie.
Atunci cnd lucrai cu documente HTML deja existente, crora dorii s le aplicai stiluri
inline, este recomandat s folosii etichetele <div> i <span>. Acestea v permit s aplicai
stilurile fr a afecta codul HTML deja existent sau aspectul paginii n browserele care nu
suport stiluri.
Eticheta <div> funcioneaz asemntor cu eticheta <p>, marcnd un ntreg bloc de
coninut, dar fr a genera linii albe ntre paragrafe.
Principii generale ale proiectrii interfeelor Web 23
O foaie de stiluri este un fiier text care conine reguli de stil definite n aceeai manier ca la
stilurile incluse n pagin. Odat creat o foaie de stiluri, ea trebuie salvat cu extensia .css.
Apelul foilor de stiluri se poate realiza n dou moduri:
folosind eticheta <link>
folosind funcia @import
Metoda importului (@import) este puin mai lent, fiind posibil s dureze o secund,
dou, pn se ncarc foaia de stil, timp n care coninutul este afiat fr formatarea
designer-ului.
Cel mai folosit mod de apelare a unei foi de stiluri este cu ajutorul etichetei <LINK>
conform urmtoarei sintaxe:
stil.css
body{background-image:url(i4.gif);
background-repeat:repeat-x;background-color:gray;}
h2{color:yellow}
.semafor{color:red;Font-Family:Arial Black;background-color:yellow}
<head>
<link rel="stylesheet" href="stil.css"></head>
<body topmargin=50>
<h2>Referirea unei foi de stil externe</h2>
<P>Pentru acest document am folosit un fisier de tip <span class=semafor>
foaie de stil</span> in interiorul caruia am definit 3 stiluri:
<ul>
<li>pentru corpul documentului
<li>pentru titlurile de nivel 2
<li>un stil pentru punerea in evidenta a unor pasaje de text, stil numit <span
class=semafor>semafor</span></li></ul>
</body>
16
i adresa relativ, dac este necesar
24
O regul de stil poate s-i mreasc prioritatea dac este nsoit de declaraia
"!important":
P {font-size:12pt!important; font-style:italic }
Dac ne referim la "care dintre cele 3 definiii de stil este mai bun", standarde WEB indic:
utilizarea foilor .css pentru definirea caracteristicilor care se aplic la formatarea prii
comune a tuturor paginilor unui document
utilizarea stilurilor ncapsulate pentru definirea caracteristicilor care se aplic la formatarea
unei anumite pagini;
utilizarea stilurilor inline pentru definirea caracteristicilor care se aplic la formatarea unui
anumit element.
<style>
all.ftext{text-align:left; color:red;}
</style>
Cuvntul standard "all" aflat n faa clasei de stiluri "ftext" indic faptul c aceast
clas este aplicabil tuturor blocurilor de text, atunci cnd este necesar. Practic clasa de
stiluri "ftext" poate fi asociat tuturor tagurilor HTML care opereaz cu text (ca de exemplu:
H2, H3, P, DIV, etc...) utiliznd n interiorul fiecrui tag vizat o referire explicit la aceast
clas:
Principii generale ale proiectrii interfeelor Web 25
<tag class=ftext>
Dac dorim s aplicm aceast clas de stiluri unui titlu de nivel 2, atunci scriem:
<H2 class="ftext"> Acest header este aliniat la stanga si are culoarea rosie </H2>
Dup cum s-a vzut, pentru apelarea unei clase de stiluri n vederea aplicrii sale
elementului tag curent se folosete atributul "class", avnd ca valoare numele clasei de stil.
mpreun cu specificaia "all" din definirea clasei de stiluri, atributul "class" devine un atribut
universal, adic va putea fi asociat tuturor tagurilor HTML crora li se poate aplica.
Dac dorim ca o clas de stiluri s fie aplicabil numai pentru anumite elemente ale
documentului (spre exemplu pentru paragrafele de text desemnate prin marcajul de
paragraf "p"), atunci n construcia clasei va aprea acest element (de exemplu "p.ftext").
Atribut Semnificaie
:link descrie starea normal a unei legturi
:visited descrie o legtur vizitat
:hover descrierea aspectul legturii cnd aceasta primete focusul
:active descrie starea activ a unei legturi
:focus descrie o legtur selectat
17
italice
Principii generale ale proiectrii interfeelor Web 27
Exemplu: pagina urmtoare conine o list ordonat care utilizeaz ca marcatori literele mari
ale alfabetului englez
Principii generale ale proiectrii interfeelor Web 29
list-style-image
n afara simbolurilor de marcaj prestabilite cunoscute de browser pot fi folosite i
imagini prin comanda CSS list-style-image. Imaginile sunt introduse prin adresa url().
Exemplu: pagina urmtoare conine o list ordonat folosind ca marcaj imaginea i4.gif.
Exemplu: pagina urmtoare conine un meniu structurat ca o list i stilizat folosind CSS.
Pentru a crea un sistem de navigare bazat pe o list neordonat 18, mai inti se creeaz lista,
plasnd fiecare legatur ntr-un element <li>. Apoi, se ncadreaz textul cu <div> i i se
asociaz un id corespunztor.
18
marcat cu ajutorul tagului <ul>
30
19
margin n englez
20
border n englez
21
padding n englez
Principii generale ale proiectrii interfeelor Web 31
Att poziionarea absolut ct i cea relativ folosesc proprietile left i top exprimate n px
(pixeli), in (inci), pt (puncte), cm (centimetri).
Poziionarea absolut plaseaz obiectul n pagin exact n locaia data de left i top.
Astfel poate fi creat un element liber fa de celelalte din pagina. Obiectul poate fi orice, de
exemplu text sau imagine.
Poziionarea tridimensional
Culori
Atributul culoare pentru un obiect poate fi specificat printr-un cuvnt cheie (aqua, black, blue,
fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white si yellow ) sau
prin intermediul unei specificaii numerice RGB. Acestea sunt luate din paleta VGA
Windows. Specificarea unei culori n forma hexazecimal RGB se prefixeaz cu caracterul #
i conine ase cifre hexazecimale.
URL 23 este soluia aleas de World Wide Web Consortium, pentru specificarea unei resurse
(unui site sau a unei pagini) n Internet. Sintaxa general este:
<protocol>://<nume_DNS>/<nume_local>
unde
protocol este protocolul folosit (de cele mai multe ori HTTP),
nume_DNS este numele domeniului pe care se afl resursa,
nume_local este format din calea i numele resursei de pe discul local.
22
Mrimea celorlalte caractere este ajustat n funcie de acesta
23
Uniform Resource Locator
34
I.3.11. Evaluare
3. Cum definim o bordur dimensionat astfel: top border = 10 px; bottom border = 5 px; left
border = 20 px; right border = 1px?
a) border-width:10px 1px 5px 20px
b) border-width:10px 5px 20px 1px
c) border-width:5px 20px 10px 1px
d) border-width:10px 20px 5px 1px
4. Care din urmtoarele variante definete un model de stil aplicabil tuturor elementelor h3
dintr-un document?
a) <h3 style="...">
b) <style> h3{..} </style>
c) <style> .h3{..} </style>
d) <style> #h3{..} </style>
9. Completai sursa HTML de mai jos astfel nct listele definite s apar cu mai multe tipuri
de marcaje, ca n figur.
Solution Explorer/
Database Explorer
Properties window
24
debug n englez
25
.NET FRAMEWORK 3.5
26
un Master Page este un formular WEB standard care acioneaz ca un tipar pentru paginile unui site
Mediul de lucru Visual Web Developer Express 2008 37
Toolbox: cnd deschidei o pagin sau alt item pentru editare, Toolbox v ofer
instrumentele ce v permit adugarea de noi componente 27 paginii.
Design Surface: este panoul de editare a paginilor .
Solution Explorer/Database Explorer: Fiecare site Web pe care l creai este organizat
ca un grup de foldere care apare n Solution Explorer. Orice baz de date pe care o
creai pentru site-ul dumneavoastr apare n Database Explorer. Pentru comutarea ntre
cele dou programe Explorer se folosete tabul din josul panoului.
Properties: afieaz proprietile asociate obiectului sau paginii cu care se lucreaz.
Aa cum arat figura de mai sus, bara de titlu a unui panou conine trei butoane
intitulate Window Position, Auto Hide i Close. Selectnd Window Position putei accesa
urmtoarele opiuni ale meniului n cascad :
Floating: tranform panoul ntr-o fereastr flotant care se poate muta i redimensiona.
Dockable: ancoreaz panoul.
Tabbed Document: mut panoul n zona de editare, identificat printr-un tab n partea
sa superioar. Accesarea tab-ului face panoul vizibil. Pentru a reancora panoul n
fereastra programului se d click dreapta pe tab i se alege Dockable.
Auto Hide: convertete panourile deschise n panouri ascunse de-a lungul marginii
programului.
Hide: ascunde panoul.
27
controale
38
Pagina de start apare de fiecare dat cnd deschidei Visual Web Developer. Sub
Recent Projects vei observa o list cu site-urile Web la care ai lucrat recent. Pentru a
deschide unul dintre site-uri selectaii numele.
Pagina de start nu conine nimic din ce este
necesar pentru a construi un site, ci doar link-
uri ctre cri electronice online gratuite i
MSDN Library for Visual Studio Express
Editions. Dup ce ai creat sau ai deschis un
site Web, pagina de start dispare. Dac v
rzgndii i vrei s aducei pagina de start
napoi pe ecran trebuie s alegei, ViewOther
Windows Start Page din meniul View.
Construcia unui site pe propriul calculator e doar primul pas. Dac dorii ca acesta s
poat fi accesat de public trebuie s obinei un domeniu i apoi s publicai site-ul pe un
server aflat la adresa domeniul. Compania care v asigur spaiu pentru publicarea site-ului
este de obicei numit hosting service sau hosting provider. Serviciile de hosting care suport
tehnologiile specifice pe care le folosete Visual Web Developer se numesc ASP.NET 29 2.0
Hosters. Dac site-ul are i o baz de date n spate, atunci vei avea nevoie de un serviciu
de hosting care suport ASP.NET 2.0 i SQL Server 2005.
28
numite i ferestre pentru c pot fi flotante
29
ASP.NET este o tehnologie Microsoft pentru crearea de aplicaii web i servicii web.
Mediul de lucru Visual Web Developer Express 2008 39
Observaii:
Exist variante de hosting gratuit, unde v putei instala propriul site ASP.NET fr
s v coste nimic (cutai pe www.live.com asp.netfree hosting).
Visual Web Developer Express dispune de dou variante diferite de a crea un site web:
Web Site (File -> New Web Site)
Web Application Project.
30
un .dll
31
timp de creare.
40
unui build.
Observaii:
Dac ne referim la "care dintre cele 2 variante este mai bun (Web Site sau Web
Application Project)" recomandm ca pentru aplicaiile cu mult cod i o durat de
implementare mare s se foloseasc Web Application Project, iar pentru cele mici Web
Site.
32
Protocol de Transfer al Hypertext-ului
33
Protocol de Transfer al Fiierelor
34
Internet Information Services, n englez
35
n mod grafic
42
Pentru a edita o pagin existent n Visual Web Developer, este nevoie mai nti s
deschidei pagina pentru a fi afiat pe suprafaa de Design. Pentru a deschide o pagin, se
face dublu-click pe pictograma ei din Solution Explorer.
S ncercm s editm pagina n mod Design. Vom tasta Prima mea pagin WEB.
36
foldere-lor, n englez
Mediul de lucru Visual Web Developer Express 2008 43
Lista de proprieti a unui obiect ofer cteva opiuni pentru modificarea obiectului, dar
nu pe toate. Orice opiune care se leag de felul n care arat obiectul pe n pagin, poate fi
schimbat i cu ajutorul Style Builder sau CSS.
Observaii:
Apsnd butonul Save All, poi salva toate paginile deschise.
Numele paginii de cod este acelai cu numele paginii .aspx, dar cu o extensie .cs 37
adaugat, cum poate fi vzut n figur.
Mergem n zona de cod (click dreapta pe numele fiierului .aspx i alegem View Code), n
care se implementeaz codul care d caracterul dinamic al paginii i modificm metoda
Page_Load() ca mai jos:
Ce se vede n browser?
Observaii:
Fiierul cod este locul unde se afl partea de programare din spatele paginii Web.
Pentru a vizualiza, ntr-un browser, pagina la care lucrai n modurile de vizualizare Design
sau Source n Visual Web Developer, putei folosi oricare dintre metodele urmtoare:
Click dreapta pe orice spaiu gol din pagina i alegei View in Browser.
Este foarte indicat pentru un site ca paginile sale s aib acelai aspect vizual, adic
s urmreasc acelai tipar 38. ASP.NET, nc de la versiunea 2.0, ne pune la dispoziie
paginile numite Master Pages, care pot fi utilizate ca un template de ctre paginile propriu
zise ale aplicaiei. Master pages nu sunt pagini care au coninut, n sensul c ele nu pot fi
37
n cazul n care ai ales limbajul C#
38
template, n englez
Mediul de lucru Visual Web Developer Express 2008 45
vizualizate direct, ci doar motenite din punct de vedere al interfeei de ctre paginile cu
coninut.
Observaii:
Putei avea probleme cu IIS din urmtoarele motive:
Lucrai cu pagini ASP.NET pe un sistem de operare Windows XP Home Edition, care
nu suporta IIS
Nu vrei s avei un server Web pe computerul dumneavoastr din motive de securitate.
Rularea unui server Web precum IIS presupune civa pai n plus pentru a securiza
serverul i a fi la zi cu ultimele update-uri de securitate.
Dac nu putei folosi IIS ca server web, putei testa paginile dumneavoastr ASP.NET
folosind ASP.NET Development Server. ASP.NET Development Server este integrat n
Visual Web Developer i este un server Web care ruleaz local pe sistemele de operare
Windows, incluznd Windows XP Home Edition. Este construit special pentru a rula pagini
ASP.NET doar pentru calculatorul pe care lucrai. ASP.NET Development Server v pune la
dispoziie o foarte bun i simpl metod de a v testa paginile local nainte de a le publica i
a le pune pe un server IIS.
39
Un calculator conectat la Internet care furnizeaz clienilor, la cerere, diverse resurse web
40
Simple Mail Transfer Protocol
46
ASP.NET Development Server este instalat automat odat cu Visual Web Developer.
Dac lucrai la un site Web bazat pe un sistem de fisiere, Visual Web Developer folosete
automat Visual Web Developer pentru a rula paginile. Implicit, serverul Web utilizeaz un
port aleatoriu. De exemplu, dac testai o pagin numit ex1.aspx, cnd o rulai pe ASP.NET
Development Server, URL-ul poate arta aa:
Dac vrei s rulai ASP.NET Development Server pe un port specific, putei configura
serverul pentru a face asta.
Observaii:
Visual Web Developer nu poate garanta c portul pe care l specificai va putea fi
folosit atunci cand vei rula site-ul dumneavoastr Web.
Observaii:
Chiar dac utilizai ASP.NET Development Server pentru a testa paginile care sunt
funcionale, ar trebui sa le testai din nou dup ce le-ai publicat pe un server Web care
ruleaz IIS.
Limbajul de scripting server-side ASP.NET 47
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
output.InnerText = "Hello World!";
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>First page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p id = "output" runat="server"/>
</div>
</form>
</body>
</html>
48
n exemplul de mai sus, la ncrcarea paginii web, va fi afiat mesajul Hello world.
Codul C# asociat, este scris n cadrul paginii .aspx.
Observaii:
n Visual Web Developer, pentru a separa codul ntr-un fiier separat, la
adugarea unei pagini noi n proiectul curent, se bifeaz opiunea Place code in
separate file:
Aceeai aplicaie poate fi realizat scriind codul C# ntr-un fiier separat avnd
extensia .aspx.cs:
first.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>First Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p id = "output" runat="server"/>
</div>
</form>
</body>
</html>
Limbajul de scripting server-side ASP.NET 49
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
Observaii:
Cu excepia liniei output.InnerText = "Hello World !"; , codul de mai sus este
generat automat de Visual Web Developer.
Orice pagin web .aspx conine o seciune de directive, care descrie modul n care
pagina este procesat de ctre server. Aceast seciune este cuprins ntre tag-urile <%@ i
%> i precizeaz limbajul utilizat pentru scrierea codului i numele fiierului n care este
reinut codul (atunci cnd este cazul):
<%@ Page Language="C#" CodeFile="first.aspx.cs" Inherits="_first"%>
Cnd scriei cod server-side pentru controalele server HTML de tip input (text, button,
checkbox, radioButton) putei folosi proprietatea value pentru a accesa valoarea introdus de
utilizator. Proprietatea InnerText reprezint textul cuprins ntre tag-urile de deschidere
respectiv nchidere ale unui control Html, iar proprietatea InnerHtml reprezint marcajele
Html cuprinse ntre tag-urile de deschidere respectiv nchidere ale controlului Html.
Observaii:
n Visual Web Developer, putei aduga controale standard HTML din modul
design, folosind fereastra ToolBox seciunea HTML.
Controalele server Web ofer mai multe funcionaliti programabile dect cele
HTML. Aceste controale pot corespunde mai multor tag-uri HTML, i pot include cod
javascript. Sunt cuprinse ntre tag-urile <asp> </asp>. De exemplu un control Web pentru
introducerea datelor de ctre utilizator este textbox: <asp:TextBox ID="TextBox1"
runat="server"></asp:TextBox>
Procesul de prelucrare a paginii web de ctre server este mprit n mai multe etape.
Fiecare etap corespunde unui eveniment asociat paginii. Printre cele mai importante
evenimente asociate paginii sunt:
Limbajul de scripting server-side ASP.NET 51
Observaii:
n codul de mai jos + este operator de concatenare a dou iruri de caractere.
Fiierul .aspx.cs:
a, input, iar n codul C# vom modifica atributele bgcolor, align respectiv href, prin intermediul
proprietii Attributes.
Fiierul .aspx.cs
III.2. Limbajul C#
Analog, accesul la datele i funciile membre ale unei clase se realizeaz prin obiect .
proprietate sau obiect . metod.
Un spaiu de nume reprezint o schem logic pentru denumirea tipurilor de date
nrudite. V putei imagina spaiile de nume ca fiind asemntoare cu structura de directoare
i fiiere din Windows. La fel cum ntr-un folder salvai fiiere nrudite, ntr-un spaiu de nume
se gsesc obiecte de tipuri asemntoare. De exemplu clasele HTMLInputTextBox i
HTMLAnchor se vor gsi n acelai spaiu de nume, deoarece ambele reprezint controale
html de interfa.
Rdcina acestei ierarhii de spaii de nume este System. Spaiile de nume pot
conine la rndul lor alte spaii de nume. De exemplu, System conine spaiile de nume
System.Data (unde se gsesc clase pentru conectarea la diverse surse de date) i
System.Web (unde se gsesc toate clasele pentru dezvoltarea unei aplicaii web).
Controalele server Html sunt incluse n spaiul de nume System.Web.UI.HtmlControls, iar
controalele server Web n spaiul System.Web.UI.WebControls. Pentru a avea acces la
clasele dintr-un anumit spaiu de nume, acesta trebuie inclus n aplicaie folosind
instruciunea using:
using System
using System.Web
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
Tipurile ntregi
Tip Descriere Domeniul de valori
byte ntreg pe 8 bii fr semn 0 .. 255
sbyte ntreg pe 8 bii cu semn -128 .. 127
short ntreg pe 16 bii cu semn -32 768 .. 32 767
ushort ntreg pe 16 bii fr semn 0 .. 65 535
int ntreg pe 32 bii cu semn -2 147 483 648 .. 2 147 483 647
uint ntreg pe 32 bii fr semn 0 .. 4 294 967 295
long ntreg pe 64 bii cu semn - 263 .. 263 - 1
ulong ntreg pe 64 bii fr semn 0 .. 264 - 1
Exemplul 3.3
Observaii:
n fiierul .aspx am presupus definit un tag <div> cu atributele id = mainDiv i
runat = server.
56
Tipul caracter
n C# caracterele nu sunt reprezentate pe 8 bii ca n C++, ci pe 16 bii, datorit
folosirii modelului Unicode. Modelul Unicode definete un set de caractere care poate
reprezenta caractere din mai multe limbi. Setul standard de caractere ASCII este un subset
al modelului Unicode. Domeniul de valori al tipului char este [0..65535].
Exemplu:
char c = '';
mainDiv.InnerHtml += c;
Tipul bool
Acest tip reprezint valorile de adevr i fals. n C# acestea sunt definite prin
cuvintele rezervate true i false. Nu este definit nici o regul de conversie ntre tipul bool i
valori ntregi (1 nu este convertit n true i nici 0 n false).
n urmtorul exemplu, n pagina web va fi afiat valoarea true:
bool c = true;
mainDiv.InnerText += c;
III.2.3. Operatori
Operatorii C# sunt cuprini n urmtoarele categorii:
Operatori aritmetici
Operatori de incrementare/decrementare
Operatori relaionali
Operatori logici
Operatori de atribuire
Operatorul condiional
Rezultatul evalurii unei expresii ce conine operatorii relaionali, este de tip bool.
Operatorii logici sunt:
! (negaia logic)
&& (i logic)
| | (sau logic)
Tabelul operatorilor logici este:
p q p && q p||q !p
true true true true false
true false false true false
false true false true true
false false false false true
n cadrul unei expresii logice ce conine operatorul &&, dac primul operand are
valoarea false rezultatul va fi false, indiferent de valoarea celui de al doilea operand. n mod
58
asemntor, ntr-o expresie logic cu operatorul | |, dac primul operand are valoarea true
rezultatul va fi true, indiferent de valoarea celui de al doilea operand. n ambele cazuri, al
doilea operand nu mai este evaluat, codul fiind mai eficient.
Operatorul de atribuire este = , i se folosete ntr-o construcie de forma variabil
= expresie. Se evalueaz expresia, iar rezultatul evalurii este atribuit variabilei. Dac este
cazul se realizeaz i o conversie a valorii ctre tipul variabilei.
Pentru atribuiri se pot folosi i operatorii +=, -=, *=, /=, %=. De exemplu atribuirea x =
x + 1;, poate fi rescris x += 1;
Precedena operatorilor n C#
Prioritate maxim
() [] new sizeof
! ~ (cast) +(unar) ++ --
* / %
+ -
<< >>
< > <= >=
== !=
&&
||
?:
= op=
Prioritate minim
III.2.4. Conversii
n C# exist dou tipuri de conversii numerice:
Limbajul de scripting server-side ASP.NET 59
implicite
explicite.
Conversia implicit se efectueaz doar dac nu este afectat valoarea convertit.
Conversiile implicite sunt prezentate n tabelul urmtor:
Conversie n
din
sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal
short int, long, float, double, decimal
ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
long float, double, decimal
char ushort, int, uint, long, ulong, float, double, decimal
float double
ulong float, double, decimal
Funcia Descriere
Abs (x) Returneaz modulul unei valori numerice
Ceiling (x) Returneaz cel mai apropiat ntreg mai mare sau egal dect
valoarea trimis ca parametru.
Exp (x) Returneaz ex
Floor (x) Returneaz cel mai apropiat ntreg mai mic sau egal dect
valoarea trimis ca parametru.
Log (x) Returneaz logaritmul natural.
Log10(x) Returneaz logaritmul n baza 10.
Max (x, y) Returneaz maximul dintre 2 numere.
Min (x, y) Returneaz minimul dintre 2 numere.
Pow (x, y) Returneaz xy
Round (x, n) Returneaz cel mai apropiat ntreg sau un numr rotunjit cu
un anumit numr de zecimale.
Sqrt (x) Returneaz radicalul numrului trimis ca parametru.
Truncate(x) Returneaz partea ntreag a numrului trimis ca parametru.
Exemplul 3.5
Dac funcia Round este apelat fr cel de al doilea parametru, va returna cel mai
apropiat ntreg fa de valoarea trimis ca parametru. Dac se precizeaz i al doilea
parametru, atunci primul parametru va fi rotunjit la o valoare cu un numr de zecimale
specificat de al doilea parametru.
III.2.6. Instruciuni C#
Instruciuni decizionale.
n limbajul C# exist dou instruciuni decizionale: simpl (if) i multipl (switch).
Limbajul de scripting server-side ASP.NET 61
Figura 3.2
Exemplul 3.7 n urmtorul exemplu sunt calculate rdcinile ecuaiei de gradul II:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Ecuatie gradul II</title></head>
<body>
<form id="form1" runat="server">
<div> a = <input id="nr1" type="text" runat = "server"/><br />
b = <input id="nr2" type="text" runat = "server"/><br />
c = <input id="nr3" type="text" runat = "server"/><br />
<span id = "rezultat" runat = "server" /><br /><br />
<input id="Button1" type="button" value="Calculeaza" runat =
"server" onserverclick = "ecuatie"/>
</div>
</form></body></html>
Fiierul .aspx
Fiierul .aspx.cs
2. Instruciunea decizional multipl switch are urmtoarea sintax:
switch (expresie)
{
case val1: instruciuni1; break;
case val2: instruciuni2; break;
case val3: instruciuni3; break;
..
case valN: instruciuniN; break;
Fiierul .aspx
64
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Switch</title></head>
<body>
<form id="form1" runat="server">
<div>
<input id="nr1" type="text" runat = "server"/>
<select id="operatie" name="operator" runat = "server">
<option value = "1">+</option>
<option value = "2">-</option>
<option value = "3">*</option>
<option value = "4">/</option>
</select>
<input id="nr2" type="text" runat = "server"/> =
<input id="rezultat" readonly="readonly" type="text" runat =
"server"/><br />
<input id="Button1" type="button" value="Calculeaza" runat = "server"
onserverclick="calcul"/><br />
<div id = "tst" runat = "server" />
</div>
</form></body></html>
Fiierul .aspx.cs
Figura 3.3
Instruciuni repetitive
Instruciunile repetitive n C# sunt:
Cu test iniial (while)
Cu test final (do while)
Cu numr cunoscut de pai (for)
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>cmmdc</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Primul numar: <input id="nr1"
type="text" runat = "server"/><br />
Al doilea numar:<input id="nr2" type="text" runat = "server"/><br />
<input id="Button1" type="button" value="Calculeaza" runat = "server"
onserverclick="cmmdc"/><br />
<p id = "rezultat" runat = "server" />
</div>
</form>
</body>
</html>
Fiierul .aspx
a = Convert.ToInt32(nr1.Value);
b = Convert.ToInt32(nr2.Value);
r = a % b;
while (r > 0)
{
a = b;
b = r;
r = a % b;
}
rezultat.InnerText = "cmmdc este: " + b.ToString();
}
}
Fiierul .aspx.cs
Exemplul 3.9
Exemplul urmtor calculeaz suma cifrelor unui numr, folosind instruciunea
repetitiv do while.
public partial class _Default : System.Web.UI.Page
{
protected void suma(object sender, EventArgs e)
{
int n = Convert.ToInt32(nr1.Value), s=0;
do
{
s += n % 10;
n = n / 10;
} while (n > 0);
rezultat.InnerText = "Suma cifrelor este: " + s.ToString();
}
}
Fiierul .aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Suma cifrelor</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Introduceti numarul:
<input id="nr1" type="text" runat = "server"/>
<input id="Button1" type="button" value="Calculeaza" runat = "server"
onserverclick="suma"/><br />
<p id="rezultat" runat = "server" />
</div>
</form>
</body>
</html>
Fiierul .aspx.cs:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Expresie</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="nr1" type="text" runat = "server"/>
<input id="Button1" type="button" value="Calculeaza" runat = "server"
onserverclick = "calcul"/><br />
<p id = "rezultat" runat = "server" />
</div>
</form>
</body>
</html>
Fiierul .aspx
Fiierul .aspx.cs
III.2.7. Tablouri n C#
Aceeai declarare poate fi scris printr-o singur instruciune: int[] v = new int[10];
La declararea tabloului se poate realiza i iniializarea elementelor sale: int[] v= {1,2,3,4 };
68
Pentru a afia elementele tabloului, se pot folosi att instruciunile repetitive clasice,
ct i o instruciune pentru parcurgerea coleciilor de date, numit foreach.
Exemplul 3.10. Afiarea unui tablou folosind instruciunea for.
int[] v = { 1, 2, 3, 4 };
for (int i = 0; i < v.Length; i++)
mainDiv.InnerHtml += v[i] + " ";
Observaii:
Proprietatea Length returneaz numrul de elemente din tablou.
Clasa Array pune la dispoziia programatorului alte cteva metode pentru prelucrarea
vectorilor:
Sort(tablou) sorteaz cresctor elementele din vectorul trimis ca parametru
Exemplu: Array.Sort(w);
Reverse(tablou) inverseaz elementele vectorului trimis ca parametru
Exemplu: Array.Reverse(w);
IndexOf(tablou, valoare) caut o valoare n vector, i returneaz -1 dac nu se
gsete, respectiv poziia pe care se gsete valoarea n vector.
Exemplul 3.15
if ((poz = Array.IndexOf(v, 3)) != -1)
mainDiv.InnerHtml+= "Elementul cautat se gaseste in vector pe pozitia "+poz;
else
mainDiv.InnerHtml += "Elementul cautat nu se gaseste in vector";
Exemplul 3.16 Exemplul urmtor este o pagin web, care prezint modul de utilizare a
vectorilor.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Tablouri</title>
</head>
<body>
<form id="form1" runat="server">
<div id = "mainDiv" runat = "server">
</div>
</form>
</body>
</html>
Fiierul .aspx
Fiierul .aspx.cs
mainDiv.InnerHtml += "<br/>";
//Suma si media aritmetica a elementelor
mainDiv.InnerHtml += "Suma elementelor din vector este: " + v.Sum() + "<br/>";
mainDiv.InnerHtml += "Media elementelor din vector este: " + v.Average() + "<br/>";
//Copierea elementelor unui vector intr-un alt vector
v.CopyTo(w, 0);
mainDiv.InnerHtml += "Elementele vectorului sunt: ";
for (int i = 0; i < w.Length; i++)mainDiv.InnerHtml += w[i] + " ";
mainDiv.InnerHtml += "<br/>";
//Compararea a doi vectori
if (v.Equals(w) == true)
{
mainDiv.InnerHtml += "Cei doi vectori au aceleasi elemente <br/>";
}
else
{
mainDiv.InnerHtml += "Cei doi vectori nu au aceleasi elemente <br/>";
}
//Sortarea elementelor vectorului
w[3] = 5;
Array.Sort(w);
mainDiv.InnerHtml += "Vectorul sortat: ";
foreach (int i in w) mainDiv.InnerHtml += i + " ";
mainDiv.InnerHtml += "<br/>";
//Inversarea elementelor
Array.Reverse(w);
mainDiv.InnerHtml += "Vectorul inversat: ";
for (int i = 0; i < w.Length; i++) mainDiv.InnerHtml += w[i] + " ";
mainDiv.InnerHtml += "<br/>";
Figura 3.4
Exemplul 3.19
mainDiv.InnerHtml += s.Trim() + "<br/>";
mainDiv.InnerHtml += s.TrimEnd() + "<br/>";
mainDiv.InnerHtml += s.TrimStart() + "<br/>";
72
CompareTo() - returneaz valoarea 0 dac irurile sunt egale, o valoare mai mic dect 0
dac irul 1 mai mic dect irul2, i o valoare mai mare ca 0 dac irul 1 este mai mare
dect irul 2.
Exemplul 3.22
int value = s1.CompareTo(s2);
if ( value == 0)
{mainDiv.InnerHtml += "Sirurile sunt egale <br/>";}
else
if (value < 0)
{mainDiv.InnerHtml += s1 + " mai mic decat " + s2 + "<br/>";}
else
{mainDiv.InnerHtml += s1 + " mai mare decat " + s2 + "<br/>";}
5. Operaii cu subiruri.
Extragerea unui subir dintr-un ir este realizat de metoda substring(poziie, lungime)
string s = "Hello World";
mainDiv.InnerHtml += s.Substring(6) + "<br/>";
Va afia pe ecran irul World.
mainDiv.InnerHtml += s.Substring(6,3) + "<br/>";
Va afia pe ecran irul Wor.
Limbajul de scripting server-side ASP.NET 73
Exemplul 3.23
string s = "Hello World", s1 = "He";
if (s.Contains(s1) == true)
{mainDiv.InnerHtml += "Subsirul " + s1 + " se gaseste in sirul " + s + "<br/>";}
else
{mainDiv.InnerHtml += "Subsirul " + s1 + " nu se gaseste in sirul " + s + "<br/>";}
Rezultatul va fi urmtorul:
13.10.2008 22:30:00
14.10.2008 00:00:00
14.10.2008 10:50:23
74
Metodele i proprietile care se aplic unei variabile de tip dat calendaristic sunt:
ToShortDateString() returneaz o dat calendaristic n forma scurt
mainDiv.InnerHtml += d1.ToShortDateString() + "</br>";Afieaz: 14.10.2008
ToLongDateString() returneaz o dat calendaristic n forma desfurat
mainDiv.InnerHtml += d1.ToLongDateString() + "</br>";Afieaz: 14 octombrie 2008
ToShortTimeString() returneaz ora, minutele dintr-o variabil de tip dat calendaristic
mainDiv.InnerHtml += d1.ToShortTimeString() + "</br>"; Afieaz: 22:30
ToLongTimeString() returneaz ora, minutele i secundele dintr-o variabil de tip dat
calendaristic
mainDiv.InnerHtml += d1.ToLongTimeString() + "</br>"; Afieaz: 22:30:00
Day proprietate care returneaz ziua dintr-o dat calendaristic
mainDiv.InnerHtml += d1.Day + "</br>"; Afieaz: 14
Month proprietate care returneaz luna dintr-o dat calendaristic
mainDiv.InnerHtml += d1.Month + "</br>"; Afieaz: 10
Year proprietate care returneaz ziua dintr-o dat calendaristic
mainDiv.InnerHtml += d1.Year + "</br>"; Afieaz: 2008
DayOfYear proprietate care returneaz numrul zilei din cadrul anului
mainDiv.InnerHtml += d1.DayOfYear + "</br>"; Afieaz: 288
DayOfMonth proprietate care returneaz ziua din cadrul sptmnii
mainDiv.InnerHtml += d1.DayOfWeek + "</br>"; Afieaz: Tuesday
Rezultatul va fi urmtorul:
04.09.2008
24.08.2009
Ziua de 24 octombrie 2008 va fi peste 1 an in ziua de Saturday
2. Timpul scurs ntre dou date calendaristice poate fi aflat prin aplicarea urmtoarelor
proprieti diferenei dintre dou date calendaristice: TotalSeconds, TotalMinutes,
TotalHours, TotalDays:
R
Modelul client-server 75
ezultatul va fi: 4
Controalele server web ofer faciliti superioare controalelor server Html. Astfel,
controalele web sunt puternic orientate obiect, permit legarea la diferite surse de date,
detecteaz automat tipul browserului i afiarea pe client va fi optimizat n funcie de
capabilitile acestuia.
Un control web poate fi creat fie n modul design (din fereastra Toolbox), fie n pagina
.aspx folosind tag-urile <asp> </asp>.
<asp:Label ID="Label1" runat="server" Text="Hello world!"></asp:Label>
Controalele web pot rspunde la diferite evenimente. De exemplu, un obiect de tip
button genereaz evenimentul Click atunci cnd utilizatorul apas butonul. n momentul
apariiei unui eveniment, se realizeaz o cerere ctre server, iar datele din pagina web sunt
trimise serverului. Aici se execut codul C# asociat evenimentului, iar rezultatul este trimis
ctre client.
Valorile proprietilor controalelor web pot fi setate prin trei moduri:
n modul design din fereastra Properties
n surs paginii (fiierul .aspx)
prin intermediul codului C# executat pe server
n continuare sunt prezentate cteva dintre cele mai folosite controale web pentru
realizarea interfeei.
76
IV.1.1. Label
Permite afiarea unui ir de caractere n pagina web. Textul este reinut n
proprietatea Text:
<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="Large"
ForeColor="#0066FF" Text="Evenimente butoane">
</asp:Label>
Modificarea valorii proprietii ImageUrl se poate realiza fie n modul design, fie direct
n codul aspx:
<asp:ImageButton ID="ImageButton1" runat="server" Height="27px"
ImageUrl="~/images/button.jpg" onclick="ImageButton1_Click" Width="85px" />
Exemplul 4.1 La apsarea unui dublu click pe controlul de tip button se genereaz
antetul metodei care va conine codul C# care va fi executat la apariia evenimentului Click:
IV.1.3. TextBox
Afieaz o caset de dialog n care utilizatorul poate introduce date. irul de
caractere introdus, este reinut de proprietatea Text. Proprietatea TextMode definete modul
n care utilizatorul poate introduce datele: SingleLine, MultiLine, Password.
Exemplul 4.2 Aplicaia urmtoare permite introducerea unui text, care la apsarea
butonului va fi afiat pe ecran de ctre controlul Label2.
Verificarea dac s-a bifat sau nu caseta, se realizeaz prin intermediul proprietii Checked:
protected void Button1_Click(object sender, EventArgs e)
{
if (CheckBox1.Checked == true)
{
Label1.Text = "Ati selectat checkbox-ul";
}
else
{
Label1.Text = "Nu ati selectat checkbox-ul";
}
}
1. Prin cod:
<asp:CheckBoxList ID="CheckBoxList1" runat="server"
BorderColor="#0066CC"
BorderStyle="Solid" RepeatDirection="Horizontal"
RepeatLayout="Flow">
<asp:ListItem>Buzau</asp:ListItem>
<asp:ListItem>Bucuresti</asp:ListItem>
<asp:ListItem>Craiova</asp:ListItem>
</asp:CheckBoxList>
2. n modul design:
Controlul CheckBoxList are asociat o proprietate numit Items. Items este un vector
care conine valorile din controlul CheckBoxList. La rndul su are proprietatea Count ce
returneaz numrul de valori din list. Fiecare element poate fi accesat prin intermediul unui
indice. n exemplul de mai sus, CheckBoxList.Items[1].Text este irul de caractere
Bucureti. Pentru a verifica dac a fost
bifat o anumit caset, se folosete
proprietatea Selected, care poate avea
valorile True sau False.
Efectul execuiei este urmtorul:
IV.1.5. RadioButton
Afieaz un buton radio. Dintr-un grup de butoane radio, doar unul poate fi selectat la
un moment dat.
Proprietatea Text a acestui control, definete irul de caractere ce apare n dreptul
controlului. Pentru a grupa mai multe butoane radio, se folosete proprietatea GroupName.
Exemplu:
<asp:RadioButton ID="RadioButton1" runat="server" GroupName="stareCivila"
Text="Casatorit" /><br />
<asp:RadioButton ID="RadioButton2" runat="server" GroupName="stareCivila"
Text="Necasatorit" />
Exemplul 4.5 Ca i n cazul controlului CheckBox, verificarea dac s-a bifat sau nu
butonul radio se realizeaz prin intermediul proprietii Checked.
IV.1.6. RadioButtonList
Afieaz un grup de butoane radio. Ca i CheckBoxList, acest control are proprietile
RepeatDirection, RepeatLayout i Items. Pentru fiecare opiune din list se poate asocia o
valoare de tip ir de caractere, prin intermediul atributului value.
Exemplul 4.6 Adugarea de valori n list poate fi realizat n modul design sau prin
intermediul codului din fiierul .aspx.
1. Prin cod:
<asp:RadioButtonList ID="RadioButtonList1"
runat="server"
RepeatDirection="Horizontal" RepeatLayout="Flow">
<asp:ListItem Value="1">Bucuresti</asp:ListItem>
<asp:ListItem Value="2">Buzau</asp:ListItem>
<asp:ListItem Value="3">Craiova</asp:ListItem>
</asp:RadioButtonList>
2. n design mode:
IV.1.7. BulletList
Afieaz o list numerotat. Proprietatea BulletStyle definete tipul de marcator, i
poate avea valorile: NotSet, Numbered, LowerAlpha, UpperAlpha, LowerRoman,
UpperRoman, Disc, Circle, Square.
Proprietatea DisplayMode definete modul n care sunt afiate valorile din list: Text,
HyperLink, LinkButton. n cazul selectrii tipului de afiare ca HyperLink, atributul value
reine adresa http:
IV.1.8. Image
Afieaz o imagine n pagina web. Proprietatea ImageUrl definete calea ctre fiierul
care conine imaginea. Textul afiat de browser atunci cnd user-ul poziioneaz mouse-ul
peste imagine, este reinut de proprietatea AlternateText.
<asp:Image ID="Image1" runat="server" ImageUrl="~/images/movie1.jpeg"
Height="406px" Width="265px" AlternateText="Jaws" />
IV.1.9. DropDownList
Permite selectarea unei opiuni dintr-o list derulant. Ca i celelalte controale
de tip list, DropDownList are proprietile Item i SelectedValue. De asemenea, proprietatea
SelectedItem returneaz obiectul selectat din lista derulant.
Exemplul 4.7 Pagina web urmtoare permite selectarea unui film dintr-o list
derulant, iar la apsarea butonului Submit, n controlul de tip Image este afiat posterul
filmului selectat. Posterele sunt fiiere cu extensia .jpg, care au fost salvate n directorul
images din cadrul proiectului.
Figura 4.10 Fiierele cu imagini adugate n directorul images din cadrul proiectului
Atributul value pentru controlul DropDownList reine numele fiierului care conine
imaginea, iar atributul text reine numele filmului, care va fi folosit pentru proprietatea
AlternateText:
IV.1.10. HyperLink
Este un control folosit pentru afiarea unui hyperlink n pagina web. Are
proprietile Text pentru irul de caractere ce va fi afiat n pagin, respectiv NavigateUrl
pentru adresa http. Modul de deschidere a link-ului n browser, poate fi specificat prin
intermediul proprietii Target, care are valorile: _blank, _parent, _search, _self, _top.
Controlul BulletList are asociat evenimentul Click. Funcia care se execut la apariia
acestui eveniment, are ca parametru un obiect de tipul BulletedListEventArgs cu proprietatea
Index. Valoarea acestei proprieti este indexul opiunii din lista de marcatori care a generat
evenimentul click.
IV.1.13. FileUpload
Permite upload-ul unui fiier pe server-ul web. Afieaz o caset de text mpreun cu
un buton Browse, prin intermediul cruia se poate selecta fiierul dorit. Pentru a realiza
88
efectiv upload-ul, trebuie utilizat un buton (sau alt control) care s conin codul C# pentru
upload.
Controlul FileUpload are urmtoarele metode i proprieti:
Nume Descriere
HasFile Metod care returneaz true sau false dac utilizatorul a
selectat un fiier pentru upload
SaveAs Metod care salveaz fiierul selectat pe server. Are ca
parametru calea destinaie
FileName Proprietate care reine numele fiierului
PostedFile Proprietate care conine informaii despre fiierul upload-at
ContentType Proprietate care returneaz tipul fiierului upload-at
ContentLength Proprietate care returneaz dimensiunea fiierului upload-at.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Untitled Page</title></head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" Width="265px" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click"
PostBackUrl="~/Default.aspx" Text="Upload" /><br
/><br />
<asp:Label ID="Label1" runat="server" Font-Bold="True"></asp:Label>
</div></form></body></html>
Modelul client-server 89
Codul C# care se execut la apsarea butonului Upload este cel care realizeaz
efectiv upload-ul fiierului selectat:
IV.1.14. Evaluare
1. Realizai o pagin web care s conin un test gril cu 5 ntrebri. ntrebrile pot fi cu
un singur rspuns sau cu rspunsuri multiple. La apsarea unui buton numit Punctaj, va fi
afiat n pagin rezultatul testului (la cte ntrebri s-a rspuns corect). La apsarea unui
buton numit Reset, se vor reiniializa variantele de rspuns, i se va terge rezultatul testului
precedent.
Indicaie: Pentru variantele de rspuns corecte se poate folosi proprietatea value a unui
element din CheckBoxList sau RadioButtonList.
2. Modificai pagina web de mai sus, astfel nct dup selectarea unei variante, aceasta
s devin inactiv.
Indicaie: Se va modifica proprietatea enabled.
3. Realizai o pagin web care conine un test gril cu 3 ntrebri i care ndeplinete
urmtoarele condiii:
ntrebrile sunt afiate prin intermediul unui control BulletList , de tip LinkButton.
Variantele de rspuns pentru fiecare ntrebare sunt poziionate ntr-un control de
tip view al unui control multiview.
Rspunsurile sunt cu o singur variant corect, aceasta avnd valoarea 1.
La selectarea unei ntrebri, se afieaz variantele de rspuns corespunztoare.
La apsarea unui buton Punctaj se calculeaz punctajul final, care va fi afiat
prin intermediul unui control Label.
90
4. Realizai un site web care conine 5 pagini web, fiecare avnd cte o ntrebare a unui
test gril. Testul gril va avea ntrebri cu o singur variant de rspuns corect. n fiecare
pagin va exista un hyperlink ctre pagina urmtoare (cu excepia ultimei).
5. Realizai o pagin web care s afieze un formular de introducere a informaiilor
despre un produs: denumire, pre, unitatea de msur, data expirrii, dac i se aplic adaos
comercial sau nu. Pentru data expirrii se va folosi cte un control de tip DropDownList
pentru zi, lun an. Data curent va fi selectat implicit. Valorile pentru DropDownList-ul ce
conine anul, vor fi n intervalul [an_curent, an_curent + 10].
6. Realizai o pagin web care permite utilizatorului s fac upload pentru un fiier de tip
imagine. Fiierul upload-at va fi afiat printr-un control de tip Image.
7. Realizai o pagin web care va afia un calculator capabil s efectueze adunri,
scderi, mpriri, nmuliri, operaia de ridicare la putere, calculul n!. Fiecare tast a
calculatorului va fi un control de tip Button.
Post Back este fenomenul prin care la generarea unui eveniment de ctre utilizator
(client), pagina web este transmis server-ului, unde se poate executa o secven de cod
care s trateze evenimentul respectiv.
Unele controale genereaz automat un post back ctre server. De exemplu controlul
Button genereaz un post back la apsarea butonului. Alte controale nu genereaz un post
back automat. De exemplu, controlul TextBox are un eveniment numit TextChanged. Acesta
este generat de fiecare dat cnd valoarea din caseta de text este modificat. Implicit acest
eveniment nu genereaz un post back. ns, n cazul n care un alt control genereaz un
post back (de exemplu un buton), n momentul executrii codului pe server, este tratat prima
dat evenimentul TextChanged i apoi evenimentul Click al butonului.
Dac proprietatea AutoPostBack are valoarea true, atunci controlul respectiv va
genera automat un post back.
Cnd vom rula pagina, vom constata totui c nu este afiat controlul TextBox.
Pentru a se executa metoda CheckBox1_CheckedCanged, pagina trebuie retrimis
serverului n momentul bifrii checkbox-ului. Serverul trebuie sa execute codul i apoi s
retrimit ctre browser pagina n care textbox-ul este vizibil. De aceea controlul CheckBox
trebuie s genereze aciunea de post back. Pentru aceasta trebuie setat proprietatea
AutoPostBack cu valoarea true.
Figura 4.16 Afiarea imaginii se face la selectarea unei opiuni din controlul DropDownList
Pentru aceasta, vom stabili valoarea true proprietii AutoPostback pentru controlul
DropDownList. Apoi, codul care se executa la apsarea butonului va fi executat la
generarea evenimentului SelectedIndexChanged pentru controlul DropDownList.
Obiectul Page asociat fiecrei pagini web poate fi folosit pentru a verifica dac a
avut loc o aciune de post back, sau este prima ncrcare a paginii. Astfel, proprietatea
IsPostBack are valoarea true dac un control a generat o aciune de post back, i false n
caz contrar.
92
Exemplul 4.14 Pentru a ti cnd s realizm iniializarea valorii din TextBox cu 0, folosim
proprietatea IsPostBack:
IV.2.1. Evaluare
1. S se realizeze o pagin web care conine un test gril, n care ntrebrile sunt replici
celebre din filme, iar variantele de rspuns reprezint un nume de film. La selectarea
rspunsului corect, va fi afiata o imagine care conine poster-ul filmului respectiv. (Iniial
controlul Image are proprietatea visible = false).
2. S se realizeze o pagin web care conine un test gril n care ntrebrile au o
singur variant de rspuns corect. Rezultatul testului va fi afiat prin intermediul unui
control TextBox, pentru care utilizatorul nu poate modifica valoarea. La prima ncrcare a
paginii, rezultatul va avea valoarea 0. La fiecare selectare a unei variante de rspuns, se va
reactualiza valoarea rezultatului.
Modelul client-server 93
IV.3.1. RequiredFieldValidator
Verific dac n caseta de text asociat s-au introdus date de ctre utilizator. Se
folosete pentru formularele de date n care cmpurile sunt obligatorii.
IV.3.2. RangeValidator
Verific dac datele introduse n caseta de text asociat fac parte dintr-un anumit
interval. Proprietile MinimumValue i MaximumValue permit introducerea limitelor
intervalului. Tipul valorilor din interval poate fi specificat prin intermediul proprietii Type.
IV.3.3. RegularExpressionValidator
Se folosete pentru validarea datelor care trebuie s respecte un anumit format, cum
ar fi numere de telefon, adrese de email, etc. Proprietatea ValidationExpression permite
alegerea unei expresii predefinite.
IV.3.4. CompareValidator
Compar valoarea introdus n controlul asociat, cu o valoare predefinit.
Proprietatea ValueToCompare reine aceast valoare. Tipul de comparare este definit de
proprietatea Operator, valorile sale posibile fiind: Equal, NotEqual, GreaterThan,
GreaterThanEqual, LessThan, LessThanEqual, DataTypeCheck. Tipul valorilor comparate
este specificat de proprietatea Type.
94
IV.3.5. CustomValidator
Pe lng aceste controale predefinite, programatorul poate defini reguli proprii de
validare, prin intermediul controlului CustomValidator. Validarea se poate realiza prin
intermediul unei funcii client-side (folosind javaScript), sau la nivel de server.
Exemplul 4.15 Urmtoarea aplicaie folosete controalele prezentate mai sus pentru
validarea datelor introduse de utilizator:
Pentru selectarea oraului s-a folosit un control de tip DropDownList, pentru care
proprietatea AutoPostBack are valoarea true. Astfel, la selectarea unui element din list se
va realiza automat validarea opiunii (fr s se atepte apsarea butonului de submit).
Fiecare element are o valoare asociat prin intermediul proprietii value. (prima opiune are
valoarea 0). Validarea se realizeaz prin intermediul unui control CompareValidator:
La prima ncrcare a paginii, controlul TextBox care permite introducerea unei adrese
web este inactiv. Pentru aceasta, proprietatea Enabled va avea valoarea false. De
asemenea, controlul de tip hyperlink nu va fi vizibil iniial pe ecran, proprietatea sa Visible
avnd valoarea false.
Exemplul 4.16 Controlul de tip CheckBox are proprietatea AutoPostBack = true. Astfel,
la bifarea sau debifarea sa, se va realiza o aciune de post back ctre server, unde se va
executa codul C# corespunztor evenimentului CheckedChanged:
96
Exemplul 4.17 Pentru a verifica dac valoarea introdus pentru URL poate fi o adres
valid, se folosete controlul RegularExpressionValidator.
IV.3.6. Evaluare
Este un control care permite afiarea unei imagini care conine zone speciale numite
hot spots. Cnd utilizatorul apas un click cu mouse-ul ntr-o astfel de regiune se poate
realiza una din urmtoarele aciuni:
controlul trimite pagina napoi ctre server unde se poate executa un anumit
cod (se genereaz un postBack)
utilizatorul este redirectat ctre o alt pagin (hyperlink).
Proprietatea ImageUrl definiete calea ctre fiierul care conine imaginea.
Proprietatea HotSpots este o colecie de obiecte de tip HotSpot. Un obiect HotSpot poate fi
de form circular, rectangular sau poligonal. Orice HotSpot are proprietile:
Nume Descriere
AlternateText Textul care apare cnd user-ul poziioneaz mous-ul peste hot spot
HotSpotMode Poate avea una din valorile: NotSet, None, PostBack, Navigate. Dac
se alege PostBack, la apsarea hotSpot-ului se realizeaz un post
back ctre server. n cazul opiunii Navigate, utilizatorul este
redirectat ctre o alt pagin.
NavigateUrl Reine URL-ul paginii ctre care se realizeaz redirectarea
PostBackValue Definete o valoare care va returnat server-ului n momentul cnd
se realizeaz un post back
Target Definete modul n care este deschis pagina web ctre care se
realizeaz redirectarea
Exemplul 4.18 Judeul Buzu de pe harta din fiierul romania.gif, va avea asociat un
hotSpot de tip circle, judeul Dolj un hotSpot de tip rectangle, iar judeul Timi un hotSpot de
tip polygon.
<asp:ImageMap ID="ImageMap1" runat="server" HotSpotMode="PostBack"
ImageUrl="~/Images/romania.gif" onclick="ImageMap1_Click1">
<asp:CircleHotSpot HotSpotMode="PostBack" AlternateText="Buzau"
PostBackValue="1" Radius="30" Target="_blank" X="545" Y="370" />
<asp:RectangleHotSpot AlternateText="Dolj" Bottom="535"
HotSpotMode="PostBack" Left="236" PostBackValue="2" Right="314"
Target="_blank" Top="480" />
<asp:PolygonHotSpot Coordinates="14,261, 65,339, 100,336, 112,319, 173,315,
165,293" HotSpotMode="PostBack" PostBackValue="3" Target="_blank"
AlternateText="Timis" />
</asp:ImageMap>
Modelul client-server 99
n acest exemplu, fiecare HotSpot genereaz un post back ctre server cu o anumit
valoare. La un click pe hotSpot, se genereaz evenimentul Click pentru controlul ImageMap.
Metoda care se va executa pe server, are un parametru de tip ImageMapEventArgs. Acest
obiect are proprietatea PostBackValue care reine valoarea returnat de hotSpot.
Figura 4.20 Modificarea proprietilor unui obiect HotSpot pentru controlul ImageMap
<html xmlns="http://www.w3.org/1999/xhtml">
<head
runat="server"><title>Buzau</title></head>
<body>
<form id="form1" runat="server">
<div>
<asp:ImageButton ID="ImageButton1"
runat="server" ImageUrl="~/Images/buzau.jpg"/>
</div>
</form>
</body>
</html>
IV.4.2. Ad Rotator
Este un control care afieaz n pagina web o imagine (de obicei un banner de
reclam), pe care user-ul poate da click, fiind redirectat ctre o alt pagin web. La fiecare
ncrcare a paginii web se va fia o alt imagine aleas aleator. Fiierele cu imagini
mpreun cu link-urile de redirect se gsesc ntr-o surs de date, de exemplu un fiier XML.
XML este un standard pentru descrierea de marcaje. Un fiier XML are extensia .xml,
i conine elemente definite de utilizator, ntr-o structur ierarhic. Pentru a aduga un fiier
XML n cadrul proiectului, n fereastra Solution Explorer, se alege opiunea Add New Item,
i apoi XML File.
Pentru a putea fi utilizat ca surs de date pentru controlul adRotator, fiierul XML
trebuie s conin valori pentru urmtoarele proprieti:
Nume Descriere
ImageUrl Calea ctre fiierul care conine imaginea
NavigateUrl URL-ul ctre care se realizeaz redirectarea la un click pe imagine
AlternateText Textul care apare la poziionarea mouse-ului peste imagine
Keyword O categorie pentru reclama, dup care se pot realiza filtrri
Impressions Un numr care reprezint importana reclamei respective. Cu ct
este mai mare, cu att imaginea va fi afiat mai des.
Singura proprietate obligatorie este ImageUrl.
Exemplul 4.20 n urmtorul exemplu, va fi folosit un fiier ads.xml care conine trei
reclame. Proprietile pentru fiecare reclam trebuie cuprinse ntre tag-urile <Ad> i </Ad>.
Tag-ul rdcin pentru fiierul XML este <Advertisements>.
102
Exemplul 4.21 Dup adugarea controlului n pagina web, trebuie aleas sursa de date:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Ad rotator</title></head>
<body>
<form id="form1" runat="server">
<div>
<asp:AdRotator ID="AdRotator1" runat="server" DataSourceID="ads"
Target="_blank" />
<asp:XmlDataSource ID="ads" runat="server"
DataFile="~/App_Data/ads.xml"></asp:XmlDataSource>
</div>
</form></body></html>
n urma execuiei paginii web, va fi afiat random la rencrcarea paginii, una din
imaginile:
IV.4.3. Calendar
Este un control care afieaz n pagina web un calendar, din care utilizatorul poate
alege o dat oarecare. Modul n care utilizatorul poate selecta o dat calendaristic este
definit de proprietatea SelectionMode, care poate avea valorile:
104
Valoare Descriere
Day Utilizatorul poate selecta doar o zi
DayWeek Utilizatorul poate selecta o sptmn
DayWeekMonth Utilizatorul poate selecta o lun
None Selecia unei date este dezactivat
Popularea celor dou DropDown-uri este realizat prin intermediul codului C#.
Metodele monthInit(), respectiv yearInit() folosesc metoda Add aplicat vectorului Items
pentru adugarea de valori n list.
Dup popularea DorpDown-urilor, selectarea lunii i anului ce corespund datei
curente se realizeaz prin modificarea proprietii selected a unui element din list. Pentru a
determina elementul curent, se apeleaz metoda FindByValue pentru vectorul de itemi din
DropDown:
yearCmb.Items.FindByValue(DateTime.Now.Year.ToString()).Selected = true;
monthCmb.Items[DateTime.Now.Month - 1].Selected = true;
Exemplul 4.23
Cele dou controale DropDownList au setat valoarea true pentru proprietatea
AutoPostBack. Astfel la selecia unui element din list, se genereaz un post back ctre
106
IV.4.4. Evaluare
1. Realizai un site web care s conin informaii despre statele uniunii Europene.
Pagina de index va conine o imagine cu harta Europei, iar la un click pe o anumit ar se
va deschide o pagin nou, n care sunt afiate informaiile despre ara selectat. De
asemenea, n pagina principal trebuie s existe o zon de header unde va fi afiat un
banner cu steagul unei ri la fiecare ncrcare a paginii. La un click pe banner se va
deschide pagina de internet oficial a rii respective.
2. Realizai o pagin web care conine un formular de introducere a datelor unui angajat.
Data naterii i data angajrii trebuie s fie alese prin intermediul unui control calendar.
Figura 4.30 Interfaa aplicaiei pentru popularea datelor din controlul ListBox
108
Numele este folosit pentru popularea proprietii Text, iar media pentru popularea
proprietii Value pentru controlul ListBox.
Iniial butonul Selecteaz nu este activ (proprietatea Enabled are valoarea false)
deoarece nu este nici un element n list. De fiecare dat cnd se apas butonul Adaug,
vechile elemente sunt terse din list, i butonul Selecteaz devine activ. La apsarea
acestui buton, pentru elementul selectat din list se afieaz perechea text / value.
ListBox1.DataSource = elevi;
ListBox1.DataBind();
ListBox1.Items[0].Value = "9";
ListBox1.Items[1].Value = "8";
}
switch (RadioButtonList1.SelectedValue)
{
case "1": add(); break;
case "2": listItem(); break;
case "3": vector(); break;
case "4": xml(); break;
}
}
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Hidden</title></head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="+" />
<asp:HiddenField ID="nr" runat="server" />
</div>
</form></body></html>
Modelul client-server 111
Fiierul .aspx.cs
IV.6.2. ViewState
n ASP.Net, toate controalele server web i pstreaz starea ntre dou aciuni de
post back. Acest lucru se realizeaz prin intermediul proprietii EnableViewState, care are
implicit valoarea true.
Exemplul 4.27 De exemplu, dac ntr-o pagin web exist un control TextBox i un
Buton, iar utilizatorul introduce date n caseta de text i apas butonul, se genereaz o
aciune de post back ctre server. n momentul n care server-ul ntoarce rezultatul prelucrrii
ctre browser, controlul TextBox i pstreaz valoarea.
n momentul generrii codului Html de ctre server, se genereaz un control html de
tip <input type=hidden...> , a crui valoare este un ir de caractere ce codific starea
controalelor din pagin:
<input type=hidden name=__VIEWSTATE id=__VIEWSTATE
value=/wEPDwULLTE1OTg1NDYyNDZkZFCFstl/DwSGv81TuCB397Tk5+CJ />
Datele sunt codificate Base64, ceea ce asigur securitatea, dar crete timpul de
ncrcare al paginii.
Programatorul poate aduga valori n obiectul ViewState folosind metoda Add(cheie,
valoare):
112
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>View State</title></head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="__"></asp:Label>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="+" />
</div>
</form></body></html>
Fiierul .aspx.cs
if (ViewState["n"].ToString().Length == 1)
{//dac valoarea este o cifr, se mai adauga un 0
Label1.Text = "0" + ViewState["n"].ToString();
}
else
{
Label1.Text = ViewState["n"].ToString();
}
}
Modelul client-server 113
IV.6.3. Cookies
Un cookies este o secven de text care este salvat pe calculatorul user-ului.
Valorile din cookie sunt perechi de forma cheie/valoare. De obicei, cookie-urile sunt folosite
pentru a reine informaii despre un user, la vizitarea unei pagini web. Cnd user-ul revine pe
un site, informaiile din cookie sunt citite, ajutnd la identificarea rapid a utilizatorului. Pe
lng valori, pentru un cookie se poate stabili durata de via n calculatorul clientului.
Pentru a aduga un cookie, se folosete proprietatea Cookies a obiectului Response.
Aceast proprietate este un vector asociativ, de tip cheie/valoare:
Response.Cookies["cheie"].Value = valoare
Timpul de via al cookie-ului se stabilete prin intermediul proprietii Expires.
Avantajul folosirii cookie-urilor este acela c informaia este disponibil n orice
pagin la revenirea userului n site, dup o anumit perioad. Printre dezavantaje amintim:
nu sunt potrivite pentru a reine date importante
cookie-urile pot fi dezactivate din browser
sunt ncrcate pentru fiecare cerere, ducnd la creterea traficului
Exemplul 4.29
n exemplul urmtor, datele introduse de utilizator ntr-o caset text, sunt salvate ntr-
un cookie. ntr-o a doua pagin web, datele sunt extrase din cookie i afiate prin intermediul
unui control Label.
Pagina Default.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Cookie</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click"
Text="Submit" />
</div>
</form>
</body>
</html>
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e) L
{
a
if (TextBox1.Text.Trim().Length > 0)
{ apsare
Response.Cookies["userName"].Value = TextBox1.Text;
Response.Cookies["userName"].Expires.AddMinutes(10); a
//timpul de viata al cookie-ului este de 10 minute
}
Response.Redirect("Default2.aspx");
}
}
114
Exemplul 4.30
n urmtorul exemplu, datele introduse ntr-o pagin web sunt folosite pentru
construirea unui query string. Acest ir de caractere este de fapt o adres a unei pagini web,
ctre care se va face o redirectare. Datele sunt introduse prin intermediul a dou controale
de tip TextBox, iar la apsarea unui buton se va realiza aciunea de redirect.
n cea de a doua pagin, valorile sunt extrase din query string i afiate prin
intermediul unui control Label.
Codul C# asociat butonului este:
Exem
plul 4.32
if (Request.QueryString["media"].Trim() != null)
{
Label2.Text = "Media:" + Request.Params["media"].ToString();
}
}
}
Exemplul 4.33
Metoda Transfer are un al doilea parametru numit preserveForm, care poate avea
valorile true sau false. n cazul n care parametrul are valoarea true, query string-ul i valorile
controalelor din formularul paginii iniiale, vor putea fi accesate n pagina ctre care se
realizeaz redirect-ul.
Exemplul de mai sus poate fi rescris folosind metoda Server.Transfer astfel:
la apsarea butonului din prima pagin, se apeleaz Server.Transfer pentru a
realiza redirect-ul ctre a doua pagin.
Exemplul 4.34
Exemplul 4.35
Form este un vector asociativ, n care id-ul unui control este cheia, iar valoarea este
reprezentat de datele introduse n controlul respectiv. TextBox1 i TextBox2, reprezint id-
urile controalelor de tip TextBox din prima pagin.
IV.6.5. Session
Obiectul Session este creat pe serverul web la prima accesare a sitului de ctre un
utilizator i rmne n memorie att timp ct utilizatorul rmne conectat la site. Pentru a
aduga un obiect n sesiune, trebuie doar s scriem un cod de genul urmtor:
protected void Button1_Click(object sender, EventArgs e)
{
Session["nume"] = "Hello World!";
}
Modelul client-server 117
Exemplul 4.36
Session este de fapt un dicionar (list de perechi cheie valoare), n care valorile
sunt de tip object. Ceea ce nseamn c la citirea unor valori din sesiune va trebui s
realizm o conversie de tip.
protected void Button2_Click(object sender, EventArgs e)
{
Label1.Text = Session["nume"].ToString();
}
Exemplul 4.37
Odat introdus un obiect n Session, el poate fi accesat din toate paginile aplicaiei,
att timp ct el exist acolo. Programatorul poate elimina obiectul din sesiune, folosind
metoda Remove:
Session.Remove("nume");
n exemplul urmtor, sunt create dou pagini web. Datele introduse n prima pagin,
sunt salvate n sesiune la apsarea unui buton, dup care se realizeaz un redirect ctre
pagina a doua.
Exemplul 4.38
n a doua pagin, datele sunt extrase din sesiune, i afiate prin intermediul unor
controale de tip Label.
if (Session["media"].ToString().Trim() != null)
{ Label2.Text = "Media " + Session["media"].ToString().Trim();
}
}
}
118
Exemplul 4.39
Exemplul 4.40
La accesarea paginii doi prin intermediul meniului, dac utilizatorul nu este logat (n
sesiune nu exist cheia username), se va afia un mesaj de eroare.
Modelul client-server 119
IV.6.6. Application
Obiectul Application se comport n mod identic cu Session, diferena fiind c el este
specific ntregii aplicaii (tuturor utilizatorilor care acceseaz un site web la un moment dat),
i nu unei anumite sesiuni. Cu alte cuvinte odat introdus un obiect n Application,va putea fi
accesat din orice loc al site-ului i de ctre toi utilizatorii acestuia.
Pentru a reine o valoare n obiectul Application, se folosete metoda Set(cheie,
valoare), iar pentru extragerea unei valori metoda Get(cheie):
Application.Set("counter", 4);
int x = Convert.ToInt32(Application.Get("counter").ToString());
n exemplul urmtor, ne propunem s realizm o aplicaie care numr ci utilizatori
acceseaz site-ul web la un moment dat, i s afim aceast valoare n fiecare pagin.
Pentru aceasta vom aduga n proiect un fiier numit Global.asax.
120
Aici se poate scrie cod C# care se va executa la crearea sau distrugerea obiectelor
Application, respectiv Session.
n cazul aplicaiei noastre, la crearea obiectului Application se va reine valoarea 0
ntr-un element numit counter:
Exemplul 4.43
Obiectul Session este creat de fiecare dat cnd un utilizator acceseaz prima dat
site-ul. De aceea, vom incrementa valoarea elementului counter la crearea obiectului
Session. Decrementarea valorii counter se va realiza la distrugerea obiectului Session
(cnd user-ul va nchide pagina).
Exemplul 4.44
La ncrcarea unei noi pagini, valoarea din elementul counter va fi incrementat, iar
la nchiderea unei pagini, decrementat.
IV.6.7. Evaluare
1. S se realizeze un site web care conine un test gril cu 5 ntrebri. Fiecare
ntrebare va fi afiat ntr-o pagin separat. Fiecare pagin va avea un hyperlink ctre
pagina precedent (cu excepia primei pagini) respectiv ctre pagina urmtoare. La
navigarea ntre pagini se va pstra rspunsul ales de utilizator la afiarea precedent.
Ultima pagin va avea un link ctre o pagin de rezultat, n care se va afia rezultatul
testului.
2. S se modifice aplicaia anterioar astfel nct s se foloseasc o singur
pagin. Enunul ntrebrilor i variantele de rspuns vor fi reinute prin intermediul vectorilor.
Navigarea ntre pagini se va realiza n dou moduri:
Cu ajutorul controalelor de tip Button. Indicele paginii curente va fi reinut n
sesiune
Cu ajutorul controalelor de tip hyperlink. Indicele paginii urmtoare, respectiv
precedente va trimis printr-un query string. De exemplu pentru pagina 2 link-
urile vor fi de forma: Default.aspx?pagina=1, respectiv Default.aspx?pagina=3
122
3. Realizai o pagin web care pentru fiecare user afieaz prin intermediul unui
cookie urmtoarele informaii:
data ultimei accesri a paginii.
tipul de browser folosit la ultima accesare.
ip-ul calculatorului de la care s-a accesat ultima dat pagina.
Indicaie. Pentru a afla ip-ul respectiv tipul de browser, se folosete obiectul Request :
Request.ServerVariables("REMOTE_ADDR") pentru ip
Request.ServerVariables("HTTP_USER_AGENT") pentru tipul de
browser
Astzi, cele mai multe dintre activitile noastre zilnice necesit accesarea i
actualizarea informaiei dintr-o baz de date: consultarea unui catalog de produse, lansarea
unei comenzi, cumprarea unui bilet de avion sau verificarea evidenei plilor.
De cele mai multe ori, informaiile pe care le dorim sunt obinute prin prelucrarea unor
seturi de date relaionate. De exemplu, o baz de date tipic pentru un magazin on-line
conine o list de clieni, o list de produse i o list de vnzri bazat pe informaiile din
primele dou liste.
Aceste informaii sunt descrise cel mai bine utiliznd un model relaional, model ce
presupune divizarea informaiilor n seturi consistente i definirea relaiilor dintre aceste
seturi. Modelul relaional st la baza tuturor produselor moderne axate pe baze de date,
incluznd aici SQL Server, Oracle,MySQL i chiar Microsoft Access.
INTERACIUNEA CU BAZE DE DATE WEB 123
Din punct de vedere tehnic este posibil s organizm datele n tabele i s pstrm
aceste tabele pe harddisc n unul sau mai multe fiiere (eventual folosind un standard XML).
Aceast abordare nu este ns foarte flexibil.
O aplicaie web are nevoie de un sistem complet de gestionare a bazelor de date
(RDBMS 41) cum ar SQL Server, care s asigure gestionarea infrastructurii, performan i
fiabilitate. De exemplu, un astfel de sistem poate furniza date pentru mai muli utilizatori
simultan, elimin datele incorecte i poate executa la un moment dat un grup de comenzi
care sunt vzute ca o singur unitate 42.
Aplicaiile ASP.NET care utilizeaz baze de date pot fi grupate dup tipul operaiilor
efectuate. De exemplu:
site-uri comerciale - pstreaz cataloagele cu produse, gestioneaz comenzile,
clienii i trazaciile i inventariaz informaiile aflate ntr-un aranjament imens de
tabele relaionate;
Accesarea unei baze de date ntr-o aplicaie web are un scenariu complet diferit fa
de accesarea unei baze de date prin intermediul unei aplicaii desktop client-server.
In aplicaiile tradiionale cu baze de date, clienii stabilesc o conexiune cu baza de
date i menin aceast conexiune deschis pn la ncheierea executrii aplicaiei.
Conexiunile deschise necesit alocarea de resurse sistem. Atunci cnd meninem
mai multe conexiuni deschise server-ul de baze de date va rspunde mai lent la comenzile
clienilor ntruct cele mai multe baze de date permit un numr foarte mic de conexiuni
concurente.
O aplicaie Web trebuie s asigure n principal furnizarea rezultatelor ctre mai muli
utilizatori simultan, operaie influenat de resursele de memorie i de conexiunile la baza de
date. Dac aplicaia este proiectat astfel nct s menin conexiunea deschis chiar i
41
n limba englez Relational Database Management System
42
Aceast operaie se numete tranzacie.
43
(n limba englez Uniform Resource Locator) - adres pentru localizarea resurselor
124
pentru cteva secunde n plus pentru un utilizator, atunci ceilali utilizatori vor observa cu
siguran ntrzierea. Concurena este una dintre problemele pe care aplicaia trebuie s le
gestioneze pentru c modificrile fcute de utilizatorii conectai simultan pot conduce la
inconsistena datelor.
O alt problem pe care trebuie s o rezolve o aplicaie Web care lucreaz cu baze
de date este cea a modului de deconectare de la Internet. Dup cum tim HTTP 44 este un
protocol static. Atunci cnd un utilizator emite o cerere printr-o aplicaie ASP.NET, serverul
Web proceseaz codul, returneaz paginile HTML i nchide conexiunea, astfel nct
utilizatorul are senzaia c lucreaz cu o aplicaie care ruleaz continuu dei el beneficiaz
doar de pagini statice. Aplicaia ASP.NET trebuie s efectueze operaia solicitat de utilizator
printr-o singur cerere.
ADO.NET permite i lucrul n stil conectat dar i lucrul n stil deconectat, aplicaiile
conectndu-se la server-ul de baze de date numai pentru extragerea i actualizarea datelor.
Acest lucru permite reducerea numrului de conexiuni deschise simultan la sursele de
date.
ADO.NET ofer instrumentele de utilizare i reprezentare XML pentru transferul
datelor ntre aplicaii i surse de date, furniznd o reprezentare comun a datelor, ceea ce
permite accesarea datelor din diferite surse de diferite tipuri i prelucrarea lor ca entiti, fr
s fie necesar s convertim explicit datele n format XML sau invers.
Aceste caracteristici sunt determinante n stabilirea beneficiilor furnizate de
ADO.NET:
Interoperabilitate. ADO.NET poate interaciona uor cu orice component care
suport XML.
Durabilitate. ADO.NET permite dezvoltarea arhitecturii unei aplicaii datorit modului
de transfer a datelor ntre nivelele arhitecturale.
Programabilitate.ADO.NET simplific programarea pentru diferite task-uri cum ar fi
comenzile SQL, ceea ce duce la o cretere a productivitii i la o scdere a
numrului de erori.
Performan. Nu mai este necesar conversia explicit a datelor la transferul ntre
aplicaii, fapt care duce la creterea performanelor acestora.
Accesibilitate. Utilizarea arhitecturii deconectate permite accesul simultan la acelai
set de date. Reducerea numrului de conexiuni deschise simultan determin
utilizarea optim a resurselor.
44
(n limba englez Hypertext Transfer Protocol) este metoda cea mai des utilizat pentru
accesarea informaiilor pstrate pe servere World Wide Web
INTERACIUNEA CU BAZE DE DATE WEB 125
Prima etap n realizarea unei aplicaii ce utilizeaz baze de date este analiza datelor
i realizarea unui model conceptual corespunztor.
Aceast etap este foarte important pentru c pe baza ei se realizeaz baza de
date. Este mult mai simplu s modificm un model conceptual dect s modificm o baz de
date n care au fost adugate deja date.
Crearea unui model conceptual presupune o reprezentare grafic a datelor i a
relaiilor dintre acestea i este independent de implementare. Reprezentarea datelor i
relaiilor ntr-o form convenional se numete diagram entiti-relaii sau ERD (Entity
Relationship Diagram).
figura V-1
O entitate poate fi privit ca o clas de obiecte pentru care exist mai multe instane.
O instan a unei entiti reprezint un obiect, un eveniment particular, din clasa de
obiecte care formeaz entitatea. De exemplu clasa 9C, profil real, specializare matematic-
informatic reprezint o instan a entitii CLASA.
Atunci cnd se precizeaz o instan a unei entiti se specific descrierea acelui
obiect. Un atribut este o caracteristic a unei entiti. n cadrul diagramei entiti-relaii,
atributele unei entiti se scriu n dreptunghiul corespunztor entitii pe care o
caracterizeaz, imediat sub numele acesteia i sunt substantive la singular.
De exemplu, atributele entitii CLASA din figura 5-1 sunt idc, profil i specializare.
126
Un atribut poate fi obligatoriu sau opional. Dac un atribut este obligatoriu, atunci
fiecare instan a acelei entiti trebuie s fie caracterizat printr-o valoare a acelui atribut.
De exemplu, atributul nume din entitatea PROFESOR este un atribut obligatoriu pentru c
trebuie s cunoatem numele fiecrui profesor memorat n baza de date.
n cazul unui atribut opional pot exista instane pentru care s nu se cunoasc
valoarea atributului respectiv. De exemplu, putem aduga entitii PROFESOR un atribut
opional numit email. Aceast caracteristic (opionalitatea) rezult din faptul c pot exista
profesori care nu au un cont de email.
Instanele pot fi identificate prin valorile pe care le au atributele ce le caracterizeaz.
Un atribut sau un set de atribute care identific n mod unic o instan a unei entiti se
numete identificator unic. Pentru exemplul din figura 5.1 identificatorul unic al entitii
CLASA este idc (indicativ al clasei). Nu exist dou clase cu acelai indicativ deci orice
clas este unic determinat de valoarea acestui atribut. Atributul profil nu poate fi ales drept
identificator unic pentru c pot exista mai multe clase cu acelai profil (de exemplu, ntr-un
liceu exist mai multe clase cu profil real).
figura V-2
V.3.3. Evaluare
1) Dai exemple de activiti din lumea real care presupun acceasarea unei
baze de date Web.
2) Care dintre urmtoarele activiti pot implica accesarea unei baze de date Web ?
a. cutarea unui cod potal c. micorarea dobnzii bancare
b. achiziionarea unui produs d. achitarea facturii telefonice
3) Pentru a mri viteza de accesare a unei baze de date Web trebuie s lucrm n stil
a. conectat b. deconectat
4) Problema accesului concurent la o baz de date este rezolvat de ctre
a. utilizator c. server
b. administratorul bazei de date d. proiectantul bazei de date
5) Care dintre urmtoarele nu reprezint un beneficiu furnizat de ADO.NET?
a. performan c. interoperabilitate
b. durabilitate d. concuren
6) Care dintre urmtoarele nu poate fi considerat atribut pentru entitatea HOTEL?
a. NumrCamere c. PreCamer
b. PersonalDeIngrijire d. Vedere
7) Enumerai cinci entitile care apar n gestionarea activitii unui centru comercial.
Pentru fiecare dintre aceste entiti menionai atributele ce le caracterizeaz.
128
Pentru a putea exectua o comand care acceseaz baza de date avei nevoie de un
server de baze de date care s preia i s execute aceast comand. Majoritatea aplicaiilor
ASP.NET utilizeaz Microsoft SQL Server.
Responsabilitatea crerii unei baze de date accesat de ctre o aplicaie Web revine,
de cele mai multe ori, dezvoltatorului ASP.NET. Este ns posibil ca aceasta s existe deja
sau s fie n responsabilitatea unui administrator dedicat.
Dac utilizai o versiune de SQL Server, avei posibilitatea de a utiliza interfaa grafic
oferit de SQL Server Management Studio pentru a crea i gestiona baze de date.
Pentru conectarea la bazele de date existente sau pentru a crea altele noi din
Microsoft Visual Web Developer , alegei opiunea Database Explorer din meniul View
i urmai n continuare paii:
46
n limba englez Select or Enter a Database Name
47
Constrngerile permit stabilirea regulilor de integritate care s garanteze c datele introduse
n baza de date sunt corecte i valide. Constngerea Allow Nulls ataat unei coloane
permite/inhib prezena valorilor NULL pe acea coloan.
48
Formulele se scriu n zona Formula din seciunea Computed Column Specification.
INTERACIUNEA CU BAZE DE DATE WEB 131
Pentru a preciza cheia primar 49 a tabelei, selectai rndul unde dorii s stabilii cheia
primar i apoi executai un click pe butonul din dreapta al mouse-ului i alegei opiunea:
figura V-6
Selectarea uneia dintre opiunile Save... ale meniului File duce la salvarea structurii
tabelei curente.
Dup salvarea definiiei, tabela este afiat n zona Tables a bazei de date selectate
(ca n figura 5-8).
49
Identificator unic
132
figura V-8
Pentru a introduce sau vizualiza datele din tabel, executai click dreapta pe numele
figura V-9
Transformarea modelului conceptual ntr-un model relaional 50 implic transformarea
entitilor i relaiilor astfel:
entitile devin tabele;
atributele devin coloane n tabela provenit din entitatea corespunztoare;
identificatorul unic devine cheie primar;
instanele devin linii n tabel;
relaiile 1-1 devin chei strine 51, cheia strin fiind plasat n tabela cu mai puine
nregistrri;
relaiile 1-n devin chei strine plasate n tabela n care se afl partea many(n) a
relaiei;
relaiile n-n sunt rezolvate prin intermediul entitii de intersecie care are dou
chei strine pentru cele dou tabele asociate.
50
Aceast operaie se numete mapare.
51
Cheia strin este un cmp ce corespunde unei chei primare din tabela de referin.
INTERACIUNEA CU BAZE DE DATE WEB 133
Vom defini, ca baz pentru noiunile ce urmeaz s fie prezentate n acest capitol, un
model conceptual simplificat corespunztor bazei de date MASTER ce conine trei tabele
(clienti, produse i comenzi). Fiecare client poate lansa una sau mai multe comenzi i
fiecare produs poate fi comandat de una sau mai multe ori.
figura V-16
Pentru baza de date aleas ca model avem dou relaii de tipul 1-n ntre tabele:
figura V-17
Relaia FK_Comenzi_Clienti din figura 5-17 marcheaz faptul c un client poate lansa
mai multe comenzi (CodClient este cheie primar n tabela Clienti i cheie strin n
tabela Comenzi), iar relaia FK_Comenzi_Clienti indic faptul c un produs poate s fie
comandat de mai multe ori ( CodProdus este cheie primar n tabela Produse i cheie
strin n tabela Comenzi)
Opiunea
asociat grupului Database Diagrams
permite realizarea diagramelor
corespunztoare modelului conceptual ales,
pe baza tabelelor selectate.
136
V.4.1. Evaluare
Atunci
a. cheia primar din tabela PERSOANE devine cheie primar n tabela INVESTIII;
b. cheia primar din tabela PERSOANE devine cheie strin n tabela INVESTIII;
c. cheia primar din tabela INVESTIII devine cheie primar n tabela PERSOANE;
d. cheia primar din tabela INVESTIII devine cheie strin n tabela PERSOANE;
3) Atunci cnd iniiem o conexiune sursa de date la care ne conectm trebuie s existe.
a. adevrat b. fals
4) Un fiier cu extensia .mdf este o baz de date.
a. adevrat b. fals
5) Pentru diagrama din figura urmtoare
Accesul direct reprezint cea mai uoar cale de a interaciona cu o baz de date,
ce presupune construirea i executarea unor comenzi SQL.
52
n limba englez Data Definition Language
53
n limba englez Data Manipulation Language
54
O vizualizare (n limba englez view) este o tabel virtual, cu rol de filtrare a datelor, care nu
memoreaz date propriu-zise.
INTERACIUNEA CU BAZE DE DATE WEB 139
d) executm interogarea .
n fereastra de proiectare a unei interogri se pot identifica patru zone. n prima
zon sunt evideniate tabelele, pe baza crora se construiete interogarea, relaiile dintre ele,
i sunt marcate cmpurile prelucrate de interogare. n cea de-a doua zon se precizeaz
modul n care cmpurile selectate intervin n interogare i sunt marcate cele ce urmeaz s
fie afiate. Fereastra a treia conine codul SQL, cod n care se poate interveni direct iar n
cea de-a patra fereastr se afieaz rezultatul interogrii.
55
n limba englez Data Control Language
56
este instalat n folder-ul c:\Program Files\Microsoft SQL Server\90\Tools\Binn
140
join permite prelucrarea datelor din dou sau mai multe tabele pe baza unor
criterii bine definite.
n clauza FROM se specific obiectele (tabelele i vizualizrile) din care se extrag
date. Aceste obiecte pot fi nsoite de un alias. Dac un obiect se afl ntr-o baz de date
situat la distan atunci se va specifica numele legturii ctre aceasta (database link).
Cea mai simpl form a instruciunii SELECT este SELECT * FROM tabela;
Caracterul * indic afiarea tuturor coloanelor tabelei. Dac dorim s afim doar informaii
din cteva coloane ale tabelei vom preciza numele acestor coloane n clauza SELECT.
n exemplul urmtor se afieaz, pentru fiecare client: numele, prenumele i
localitatea.
Dac lista de coloane din clauza SELECT este precedat de cuvntul DISTINCT
atunci se afieaz doar liniile din tabel ce corespund combinaiilor distincte de valori din
aceste coloane.
n exemplul urmtor se utilizeaz specificatorul DISTINCT pentru a afia categoriile
de produse.
Aliasul unei coloane permite afiarea unei alte expresii n locul numelui unei coloane.
Aceast expresie poate fi ncadrat de paranteze i este precedat de cuvntul AS.
Exemplul anterior poate fi rescris:
Dac dorim s afim n aceeai coloan informaii din mai multe coloane atunci
putem s construim un ir de caractere obinut prin alipirea acestor informaii cu ajutorul
operatorului + . n exemplul urmtor se afieaz n aceeai coloan numele i prenumele
clienilor.
Funciile de grup sunt funcii care returneaz o singur valoare pentru fiecare grup
de linii dintr-un tabel. Principalele funcii de grup sunt :
MIN (x) calculeaz cea mai mic valoare din cmpul numeric x.
Cel mai mic pre al unui produs se obine cu interogarea:
144
Dac dorim s afim produsele care au cel mai mic pre atunci trebuie s includem
n clauza WHERE o subinterogare 57:
MAX (x) calculeaz cea mai mare valoare din cmpul numeric x.
Interogarea din figura urmtoare afieaz stocul maxim (numrul maxim de produse
de acelai tip)
Dac dorim s selectm numai o parte dintre grupurile obinute prin folosirea clauzei
GROUP BY trebuie s utilizm clauza HAVING.
n exemplul urmtor se utilizeaz clauza HAVING pentru a afia localitile pentru
care avem cel puin 2 clieni.
Clauza ORDER BY se utilizeaz atunci cnd se dorete afiarea datelor din tabel
ordonate dup anumite criterii. n aceast clauz se precizeaz coloanele sau expresiile
dup care se vor ordona liniile unui tabel nainte de afiare.
Opiunea ASC precizeaz c ordonarea se face cresctor. Aceast opiune poate fi
omis ntruct, implicit, datele sunt ordonate cresctor. Opiunea DESC precizeaz c
sortarea se face descresctor.
Exemplul urmtor afieaz produsele pornind de la cel mai scump i terminnd cu cel
mai ieftin.
146
n cazul ordonrii descresctoare valorile NULL se trec la sfrit, n timp ce, n cazul
ordonrii cresctoare valorile NULL apar la nceput.
De exemplu, dac se adaug n tabela PRODUSE un nou produs, creta, fr
descriere atunci acest produs va fi, ntr-o ordonare cresctoare dup coloana Descriere,
primul produs afiat.
Outer Join se utilizeaz atunci cnd dorim s afim datele dintr-o tabel
indiferent dac au sau nu corespondent n tabela de legtur. Dac datele fr corespondent
se afl n tabela din stnga clauzei JOIN atunci se utilizeaz opiunea LEFT OUTER JOIN
iar altfel opiunea RIGHT OUTER JOIN.
O astfel de legtur se realizeaz atunci cnd vrem s afim toi clienii indiferent
dac au comandat sau nu produse.
INTERACIUNEA CU BAZE DE DATE WEB 149
Comanda CREATE poate fi utilizat pentru a crea o tabel, o vizualizare, un index sau
un sinonim.
Pentru crearea unei tabele se folosete comanda CREATE TABLE.
n cadrul comenzii CREATE TABLE putem utiliza clauza DEFAULT pentru a defini
valori implicite pentru coloanele tabelei. Aceast clauz precizeaz ce valoare va avea un
atribut atunci cnd, la inserare, nu se specific n mod explicit valoarea acestuia. Valoarea
implicit este dat de expresia ce urmeaz clauzei DEFAULT. Aceasta poate fi o constant,
o expresie SQL sau chiar o funcie SQL.
Utilizarea clauzei DEFAULT previne introducerea valorilor NULL n tabel i permite
utilizatorului s controleze unde i cnd au fost introduse valorile implicite.
O form simplificat a comenzii CREATE TABLE este urmtoarea:
Dac dorim ca anul apariiei s fie implicit 2008 atunci putem folosi clauza DEFAULT
pentru aceast coloan.
152
Coloana adugat va fi ultima din tabel. Dac tabela conine deja date, atunci, pentru
liniile existente vom avea, n coloana adugata, valoarea NULL. Rezult de aici c nu putem
aduga coloane cu restricia NOT NULL la o tabel ce conine date.
n exemplul urmtor, se adaug tabelei CARTE dou coloane.
tergerea unei coloane duce automat la tergerea restriciilor definite pentru aceasta i
care nu implic alte obiecte.
n exemplul urmtor se terge coloana categorie din tabela CARTE.
INTERACIUNEA CU BAZE DE DATE WEB 153
Dac o tabel este referit printr-o cheie strin atunci ea nu poate fi tears pn
cnd nu este tears tabela care o refer ( se terge mai nti tabela copil i numai dup
aceea tabela printe).
Pentru a terge toate liniile tabelei i a elibera spaiul utilizat pentru stocarea datelor,
fr a terge definiia tabelei, se utilizeaz comanda
Opiunea WITH GRANT OPTION permite unui utilizator s aloce altor utilizatori
drepturile primite cu aceast opiune.
n exemplul urmtor se acord drepturi de selecie i inserare n tabela Carti tuturor
utilizatorilor.
Comanda
V.5.4. Evaluare
I.
1) Atunci cnd vrem s construim o aplicaie Web legat la o baz de date:
a) realizm mai nti modelul conceptual i dup aceea modelul fizic
b) construii modelul fizic i apoi modelul conceptual
c) modelul fizic se contruiete n paralel cu modelul conceptual
2) Care dintre urmtoarele afirmaii despre relaiile stabilite ntre tabele sunt adevrate:
a) Sunt implementate cu ajutorul cheilor strine
b) Se stabilesc ntre dou tabele diferite
c) Se pot defini numai ntre tabele aflate n aceeai baz de date
3) Dac se genereaz automat numele unei relaii, atunci acesta are prefixul:
a) PK_ b) FK_ c) PFK_ d) FPK_
4) O tabel poate avea o singur cheie primar
a) Adevrat b) Fals
5) Care dintre urmtoarele afirmaii referitoare la o cheie primar sunt adevrate:
a) Fiecare tabel trebuie s aib o cheie primar
b) Cheia primar realizeaz o indexare automat a nregistrrilor din tabel
c) O tabel poate avea mai multe chei primare
6) Care dintre urmtoarele reprezint tipuri de relaii
a) 1-n b) 0-n c) n-n
7) Se consider dou tabele T1 i T2 ntre care exist o relaie de tip 1-n (cheia primar din
T1 este cheie strin n T2). Atunci:
a) Putem terge oricnd o nregistrare din T1
b) Putem terge oricnd o nregistrare din T2
c) O nregistrare din T1 poate fi tears numai dac n tabela T2 nu exist nregistrri
care s-i corespund
8) ntr-o tabel
a) orice cmp poate avea valoare NULL
b) un cmp care reprezint o cheie primar poate conine valori NULL
c) un cmp care reprezint o cheie strin poate conine valori NULL
9) tergerea unei tabele printe
a) Conduce la tergerea tuturor tabelelor copii
b) duce la invalidarea accesului la toate tabelele copii
c) Se poate face numai dup ce au fost terse toate tabelele copii
d) Nu se poate face n orice condiii
INTERACIUNEA CU BAZE DE DATE WEB 157
10) n Visual Studio, o relaie ntre dou tabele se poate defini automat, din
a) Tabela printe
b) Tabela copil
c) Oricare dintre cele dou tabele
II. Se consider modelul conceptual din Figura.5-20.
figura V-20
n acest capitol vom vedea cum putem s combinm comenzile SQL cu obiecte
ADO.NET pentru a extrage i manipula bazele de date din aplicaiile Web.
Componentele principale ale ADO.NET sunt DataSet i Data Provider. Ele au fost
proiectate pentru accesarea i manipularea datelor.
Din cauza existenei mai multor tipuri de surse de date este necesar ca pentru fiecare
tip de protocol de comunicare s se foloseasc o bibliotec specializat de clase.
.NET Framework include SQL Server.NET Data Provider
pentru interaciune cu Microsoft SQL Server, Oracle Data
Provider pentru bazele de date Oracle i OLE DB Data Provider
pentru accesarea bazelor de date ce utiliteaz tehnologia OLE DB
pentru expunerea datelor (de exemplu Access, Excel sau SQL
Server versiune mai veche dect 7.0)
Furnizorul de date permite unei aplicaii s se conecteze la
sursa de date, execut comenzi i salveaz rezultate. Fiecare
furnizor de date cuprinde componentele Connection, Command,
DataReader i DataAdapter :
SQL Server OLE DB Oracle
Data Provider Data Provider Data Provider
Connection SqlConnection OleDbConnection OracleConnection
Command SqlCommand OleDbCommand OracleCommand
DataReader SqlDataReader OleDbDataReader OracleDataReader
DataAdapter SqlDataAdapter OleDbDataAdapter OracleDataAdapter
INTERACIUNEA CU BAZE DE DATE WEB 159
figura V-21
160
Exemple de conectare
a) conectare la o surs de date SQL
using System.Data.SqlClient;
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=localhost; User ID=profesor;pwd=info;
Initial Catalog=Orar;
con.Open();
using System.Data.SqlClient;
SqlConnection con = new SqlConnection(@"Data Source=serverBD;
Database=scoala; User ID=elev;
Password=secret");
con.Open();
using System.Data.OleDb;
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Date\scoala.mdb");
con.Open();
SqlConnection conn;
conn = new SqlConnection("Data Source='.\\SQLEXPRESS';
Initial Catalog=master;
Integrated Security=SSPI");
Proprieti
Parametru Descriere
Specific furnizorul de date pentru conectarea la sursa de date. Acest
Provider furnizor trebuie precizat doar dac se folosete OLE DB .NET Data
Provider, i nu se specific pentru conectare la SQL Server.
Data Source Identific serverul, care poate fi local, un domeniu sau o adres IP 58.
Specific numele bazei de date accesate. Baza de date trebuie s se
Initial Catalog
gseasc pe serverul dat n Data Source. 59
Integrated Logarea se face cu user-ul configurat pentru Windows.
Security 60
User ID Numele unui user care are acces de logare pe server.
using System.Data.SqlClient;
SqlConnection con = new SqlConnection("Data Source=serverBD;
Database=scoala;
User ID=elev;Password=secret;
Connect Timeout=30");
58
Dac este instalat SQL Server Express Edition sursa de date este localhost\SQLEXPRESS
sau .\SQLEXPRESS, pentru c numele instanei este SQLEXPRESS.
59
Connection.ChangeDatabase() permite schimbarea numelui bazei de date.
60
User Id i Password pot nlocui parametrul Integrated Security.
162
Evenimente
n mod obinuit, toate bazele de date dintr-o aplicaie vor utiliza acelai ir de caractere
pentru precizarea modului de conectare.
Din acest motiv se pstreaz irul de caractere ce precizeaz modul de conectare ca
variabil membru ntr-o clas sau, chiar mai bine, ntr-un fiier de configurare.
Putem astfel s construim un obiect de tip Connection i s-i furnizm, utiliznd un
constructor dedicat, irul de caractere ce indic modul de conectare:
<configuration>
...
<connectionStrings>
<add name="sir"
connectionString="DataSource=.\SQLEXPRESS;
Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
...
</configuration>
conn = WebConfigurationManager.ConnectionStrings["sir"].ConnectionString;
nainte de efectuarea unor operaii pe baza de date este bine s verificm dac am
reuit s ne conectm la sursa de date.
n exemplul urmtor apsarea butonului Open determin conectarea la surs, afiarea
informaiilor legate de conectare i a strii acesteia (ca n imaginea umtoare)
164
Exemplul 3. Am adugat pe pagin o list de tip DropDownList pentru care sursa de date
este reprezentat de numele, denumirea i preul produselor.
V.6.5. Command
Proprieti
a) CommandText (String): conine comanda SQL sau numele procedurii stocate care
se execut pe sursa de date.
b) CommandTimeout (int): reprezint numrul de secunde care trebuie s fie ateptat
pentru executarea comenzii. Dac se depeste acest timp, atunci se genereaz o
excepie.
c) CommandType (enumerare de componente de tip CommandType): reprezint tipul
de comand care se execut pe sursa de date. Valorile pot fi: StoredProcedure (apel
de procedur stocat), Text (comand SQL obinuit), TableDirect (numai pentru
OleDb)
d) Connection (System. Data. [Provider].PrefixConnection): conine obiectul de tip
conexiune folosit pentru legarea la sursa de date.
e) Parameters (System.Data.[Provider].PrefixParameterCollection): returneaz o
colecie de parametri care s-au transmis comenzii.
f) Transaction (System.Data.[Provider].PrefixTransaction): permite accesul la obiectul
de tip tranzacie care se cere a fi executat pe sursa de date.
Metode
a) Constructori:
SqlCommand()
SqlCommand(string CommandText)
SqlCommand CMD=
new SqlCommand("SELECT * FROM elevi FOR XML MATE,EXAMEN", con);
System.Xml.XmlReader myXR = CMD.ExecuteXmlReader();
170
using System.Data.SqlClient;
SqlConnection conn = newSqlConnection(@"DataSource=serverBD;Database=MAGAZIN;
User ID=adm;Password=eu");
conn.Open();
Cteodat avem nevoie s obinem din baza de date o singur valoare, care poate fi o
sum, o medie sau alt rezultat al unei funcii agregat. O alegere ineficient ar fi utilizarea
metodei ExecuteReader i apoi calculul valorii. n acest caz, cea mai bun alegere este s
lucrm direct asupra bazei de date i s obinem aceast valoare. 62
61
n acest exemplu am ales s apelm constructorul SqlCommand fr parametri pentru a
exemplifica cum putem stabili explicit conexiunea i comanda.
62
n exemplul prezentat este necesar conversia ntruct rezultatul returnat de ExecuteScalar este de
tip object
172
V.6.6. DataReader
Datele pot fi explorate n mod conectat (cu ajutorul unor obiecte din categoria
DataReader), sau pot fi preluate de la surs (dintr-un obiect din categoria DataAdapter) i
nglobate n aplicaia curent (sub forma unui obiect din categoria DataSet).
Clasele DataReader permit parcurgerea ntr-un singur sens a sursei de date, fr
posibilitate de modificare a datelor la surs. Dac se dorete modificarea datelor la surs, se
va utiliza ansamblul DataAdapter + DataSet.
Datorit faptului c citete doar nainte (forward-only) acest tip de date este foarte
rapid n citire. Overhead-ul asociat este foarte mic (overhead generat cu inspectarea
rezultatului i a scrierii n baza de date). Dac ntr-o aplicaie este nevoie doar de informaii
care vor fi citite o singur dat, sau rezultatul unei interogri este prea mare ca sa fie reinut
n memorie (caching) DataReader este soluia cea mai bun.
Un obiect DataReader nu are constructor 63, ci se obine cu ajutorul unui obiect de tip
Command i prin apelul metodei ExecuteReader() (vezi exerciiile de la capitolul anterior).
Evident, pe toat durata lucrului cu un obiect de tip DataReader, conexiunea trebuie s fie
activ. Toate clasele DataReader (SqlDataReader, OleDbDataReader etc.) implementeaz
interfaa IDataReader.
Proprieti:
a) IsClosed (boolean, read-only)- returnez true dac obiectul este deschis i fals altfel
b) HasRows (boolean,read-only)- verific dac reader-ul conine cel puin o nregistrare
c) Item (indexator de cmpuri)
d) FieldCount-returneaz numrul de cmpuri din nregistrarea curent
Metode:
63
Dac pentru instantiere este folosit operatorul new vei obine un obiect cu care nu putei
face nimic pentru c nu are o conexiune i o comand ataate.
INTERACIUNEA CU BAZE DE DATE WEB 173
Atunci cnd lucrai cu bazele de date avei nevoie, de cele mai multe ori, s filtrai
rezultatul dup diverse criterii. De obicei acest lucru se face n funcie de condiiile
specificate de ctre utilizator (ex: se afieaz doar ppuile Barbie).
Cea mai simpl metod de filtrare a rezultatelor este s construim dinamic string-ul
SqlCommand dar aceast metod nu este recomandat deoarece poate afecta baza de
date ( ex. Accesarea informaiilor confideniale).
Dac folosim interogri cu parametri atunci orice valoare pus ntr-un parametru nu va
fi tratat drept cod SQL, ci ca valoare a unui cmp, fcnd aplicaia mai sigur.
64
a) construii string-ul pentru SqlCommand folosind parametri;
SqlCommand cmd =
new SqlCommand("SELECT * FROM PRODUSE WHERE DENUMIRE = @den", conn);
Exemplu
cmd.Parameters.Add(param);
Astfel, comanda
devine
64
Atunci cnd comanda va fi executat @den va fi inlocuit cu valoarea aflat n obiectul SqlParameter ataat.
Dac nu asociem o instan de tipul SqlParameter pentru un parametru din string-ul de interogare sau avem mai
multe instane SqlParameter pentru un parametru vom obine o eroare la rulare
INTERACIUNEA CU BAZE DE DATE WEB 175
figura V-22
Fiecare item al listei este un ir de caractere format prin alipirea informaiilor din
cmpurile DenumireProdus, PretUnitar i Stoc. Lista de produse va fi afiat la fiecare
ncrcare a paginii.
n cazul n care operaia de conectare la baza de date sau operaia de citire din baza
de date eueaz se afieaz un mesaj de eroare.
176
try
{
conn.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
ListItem newItem = new ListItem();
newItem.Text =
reader["DenumireProdus"] + "pret:" +reader["PretUnitar"]+" stoc:"+reader["Stoc"];
newItem.Value = reader["CodProdus"].ToString();
DropDownList2.Items.Add(newItem);
}
reader.Close();
}
catch (Exception err)
{
text1.Text = "Eroare la citire :" + err.Message;
}
finally
{
conn.Close();
}
}
Selectarea unui item din lista de produse determin afiarea unor informaii
suplimentare despre acest produs, ntr-o etichet, cu ajutorul unui obiect de tip
StringBuilder:
DropDownList2_SelectedIndexChanged
eveniment ce determin preluarea informaiilor ce corespund itemului curent din tabela
produse i afiarea acestor informaii n formatul din imaginea alturat.
try
{
conn.Open();
reader = cmd.ExecuteReader();
reader.Read();
icp.Text = reader["CodProdus"].ToString();
ipu.Text = reader["PretUnitar"].ToString();
il.Text = reader["Descriere"].ToString();
idp.Text = reader["DenumireProdus"].ToString();
ic.Text = reader["Categorie"].ToString();
ist.Text = reader["Stoc"].ToString();
reader.Close();
text1.Text = "";
}
catch (Exception err)
{
text1.Text = "Eroare: " + err.Message;
}
finally
{
conn.Close();
}
}
stoc.
Dac au fost completate toate casetele text corespunztoare cmpurilor obligatorii atunci
inserarea se face cu succes i se afieaz, ntr-o caset text, care ne asigur de acest fapt.
if (icp.Text == "" || ipu.Text == "" || idp.Text == "" || ic.Text == "" || ist.Text == "")
{ text1.Text = "Atributele Cod,Denumire,Stoc,Pret,Categorie sunt OBLIGATORII";
text1.Visible = true;
return;
}
string insertSQL =
"INSERT INTO produse(CodProdus,DenumireProdus,PretUnitar,Categorie,Stoc,Descriere)
VALUES ('";
insertSQL += icp.Text + "', '"+ idp.Text + "', '"+ipu.Text + "', '"+
ic.Text + "', '" + ist.Text + "', '" + il.Text + "')";
Secvena de inserare a unui nou produs poate fi rescris , utiliznd comenzile parametrizate.
INTERACIUNEA CU BAZE DE DATE WEB 181
...
string insertSQL;
insertSQL = "INSERT INTO produse
(CodProdus,DenumireProdus,PretUnitar,Categorie,Stoc,Descriere) VALUES (";
insertSQL +=
"@CodProdus,@DenumireProdus,@PretUnitar,@Categorie,@Stoc,@Descriere)";
cmd.Parameters.AddWithValue("@CodProdus", icp.Text);
cmd.Parameters.AddWithValue("@DenumireProdus", idp.Text);
cmd.Parameters.AddWithValue("@PretUnitar", ipu.Text);
cmd.Parameters.AddWithValue("@Categorie", ic.Text);
cmd.Parameters.AddWithValue("@Stoc", ist.Text);
cmd.Parameters.AddWithValue("@Descriere", il.Text);
...
Modificarea unui produs presupune mai nti selectarea acestuia din lista produselor,
modificarea valorilor din casetele text i dup aceea efectuarea operaiei propriuzise. Valoarea
cmpului CodProdus nu se poate modica ntruct regsirea produsului ce urmeaz a fi
modificat se face pe baza acestei chei.
182
cmd.Parameters.AddWithValue("@DenumireProdus", idp.Text);
cmd.Parameters.AddWithValue("@PretUnitar", ipu.Text);
cmd.Parameters.AddWithValue("@Categorie", ic.Text);
cmd.Parameters.AddWithValue("@Stoc", ist.Text);
cmd.Parameters.AddWithValue("@Descriere", il.Text);
cmd.Parameters.AddWithValue("@CodProdus",DropDownList2.SelectedItem.Value);
int NrProduseModificate = 0;
try
{
conn.Open();
NrProduseModificate = cmd.ExecuteNonQuery();
text1.Text = "Produse modificate:"+NrProduseModificate.ToString();
}
catch (Exception err){text1.Text = "Eroare la modif" +err.Message;}
finally {conn.Close();}
Dup modificare, lista de produse este actualizat, i sunt afiate noile valori pentru
produsul modificat.
INTERACIUNEA CU BAZE DE DATE WEB 183
tergerea unui produs din tabel se face numai dac nu sunt nclcate condiiile de
integritate date de relaiile dintre tabele. De exemplu, nu putem terge un produs care a fost
deja comandat .
n exemplul din imaginea urmtoare se ncerc tergerea produsului pix. ntruct acesta
apare n cel puin o comand, operaia de tergere se ncheie fr succes.
Dac produsul ales nu este comandat atunci el poate fi ters. n exemplul din imaginea
urmtoare produsul creion poate fi ters ntruct niciun client nu a comandat acest produs.
184
V.7.1. DataAdapter
Clasele DataAdapter genereaz obiecte care
funcioneaz ca o interfa ntre sursa de date i obiectele
DataSet interne aplicaiei, permind prelucrri pe baza de
date. Ele gestioneaz automat conexiunea cu baza de date
astfel nct conexiunea s se fac numai atunci cnd este
necesar.
Un obiect DataSet este de fapt un set de tabele
relaionate. Folosete serviciile unui obiect DataAdapter
pentru a-i procura datele i trimite modificrile napoi ctre
baza de date. Datele sunt stocate de un DataSet n format
XML, folosit i pentru transferul datelor.
n exemplul urmtor se preiau datele din tabelele elevi i profesori:
//transfer datele n datasetul ds sub forma unei tabele locale numite elevi
//transfer datele n datasetul ds sub forma unei tabele locale numite profi
Proprieti
INTERACIUNEA CU BAZE DE DATE WEB 185
Metode
a) Constructori:SqlDataAdapter()|SqlDataAdapter(obiect_comanda)|
SqlDataAdapter(string_comanda, conexiune);
b) Fill() permite umplerea unei tabele dintrun obiect DataSet cu date. Permite
specificarea obiectului DataSet n care se depun datele, eventual a numelui tablei din
acest DataSet, numrul de nregistrare cu care s se nceap popularea (prima
avnd indicele 0) i numrul de nregistrri care urmeaz a fi aduse.
c) Update() permite transmiterea modificrilor efectuate ntrun DataSet ctre baza de
date.
V.7.2. DataSet
Un DataSet este format din Tables (colecie format din obiecte de tip DataTable;
DataTable este compus la rndul lui dintr-o colecie de DataRow i DataColumn),
Relations (colecie de obiecte de tip DataRelation pentru memorarea legturilor printe
copil) i ExtendedProperties ce conine proprieti definite de utilizator.
Scenariul uzual de lucru cu datele dintr-o tabel conine urmtoarele etape:
popularea succesiv a unui DataSet prin intermediul unuia sau mai multor obiecte
DataAdapter, apelnd metoda Fill (vezi exemplul de mai sus)
procesarea datelor din DataSet folosind numele tabelelor stabilite la umplere,
ds.Tables["elevi"], sau indexarea acestora, ds.Tables[0], ds.Tables[1]
actualizarea datelor prin obiecte comand corespunztoare operaiilor INSERT,
UPDATE i DELETE. Un obiect CommandBuilder poate construi automat o
combinaie de comenzi ce reflect modificrile efectuate.
186
Aadar, DataAdapter deschide o conexiune doar atunci cnd este nevoie i o inchide
imediat cnd aceasta nu mai este necesar.
De exemplu DataAdapter realizeaz urmtoarele operaiuni atunci cnd trebuie s
populeze un DataSet: deschide conexiunea, populeaz DataSet-ul, nchide conexiunea i
urmtoarele operaiuni atunci cnd trebuie s fac update pe baz de date: deschide
conexiunea, scrie modificrile din DataSet n baza de date, nchide conexiunea. ntre
operaiunea de populare a DataSet-ului i cea de update conexiunile sunt nchise. ntre
aceste operaii n DataSet se poate scrie sau citi.
Crearea unui obiect de tipul DataSet se face folosind operatorul new.
Exemplu.
SqlDataAdapter daProd =
new SqlDataAdapter("SELECT IdProdus, DenumireProdus FROM PRODUSE", conn);
s utilizm comenzi care vor folosi mai multe tabele este recomandat construirea separat
a comenzilor i apoi ataarea lor adapterului, folosind proprieti.
daProd.Fill(dsProduse, "PRODUSE");
n exemplul urmtor va fi populat DataSet-ul dsProduse. Cel de-al doilea parametru (string)
reprezint numele tabelului (nu numele tabelului din baza de date, ci al tabelului rezultat n
DataSet) care va fi creat. Scopul acestui nume este identificarea ulterioar a tabelului. n
cazul n care nu sunt specificate numele tabelelor, acestea vor fi adaugate in DataSet sub
numele Table1, Table2, ...
Exemplu. 65
Dup ce au fost fcute modificri ntr-un DataSet acestea trebuie scrise i n baza de date.
Actualizarea se face prin apelul metodei Update.
daProd.Update(dsProduse, "PRODUSE");
65
Se pot afia mai multe tabele dintr-un DataSet, semnul "+" permindu-i utilizatorului s
aleag care tabel s fie afiat. Pentru a suprima afiarea acelui semn "+" setm proprietatea
DataMembers pe numele tabelului care va fi afiat. Numele tabelului este acelai care l-am folosit ca
parametru n apelul metodei Fill.
188
adapter.Fill(ds, "produse");
}
catch (Exception err){text1.Text = "Eroare la citire "+ err.Message;}
finally {conn.Close();}
foreach (DataRow produs in ds.Tables["produse"].Rows)
{
ListItem newItem = new ListItem();
newItem.Text = produs["DenumireProdus"] + "(" +produs["Descriere"]+")";
newItem.Value = produs["CodProdus"].ToString();
DropDownList2.Items.Add(newItem);
}
}
Pentru a construi un obiect de tip DataSet n mediu vizual trebuie s folosim opiunea
Add New Item i s selectm template-ul DataSet.
Putem s adugm itemi din Database Explorer (tabele, vizualizri, etc), prin selecie
simpl i deplasare pe suprafaa de design sau s adugm elemente noi pe o suprafaa
corespunztoare unui obiect DataSet.
INTERACIUNEA CU BAZE DE DATE WEB 189
Pentru a trasa relaiile dintre tabele putem folosi opiunea Relation din meniul
Toolbox ataat. Dup alegerea acestei unelte trebuie s stabilim tabelele relaionate i tipul
relaiilor.
190
n cazul exemplului ales au fost marcate cele dou relaii de tip 1-n dintre tabele.
n concluzie, dac dorii s extragei nregistrri dintr-o baz de date i vrei s le punei
ntr-un obiect de tip DataSet trebuie s utilizai un obiect de tip DataAdapter. Fiecare obiect
de tip DataAdapter conine patru tipuri de comenzi (SELECT,INSERT,UPDATE,DELETE).
Acest lucru v permite s utilizai un singur obiect DataAdapter pentru mai multe sarcini.
INTERACIUNEA CU BAZE DE DATE WEB 191
Modelul conceptual ataat unei aplicaii poate fi generat automat prin selectarea din
Pentru generare putem folosi tabelele unei baze de date deja contruit sau putem crea
un model conceptual nou.
n cazul exemplului ales avem dou relaii de tip 1-n ntre tabela Comenzi i tabela
Clieni, respectiv Produse.
ds.Relations.Add(Clienti_Comenzi);
ds.Relations.Add(Produse_Comenzi);
try
{
conn.Open();
adapter.Fill(ds, "Clienti");
cmd.CommandText = "SELECT CodClient,IdComanda,NumarProduse FROM
Comenzi";
adapter.Fill(ds, "Comenzi");
}
catch (Exception err){text1.Text = "Eroare: "+ err.Message;}
finally {conn.Close();}
Exemplu:
RETURN
Codul SQL dintr-o procedur stocat poate fi generat automat urmnd aceeai
pai prin care se genereaz vizual o interogare.
Secvenele de cod SQL din procedura stocat pot fi selectate i executate separat.
198
66
n limba englez data binding
67
Capitolul 5.5.2
68
ntruct bazele de date Acess nu au server dedicat (precum SQL Server) care s gestioneze
accesul concurent ele sunt indicate n cazul site-urile mici pentru care numrul utilizatorilor simultani
este redus.
INTERACIUNEA CU BAZE DE DATE WEB 199
Bazele de date pot fi legate la mai multe tipuri de controale ns unele dintre acestea
au fost proiectate exclusiv pentru bazele de date.
Printre acestea se numr GridView, DetailsView, i FormView, controale ce pot
afia mai multe cmpuri la un moment dat sub forma unui tabel sau a unei structuri bine
definite i permit operaii de selectare, editare i ordonare.
Cele mai puternice controale ce pot fi legate la baze date sunt:
este ideal pentru afiarea la un moment dat a unei singure nregistrri dintr-
o tabel, ntr-un tabel ce are o singur linie pentru fiecare cmp i permite editarea;
69
n limba englez grid
INTERACIUNEA CU BAZE DE DATE WEB 201
string connectionString =
WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string selectSQL = "SELECT * FROM clase";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(selectSQL, con);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "clase");
GridView1.DataSource = ds;
GridView1.DataBind();
Definirea coloanelor
tip descriere
afieaz un buton
afieaz o caset de validare i se utilizeaz pentru cmpurile ce pot
avea una dintre valorile True/False
conine butoane pentru selecie sau editare
afieaz coninutul ca hyperlink.
afieaz imaginea dintr-un cmp 70
permite afiarea cmpurilor folosind abloane personalizate
Configurarea coloanelor
Atunci cnd declarm explicit coloanele legate putem seta proprietile acestora :
DataField numele cmpului ce va fi afiat n coloan
DataFormatString indic modul de formatare a datelor de pe coloan
FooterText/HeaderText/HeaderImageUrl-seteaz textul/imaginea din antet
/subsol
ReadOnly- permite/inhib modificarea coninutului coloanei n mod editare
InsertVisible- permite/inhib inserarea valorilor n coloan
Visible- permite/inhib afiarea coloanei
SortExpression- permite ordonarea valorilor de pe aceast coloan
NullDisplayText- afieaz un text n locul valorilor NULL de pe coloan
ConvertEmptyStringToNull- convertete irurile vide de pe coloan la NULL
ControlStyle, HeaderStyle, FooterStyle, and ItemStyle stabilete modul n
care sunt afiate datele pe acea coloan
70
furnizorul trebuie s suporte formatul n care este memorat imaginea
INTERACIUNEA CU BAZE DE DATE WEB 203
Un control de tip GridView permite selectarea unui rnd din tabel atunci cnd
proprietatea ShowSelectButton a coloanei de tip CommandField este setat la True.
Fiecare element de pe aceast coloan poate fi afiat ca legtur, ca buton sau ca imagine.
n exemplul urmtor butoanele Select sunt afiate ca legturi.
Pentru a putea terge sau modifica o nregistrare din tabela legat unui control
GridView trebuie s definim comenzile de tegere i actualizare ca n exemplu:
Pentru exemplificare,se modific valoarea din cmpul intensiv pentru clasa 9F.
n exemplul urmtor datele sunt ordonate mai nti dup profil i dup aceea dup
specializare.
71
numele coloanelor sunt subliniate
INTERACIUNEA CU BAZE DE DATE WEB 207
<ItemTemplate>
<b>Clasa:</b>
<%# Eval("idClasa") %><br />
<b>Profil:</b>
<%# Eval("profil") %><br />
<b>Specializare:</b>
<%# Eval("specializare") %><br />
</ItemTemplate>
</asp:FormView>
ablonul Header este procesat o singur dat i iniiaz grafic tabela i titlul.
<HeaderTemplate>
<table style ="border:1px solid black;"class="stdtext">
<thead bgcolor="#ff6666" style:white">
<td><b> Clasa </b></td>
<td><b> Profil </b></td>
<td><b> Specializare </b></td>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td bgcolor="#ffcc99">
<b><%# DataBinder.Eval(Container.DataItem,"idClasa") %></b></td>
<td bgcolor="#ffcc99">
<%#DataBinder.Eval(Container.DataItem,"profil")%></td>
<td bgcolor="#ffcc99">
<%#DataBinder.Eval(Container.DataItem,"specializare") %> </td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td bgcolor="#ffffcc">
<b><%# DataBinder.Eval(Container.DataItem,"idClasa") %></b></td>
<td bgcolor="#ffffcc">
<%# DataBinder.Eval(Container.DataItem,"profil") %> </td>
<td bgcolor="#ffffcc">
<%# DataBinder.Eval(Container.DataItem,"specializare") %> </td>
</tr>
</AlternatingItemTemplate>
ablonul Footer este afiat, ca i ablonul Header, o singur dat. Acest ablon definete
rndul final.
<FooterTemplate>
<tfoot>
<td bgcolor="#ffcc66" colspan="3"><%# " Clase" %></td>
</tfoot>
</table>
</FooterTemplate>
V.10.4.2 DataList
controlului poate fi personalizat prin setarea de proprieti stil pentru diferite pri ale
controlului.
Controlul DataList prezint structuri grafice predefinite, posibiliti avansate de
formatare i suport pentru selectare i editare.
Operaiile fundamentale de legare la date care folosesc DataList sunt similare celor
care folosesc Repeater. Se folosete proprietatea DataSource pentru a lega controlul la date
i metoda DataBind pentru a actualiza interfaa utilizator.
Contolul DataList suport dou abloane speciale SelectedItemTemplate i
EditItemTemplate.
V.10.4.3 DropDownList
n exemplul urmtor elementele listei derulante sunt preluate din tabela clase.
V.10.4.4 CheckBoxList
La un moment dat , un control CheckBoxList poate avea unul sau mai multe elemente
selectate.
Toate controalele list au o proprietate Items
(elemente) care conine setul de elemente fii. Proprietatea
Items este implementat prin intermediul clasei
ListItemCollection, iar fiecare element din list pote fi accesat
printr-un obiect ListItem.
V.10.4.5 RadioButtonList
V.10.5. Evaluare
1) Pentru toate cerinele de mai jos se consider urmtorul scenariu:
Administratorul unei firme trebuie s in o eviden a departamentelor firmei i a
angajailor care lucreaz n aceste departamente. Un angajat nu poate lucra n acelai timp
la mai multe departamente.n timp, un angajat poate fi mutat de la un departament la altul.
Fiecare departament are un ef .
a) contruii un model conceptual care s corespund cadrului prezentat i s conin
cel puin dou tabele : angajati, departamente.
b) adugai nregistrri n tabele folosind modul vizual
c) generai diagrama corespunztoare modelului conceptual ales
d) proiectai o pagin Web care s v permit efectuarea urmtoarelor operaii
(pentru fiecare operaie se utilizeaz controler-ul indicat)
d.1 afiarea angajailor din firm (GridView)
d.2 afiarea departamentelor din firm (DetailsView)
d.3 afiarea angajailor dintr-un departament (FormView)
d.4 afiarea efilor de departament (Repeater)
d.5 afiarea informaiilor referitoare la unul dintre angajai (DataList)
d.6 tergerea unui angajat din baza de date (DataList)
d.7 mutarea unui angajat de la un departament la altul (DropDownList)
d.8 tergerea unui departament din baza de date (implicit a angajailor care
lucreaz n acest departament) (RadioButtonList)
d.9 adugarea unui angajat (GridView)
d.10 adugarea unui departament (DetailsView)
d.11 afiarea numrului de angajai din mai multe departamente
(CheckBoxList)
2) Construii o pagin Web care s permit gestiunea unui depozit de materiale, tiind
c : au loc operaii de vnzare i aprovizionare, se pot vizualiza informaii referitoare la stocul
de materiale, persoanele care cumpr din depozit sunt persoane fizice sau juridice.
3) Construii o pagin Web care s permit vnzarea de bilete on-line la diferite
spectacole.
4) Realizai o aplicaie care s implementeze activiatea desfurat la o grdin
zoologic (evidena animalelor, angajailor, etc)
5) Realizai o aplicaie care s reprezinte site-ul unui muzeu virtual.
214
VI.1.Windows Authentication
VI.2.Forms-Based Authentication
Aceste obiective pot fi atinse foarte u or utiliznd func ionalit ile i uneltele din
ASP.NET respectiv Visual Studio, anume clasa Membership si unealta ASP.NET
Configuration (din meniul Website al Visual Studio Web Developer Express). Configurarea
autentificarii si autorizarii se poate realiza dupa cum se vede in acest tutorial:
http://msdn2.microsoft.com/en-us/library/879kf95c(VS.80).aspx .
216
VII.1.1. MasterPages
Pentru a obine un aspect unitar al site-ului, se folosete o pagin special numit
MasterPage. Aceasta este o machet pe baza creia vor fi realizate toate paginile din site-ul
web. n afara coninutului motenit din MasterPage, fiecare pagin .aspx va avea i un
coninut propriu.
Proiectarea i realizarea unei aplicaii Web 217
Pentru a aduga o pagin MasterPage, din meniul Website se alege opiunea Add
New Item, i apoi MasterPage:
Figura 7.4 La adugarea unei noi pagini .aspx se bifeaz opiunea Select master page
Layout-ului paginii MasterPage poate fi realizat prin intermediul tabelelor sau prin
intermediul tag-urilor html <div> formatate prin declaraii css. n exemplul de mai sus, pentru
definirea layout-ului s-au folosit tag-uri <div>:
Zona de header:
Coloana este format din dou casete de informaii, fiecare fiind definit de un div.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
<title>Movie Info</title>
<asp:ContentPlaceHolder id="head" runat="server"></asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div id="header">
<div id="logo"></div>
<div id = "banner"> </div>
</div>
<div id="page">
<div id="content">
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
<div id="sidebar">
<div class="boxed">
<h2 class="title">Top Incasari</h2>
<div class="content"></div>
</div>
<div class="boxed">
<h2 class="title">In curand</h2>
<div class="content"></div>
</div>
</div>
</div>
<div id="footer"></div>
</form>
</body>
</html>
Figura 7.17 Opiunile din meniul Styles pentru construirea foilor de stil
Cu ajutorul opiunii Add Style Rule putei defini o nou regul de stil, o nou clas
sau o regul de formatare pentru un tag html identificat printr-un id.
Odat definit o declaraie css, putei stabili formatrile prin intermediul opiunii Build Style.
Pentru un control server web putei folosi proprietatea CssClass pentru a-i asocia o
clas css definit n fiierul StyleSheet.css. De exemplu, controlul Menu1 din MasterPage
are asociat clasa css menu.
<div id="logo">
<asp:HyperLink ID="HyperLink5" runat="server"
ImageUrl="~/images/logo1.gif" NavigateUrl="~/Home.aspx">Movie Info
</asp:HyperLink>
</div>
n seciunea de banner vom folosi un control de tip AdRotator, care va afia bannere
de filme. Controlul AdRotator va fi conectat la o surs de date. De asemenea, pentru
navigarea ntre paginile site-ului, vom utiliza un control de tip Menu.
<div id="header">
<div id="logo">
<asp:HyperLink ID="HyperLink5"runat="server"ImageUrl="~/images/logo1.gif"
NavigateUrl="~/Home.aspx"> Movie Info
</asp:HyperLink>
</div>
<div id = "banner">
<asp:AdRotator ID="AdRotator1" runat="server" Height="75px"
Target="_blank" Width="474px" />
<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal"
CssClass="menu">
<StaticMenuStyle VerticalPadding="0px" />
<StaticMenuItemStyle Font-Bold="True" BorderColor="White"
BorderStyle="Solid" BorderWidth="1px" HorizontalPadding="5px" />
<StaticHoverStyle BackColor="#990000" ForeColor="Blue" />
<Items>
<asp:MenuItem Text="Home" Value="Home"NavigateUrl="~/Home.aspx">
</asp:MenuItem>
<asp:MenuItem Text="Filme" Value="Filme" NavigateUrl="~/Movie.aspx">
</asp:MenuItem>
226
<asp:MenuItem Text="Contact"Value="Contact"NavigateUrl="~/Contact.aspx">
</asp:MenuItem>
</Items>
</asp:Menu>
</div>
</div>
<div id="page">
<div id="content">
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
<div id="sidebar">
<div class="boxed"><h2 class="title">Top Incasari</h2>
<div class="content">
<asp:BulletedList ID="BulletedList1" runat="server"DisplayMode="LinkButton"
DataValueField="id" onclick="BulletedList1_Click" Target="_parent">
</asp:BulletedList>
</div>
</div>
<div class="boxed"><h2 class="title">In curand</h2>
<div class="content">
<asp:BulletedList ID="BulletedList2" runat="server"DisplayMode="LinkButton"
onclick="BulletedList2_Click">
</asp:BulletedList>
</div>
</div>
</div>
</div>
<div id="footer">
<p> </p>
<p>© 2008
<asp:HyperLink ID="HyperLink6" runat="server" Font-Bold="True"
NavigateUrl="http://www.microsoft.com/romania/educatie/cursnet/default.mspx"
Target="_blank">Microsoft Romania</asp:HyperLink>
</p>
<p id="links">
<asp:HyperLink ID="HyperLink1" runat="server"NavigateUrl="~/Home.aspx">Home
</asp:HyperLink> |
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/Movie.aspx">Filme
</asp:HyperLink> |
<asp:HyperLink ID="HyperLink4" runat="server"NavigateUrl="~/Contact.aspx">Contact
</asp:HyperLink>
</p>
</div>
Proiectarea i realizarea unei aplicaii Web 227
Pentru a aduga o baz de date n cadrul site-ului web, n fereastra Solution Explorer
apsai click dreapta pe directorul App_Data i apoi alegei opiunea Add New Item. n noua
fereastr selectai Sql Server Database. Noua baz de date va fi denumit filme.mdf.
Figura 7.22 Adugarea unei baze de date sql server n cadrul site-ului web
Pentru a pstra simplitatea site-ului web, informaiile despre filme le vom reine ntr-o
singur tabel, dei aceasta nu se gsete n forma normal 3. Structura tabelei film este
urmtoarea:
Cmpul id este cheie primar. Ca i n Access, MySql sau Oracle, i n Sql Server
putei defini un cmp pentru care valorile se autoincrementeaz. Pentru aceasta, trebuie
setat proprietatea Is Identity cu valoarea yes.
228
n baza de date filme vom mai aduga o nou tabel numit ads, care va constitui
sursa de date pentru controlul AdRotator din MasterPage. Aceast tabel trebuie s aib
structura:
Pentru controlul AdRotator avem nevoie de toate nregistrrile din tabel, deci vom
folosi interogarea: SELECT * FROM ads
Pentru a modifica interogarea sql, putei alege opiunea Configure Data Source a
controlului SqlDataSource generat.
Pentru caseta de informaii Top ncasri parcurgem aceeai pai. La pasul doi
putem folosi connection string ul generat anterior. Interogarea pentru extragerea
interogrilor este:
SELECT TOP (5) nume, id FROM film
WHERE (data_aparitie < GETDATE()) ORDER BY incasari DESC
Sunt selectate primele 5 filme care au aprut naintea datei curente, n ordinea
descresctoare a ncasrilor.
Figura 7.33 Interogarea Sql folosit pentru caseta de informaii Top ncasri
Figura 7.35 Interogarea parametrizat pentru selectarea filmelor cu data apariiei mai
mare ca data trimis ca parametru.
Figura 7.36 Parametrul interogrii va fi preluat din sesiune, cmpul numit data
Proiectarea i realizarea unei aplicaii Web 233
VII.2. Home.aspx
VII.3. Movie.aspx
n aceast pagin sunt afiate filmele din baza de date i se poate realiza filtrarea
acestora dup anumite criterii.
Sursa de date din GridView va fi un obiect DataSet. Adugarea unui obiect DataSet
se poate realiza prin intermediul opiunii Add New Item.
Obiectul DataSet poate conine unul sau mai multe obiecte TableAdapter. Fiecare
TableAdapter poate avea mai multe interogri care populeaz obiectul DataSet. Cea mai
simpl metod pentru a aduga un obiect TableAdapter pentru o tabel, este cu drag & drop
din fereastra Database Explorer n fereastra DataSet. n cazul proiectului nostru, a fost creat
un obiect TableAdapter corespunztor tabelei film.
Figura 7.41 Adugarea unui obiect TableAdapter prin Drag&Drop din fereastra Database
Explorer
Implicit este creat metoda FillAll, care returneaz toate nregistrrile din tabel.
Pentru a vedea rezultatul interogrii, se poate alege opiunea Preview Data.
Adugarea unei noi interogri este realizat cu ajutorul opiunii Add Query, iar
modificarea unei interogri existente cu ajutorul opiunii Configure.
Figura 7.43 Tipul sursei de date pentru controlul GridView este Object
Filtrarea datelor din controlul GridView se realizeaz prin intermediul criteriilor definite
de controalele de tip RadioButton. Exist 3 modaliti de filtrare: dup categoria filmului,
dup numele acestuia sau afiarea tuturor filmelor. Categoria filmului cutat poate fi
selectat printr-un control DropDownList.
<asp:ListItem>S.F.</asp:ListItem>
<asp:ListItem>Romance</asp:ListItem>
<asp:ListItem>Drama</asp:ListItem>
<asp:ListItem>Razboi</asp:ListItem>
<asp:ListItem>Actiune</asp:ListItem>
<asp:ListItem>Aventura</asp:ListItem>
<asp:ListItem>Desene animate</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td class="style2">
<asp:RadioButton ID="RadioButton2" runat="server" AutoPostBack="True"
Font-Bold="True" ForeColor="White" GroupName="filtru"
oncheckedchanged = "RadioButton2_CheckedChanged" Text="Nume" />
</td>
<td>
<asp:TextBox ID="TextBox1" runat="server" CssClass="textBox"
Enabled="False" Width="130px" AutoPostBack="True"
ontextchanged="TextBox1_TextChanged"></asp:TextBox>
</td>
</tr>
<tr>
<td class="style2">
<asp:RadioButton ID="RadioButton3" runat="server" AutoPostBack="True"
Checked="True" Font-Bold="True" ForeColor="White" GroupName="filtru"
Text="Toate" oncheckedchanged = "RadioButton3_CheckedChanged" />
</td>
<td> </td>
</tr>
</table>
</asp:Panel>
Pentru a putea filtra datele din GridView, vom adauga obiectului TableAdapter 3
metode, ce conin interogri sql parametrizate. Metodele se vor numi GetDataById(),
GetDataByCategory(), GetDataByName().
Interogarea va returna acea nregistrare din tabela film, care are valoarea cmpului id
egal cu valoarea trimis ca parametru:
SELECT actori, categoria, data_aparitie, id, incasari, nume, poza, regizor
FROM film WHERE (id = @id)
Acelai procedeu l vom folosi i pentru filtrarea dup criteriile nume i categorie:
ObjectDataSource1.SelectMethod = "GetData";
ObjectDataSource1.SelectParameters.Clear();
}
VII.4. Detalii.aspx
Pentru afiarea i modificarea informaiilor pentru un film, vom folosi un control de tip
DetailsView
Sursa de date pentru acest control va fi tot obiectul DataSet. Metoda care va popula
controlul DatailsView va fi GetDataById(). Valoarea parametrului @id din interogare, este
preluat prin QueryString, deoarece in aceast pagin se ajunge din movie.aspx prin
selectarea link-ului Detalii din controlul GridView. Paii pentru selectarea sursei de date sunt:
n lista de cmpuri ale controlului DetailsView, vrem s apar un link ctre pagina
care permite upload-ul unui fiier, respectiv un cmp de tip imagine, care s afieze imagina
upload-at. Imaginea reprezint posterul filmului, iar cmpul poza din tabela film conine
numele fiierului imagine. Toate posterele sunt upload-ate n directorul images/movies.
Proiectarea i realizarea unei aplicaii Web 245
VII.5. Upload.aspx
n aceast pagin utilizatorul poate upload-a un fiier, acesta fiind salvat ndirectorul
/images/movies/. Controlul de tip FileUpload are asociat un control de validare de tip
RequiredFieldValidator. De asemenea, pentru a afia erorile vom utiliza un control de tip
ValidationSummary.
Utilizatorul poate ajunge n pagina upload.aspx fie din pagina de adugare a unui nou
film (AdaugFilm.aspx), fie din pagina de detalii (Detalii.aspx). Deoarece n pagina de detalii
posterul filmului este afiat printr-un cmp ImageField al controlului DetailsView, dup
upload-ul fiierului pe server se salveaz numele fiierului uploadat n tabela film din baza de
date filme.
Pentru conectarea la baza de date se folosete irul de conectare salvat n fiierul
web.config. Astfel, n aceast pagin trebuie inclus spaiul de nume
System.Web.Configuration:
using System.Web.Configuration;
VII.6. AdaugFilm.aspx
<asp:Content ID="Content2"ContentPlaceHolderID="ContentPlaceHolder1"Runat="Server">
<table cellpadding="5" cellspacing="1" class="style1">
<tr>
<td bgcolor="#990000">
<asp:Label ID="Label1" runat="server" Font-Bold="True" ForeColor="White"
Text="Denumirea:"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtDenumire" runat="server" Width="213px" TabIndex="1"
BorderStyle="Groove" CssClass="textBox" MaxLength="50"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="txtDenumire" ErrorMessage="Nu ati introdus denumirea"
Font-Bold="True" ForeColor="#990000">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td bgcolor="#990000">
<asp:Label ID="Label2" runat="server" Font-Bold="True" ForeColor="White"
Text="Regizorul:"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtRegizor" runat="server" Width="214px" TabIndex="2"
BorderStyle="Groove" CssClass="textBox" MaxLength="50"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="txtRegizor" ErrorMessage="Nu ati introdus regizorul"
Font-Bold="True" ForeColor="#990000">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td bgcolor="#990000">
<asp:Label ID="Label3" runat="server" Font-Bold="True" ForeColor="White"
Text="Actori:"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtActori" runat="server" Rows="5" TextMode="MultiLine"
Width="212px" TabIndex="3" BorderStyle="Groove" CssClass="textBox"
MaxLength="50"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server"
ControlToValidate="txtActori" ErrorMessage="Nu ati introdus actorii"
Font-Bold="True"ForeColor="#990000">*
</asp:RequiredFieldValidator>
</td>
</tr>
250
<tr>
<td bgcolor="#990000">
<asp:Label ID="Label4" runat="server" Font-Bold="True" ForeColor="White"
Text="Data aparitiei:"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtData" runat="server" Width="100px" TabIndex="4"
BorderStyle="Groove" CssClass="textBox"></asp:TextBox>
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/calendar.gif" onclick="ImageButton1_Click"
ToolTip="Calendar" CausesValidation="False" />
<asp:Calendar ID="Calendar1" runat="server" BackColor="#FFFFCC"
BorderColor="#FFCC66" BorderWidth="1px" DayNameFormat="Shortest"
Font-Names="Verdana" Font-Size="8pt" ForeColor="#663399" Height="200px"
ShowGridLines="True" Visible="False" Width="220px"
onselectionchanged="Calendar1_SelectionChanged">
<SelectedDayStyle BackColor="#CCCCFF" Font-Bold="True" />
<SelectorStyle BackColor="#FFCC66" />
<TodayDayStyle BackColor="#FFCC66" ForeColor="White" />
<OtherMonthDayStyle ForeColor="#CC9966" />
<NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC" />
<DayHeaderStyle BackColor="#FFCC66"Font-Bold="True"Height="1px" />
<TitleStyle BackColor="#990000" Font-Bold="True" Font-Size="9pt"
ForeColor="#FFFFCC" />
</asp:Calendar>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server"
ControlToValidate="txtData" ErrorMessage="Nu ati introdus data aparitiei"
Font-Bold="True" ForeColor="#990000">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td bgcolor="#990000">
<asp:Label ID="Label7" runat="server" Font-Bold="True" ForeColor="White"
Text="Incasari:"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtIncasari" runat="server" TabIndex="5" BorderStyle="Groove"
CssClass="textBox">0</asp:TextBox>
</td>
<td>
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="txtIncasari" ErrorMessage="Incasarile intre 0 si 1000000 $"
Font-Bold="True" ForeColor="#990000" MaximumValue="1000000"
MinimumValue="0">*</asp:RangeValidator>
</td>
</tr>
<tr>
<td bgcolor="#990000" class="style5">
<asp:Label ID="Label5" runat="server" Font-Bold="True" ForeColor="White"
Text="Categoria:"></asp:Label>
</td>
<td>
<asp:DropDownList ID="DropDownList1" runat="server" TabIndex="6"
CssClass="textBox">
Proiectarea i realizarea unei aplicaii Web 251
<asp:ListItem>S.F.</asp:ListItem>
<asp:ListItem>Romance</asp:ListItem>
<asp:ListItem>Drama</asp:ListItem>
<asp:ListItem>Razboi</asp:ListItem>
<asp:ListItem>Actiune</asp:ListItem>
<asp:ListItem>Aventura</asp:ListItem>
<asp:ListItem>Desene animate</asp:ListItem>
</asp:DropDownList>
</td>
<td> </td>
</tr>
<tr>
<td bgcolor="#990000">
<asp:Label ID="Label6" runat="server" Font-Bold="True" ForeColor="White"
Text="Poster:"></asp:Label>
</td>
<td >
<asp:TextBox ID="txtPoster" runat="server" CssClass="textBox" Height="22px"
MaxLength="50" Width="173px"></asp:TextBox>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
onclick="LinkButton1_Click">Upload </asp:LinkButton>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server"
ControlToValidate="txtPoster" ErrorMessage="Nu ati uploadat posterul"
ForeColor="#990000">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td align="center" colspan="3">
<asp:Button ID="Button1" runat="server" Text="Adauga" CssClass="button"
onclick="Button1_Click" />
</td>
</tr>
<tr>
<td colspan="3">
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
Font-Bold="True" ForeColor="#990000" />
</td>
</tr>
</table>
</asp:Content>
Afiarea sau ascunderea calendarului se realizeaz prin intermediul unui control de tip
ImageButton .
Server.Transfer("Upload.aspx?id=0");
}
n evenimentul Page_Load al paginii vom verifica dac sunt date n sesiune, i vom
iniializa controalele din pagin.
Proiectarea i realizarea unei aplicaii Web 253
La apsarea butonului Adaug, datele vor fi salvate n baza de date i terse din
sesiune:
cmd.Parameters.AddWithValue("@poza", txtPoster.Text.Trim());
cmd.Parameters.AddWithValue("@categoria", DropDownList1.SelectedValue);
cmd.ExecuteNonQuery();
Session.Remove("denumire");
Session.Remove("regizor");
Session.Remove("actori");
Session.Remove("dataAparitiei");
Session.Remove("incasari");
Session.Remove("denumire");
Session.Remove("categoria");
Session.Remove("uploadedFileName");
Server.Transfer("Movie.aspx");
}
VII.7. Contact.aspx
Datele introduse de utilizator n acest formular, vor fi trimise prin email ctre
deintorul paginii. Pentru realizarea formularului, s-a folosit un control de tip Wizard, care
conine trei pai.
Figura 7.59
Pasul 1 de
completare al
formularului de
contact
Figura 7.63
Al doilea pas este de tip Finish
256
<td class="style3">
<asp:TextBox ID="txtEmail" runat="server" Width="215px"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="txtEmail" ErrorMessage="Nu ati introdus email-ul" Font-Bold="True"
ForeColor="#990000">*</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="txtEmail" ErrorMessage="Nu ati scris corect email-ul"
Font-Bold="True" ForeColor="#990000"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">*
</asp:RegularExpressionValidator>
</td></tr>
<tr>
<td class="style2" colspan="3">
<asp:ValidationSummary ID="ValidationSummary1" runat="server" Font-Bold="True"
ForeColor="#990000" />
</td></tr></table>
</asp:WizardStep>
<asp:WizardStep runat="server" title="Comentarii" StepType="Finish">
<table class="style1">
<tr>
<td class="style4">
<asp:Label ID="Label3" runat="server" Font-Bold="True"
Text="Comentariile dvs (nu mai mult de 50 caractere)"></asp:Label>
</td>
<td class="style3">
<asp:TextBox ID="txtComments" runat="server" Rows="5"
TextMode="MultiLine" Width="217px"></asp:TextBox>
</td>
<td>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ControlToValidate="txtComments" ErrorMessage="Nu mai mult de 50 carcatere"
Font-Bold="True" ForeColor="#990000" OnServerValidate=
"CustomValidator1_ServerValidate" ValidateEmptyText="True">*</asp:CustomValidator>
</td></tr>
<tr>
<td class="style2" colspan="3">
<asp:ValidationSummary ID="ValidationSummary2" runat="server"
Font-Bold="True" ForeColor="#990000" />
</td></tr></table></asp:WizardStep>
<asp:WizardStep runat="server" StepType="Complete" Title="Trimite">
<asp:Label ID="Label4" runat="server" Font-Bold="True"
Text="Mailul a fost trimis!"></asp:Label></asp:WizardStep></WizardSteps>
<SideBarButtonStyle ForeColor="White" />
<NavigationButtonStyle BackColor="White" BorderColor="#CC9966" BorderStyle="Solid"
BorderWidth="1px" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#990000" />
<SideBarStyle BackColor="#990000" Font-Size="Small" VerticalAlign="Top" Width="80px" />
<HeaderStyle BackColor="#FFCC66" BorderColor="#FFFBD6" BorderStyle="Solid"
BorderWidth="2px" Font-Bold="True" Font-Size="0.9em" ForeColor="#333333"
HorizontalAlign="Center" />
<StepPreviousButtonStyle BackColor="#990000" BorderColor="Black"
BorderStyle="Solid" Font-Bold="True" Font-Size="X-Small" ForeColor="White"
Height="20px" Width="60px" />
</asp:Wizard>
</asp:Content>
258
VII.8. Evaluare
1. Adugai bazei de date o tabel numit Categorii, care va conine toate categoriile
posibile ale unui film. Modificai apoi controalele de tip DropDownList din paginile
Movie.aspx respectiv AdaugFilm.aspx astfel nct s preia datele direct din tabela
nou introdus. Vei folosi un obiect de tip TableAdapter adugat n DataSet-ul
existent.
2. Adugai o nou tabel numit Actori. Realizai un formular de introducere a datelor
pentru noua tabel. Modificai formularul de introducere a informaiilor despre film ,
astfel nct actorii sa fie preluai din noua tabel.
3. Modificai pagina upload.aspx astfel nct s realizeze doar upload-ul unui fiier, fr
a mai salva n baza de date numele acestuia. Apoi modificai pagina detalii.aspx
astfel nct s permit vizualizarea posterului upload-at n pagina upload.aspx.
4. Presupunnd c firma dvs. are dou locaii ntr-un singur ora, adugai o nou
pagin numit Despre.aspx, care s conin un control de tip ImageMap. Imaginea
trebuie s fie o hart cu cele dou locaii, iar la click pe fiecare dintre ele trebuie s se
afieze informaiile despre locaia respectiv ntr-o nou pagin.
b. C
c. Visual Basic .Net
4. Pentru a delimita codul C# sau VB.Net scris n cadrul unei pagini se folosete tag-ul:
a. < Body >
b. < Head >
c. < Script >
5. Controlul ASP.Net folosit pentru afiarea unui text ntr-o pagin web este:
a. < asp:label >
b. < asp:listitem >
c. < asp:button >
6. Controlul ASP <asp:dropdownlist> corespunde crui tag Html ?
a. < Option >
b. < Select >
c. < List >
7. Controlul ASP < asp : listitem > corespunde crui tag Html ?
a. < Option >
b. < UL >
c. < List >
8. Proprietatea EnableViewState permite salvarea datelor introduse de utilizator?
a. Da
b. Nu
9. Care din urmtoarele posibiliti nu este o modalitate de meninere a strii ?
b. Querystate
c. HiddenField
d. Application
e. Cookies
10. ntr-o pagin web trebuie salvate informaii de dimensiuni mici ntre dou accesri ale
paginii. Securitatea datelor nu este important. Care dintre urmtoarele posibiliti este cea
mai potrivit?
a. cookie
b. query string
c. url
d. javascript function
e. hidden field
11. Care dintre urmtoarele evenimente este ultimul n cadrul cilului de via a unei pagini
web?
a. Page_Load
b. Validate
c. Page_Init
12. Care dintre urmtoarele proprieti este comun tuturor controalelor de validare?
a. ValueToCompare
b. ControlToValidate
c. InitialValue
d. ValidationExpression
e. ControlToCompare
13. Ce tip de dat are valoarea returnat de proprietatea IsPostBack
a. bit
b. boolean
c. int
d. object
e. string
14. ntr-o pagin web exist un control de tip DropDownList pentru a reine nume de
persoane. Controlul are dou valori: Ion i Marius. La apsarea unui buton de submit, se
genereaz o aciune de post back. n loc de dou valori, controlul DropDownList conine 4: 2
valori Ion i 2 valori Marius. De ce?
Test de verificare a cunotinelor 261