Documente Academic
Documente Profesional
Documente Cultură
Programarea
WEB cu
Microsoft
.NET
ASP.NET
I.
I.1.
I.2.
INTRODUCERE ........................................................................................................................................ 5
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.3.
I.2.4. Evaluare............................................................................................................................. 16
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.
I.3.4.
I.3.5.
I.3.6.
I.3.7.
I.3.8.
I.3.9.
I.3.10.
I.3.11.
II.
II.1.
II.2.
II.3.
II.4.
II.5.
II.6.
II.7.
II.8.
II.9.
II.10.
II.11.
II.12.
II.13.
II.14.
II.15.
II.16.
II.17.
II.18.
II.19.
II.20.
III.
Conversii............................................................................................................................ 58
Funcii matematice ............................................................................................................ 59
Instruciuni C# ................................................................................................................... 60
Tablouri n C#.................................................................................................................... 67
iruri de caractere ............................................................................................................. 71
Date calendaristice ............................................................................................................ 73
MODELUL CLIENT-SERVER....................................................................................... 75
4
V.5.2.3
V.5.2.4
V.5.2.5
V.5.2.6
V.5.2.7
V.5.3.1
V.5.3.2
V.5.3.3
V.5.3.4
V.6.5.1
V.6.5.2
V.6.5.3
V.6.5.4
V.5.3.
Repeater................................................................................................................................. 208
DataList .................................................................................................................................. 209
DropDownList ........................................................................................................................ 210
CheckBoxList......................................................................................................................... 211
RadioButtonList ..................................................................................................................... 212
Etc.
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).
1
2
etichete container 3
etichete vide 4
unde etichetele:
<table></table>
<tr></tr>
<td></td>
<th></th>
<caption></caption>
delimiteaz tabelul
delimiteaz o linie a tabelului
delimiteaz o celul de date a tabelului
delimiteaz o celul a primei linii din tabel (a capului de tabel)
delimiteaz titlul tabelului
Semnificaie
stabilete limea bordurii
stabilete limea
stabilete nlimea
stabilete culoarea de fundal
stabilete imaginea de fundal
stabilete distana dintre celule
stabilete distana dintre marginea celulei i coninut
aliniaz pe orizontal coninutul (left, right, center)
aliniaz pe verticalal coninutul (top, bottom, middle)
unete celula cu cea din dreapta ei
stabilete limea bordurii
table
*
*
*
*
*
*
*
td
*
*
*
*
*
*
*
*
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
Exemplele prezentate anterior ncrcau o singur pagina HTML n fereastra
browserului. Sunt i situaii n care imaginea afiat de browser este format din mai multe
pagini HTML numite cadre. Caracteristica acestor pagini este c perechea de etichete
<body> </body> este nlocuit de <frameset> </frameset>, iar n interiorul lor cadrele sunt
delimitate de <frame> i </frame>.
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.
Semnificaie
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
n englez frames
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
7
10
Cadrele sunt introduse prin perechea de etichete <frame> </frame>, i suport atributele:
Atribut
name
src
bordercolor
noresize
scrolling
frameborder
marginheight
marginwidth
Semnificaie
stabilete numele asociat cadrului
stabilete fiierul sau adresa fiierului introdus
stabilete culoarea chenarului cadrului curent conform
dezactiveaz posibilitatea vizitatorului de a redimensiona cadrul
permite/inhib adaugarea barelor de defilare cu valorile yes no si auto
stabilete dac se afieaz chenarul cadrului (1-implicit) sau nu (0)
permite stabilirea distanei n pixeli dintre coninutul unui cadru i
marginile verticale ale cadrului
permite stabilirea distanei n pixeli dintre coninutul unui cadru i
marginile orizontale ale cadrului
limea total.
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 >
11
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".
<frameset cols="20%, *">
<frame src="c5.html">
<frame src="c7.html"
name="cadru_dreapta">
</frame>
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>
_self
_blank
_parent
_top
Semnificaie
12
Observaii:
Utilizarea cadrelor prezint o serie de avantaje:
uurina n navigare
reducerea timpilor de ncrcare
i o serie de dezavantaje:
indexarea paginii de ctre motoarele de cutare este mai dificil
exist browsere care nu suport cadrele; este recomandat s existe pentru fiecare
astfel de pagin i o versiune fr cadre, ceea ce implic un efort suplimentar.
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.
Atributele etichetei <layer> sunt:
Atribut
Semnificaie
name
left/ top
bgColor
width/ height
visibility
src
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:
straturi
13
Un formular este definit ntr-un bloc delimitat de etichetele <form> </form>. n interiorul
blocului sunt incluse:
opional, un buton de anulare, prin care utilizatorul poate anula datele nscrise n
formular.
action
Semnificaie
method
Calea prin care informaiile introduse ntr-un formular pot parveni creatorului paginii
este folosirea comenzii mailto:
<a href="mailto:autor@domeniu.com">
Valoare
text
radio
type
checkbox
button
Element
introdus
caset de
text
buton radio
csu de
validare
buton de
comand
Semnificaie
14
acestuia
este butonul a crui activare declaneaz
operaiunea de trimitere a datelor catre server
reset
este butonul a crui activare readuce
controalele din formular la valorile lor iniiale
image
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
submit
buton de
transmitere
buton de
resetare
imagine
transmis prin intermediul atributului value sau poate fi tastat ntrun 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
value
checked
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.
15
name
size
multiple
Semnificaie
value
Semnificaie
selected
16
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>
c) <table border="-1"></table>
d) <table border=no></table>
17
d) c1 va fi gri i c2 roie
a) rowspan=1
b) colspan=2
c) rowspan=2
d) colspan=1
5. Secvena :
<frameset cols=20%,*>
<frame src="A.html">
<frameset rows=40%,*>
<frame src="B.html">
<frame src="C.html">
</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
Dac este bifat opiunea Informatica, care este perechea nume/valoare care va fi
transmis serverului?
a) "opt=Informatica"
b) "opt=inf"
c) "inf=Informatica"
d) "radio=inf"
18
<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
10. Secvena urmtoare de cod genereaz:
<ul>
<li>TIC</li>
<ul><li>Internet</li>
<li>HTML</li></ul>
<li>Informatica</li></ul>
a)
b)
c)
d)
o list cu 4 elemente
2 liste imbricate cu cte 2 elemente fiecare
2 liste neimbricate cu cte 2 elemente fiecare
4 liste
Tabele
paragrafe
Cadre
Imagini
19
Formulare
Folosind stilurile HTML putei fi siguri c vizitatorii paginii dumneavoastr vor vedea
pagina exact aa cum a fost ea proiectat.
proprietatean:list_valorin;
}
Selectorii sunt utilizai pentru determinarea elementelor HTML asupra crora vor fi
aplicate stilurile.
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
11
20
H3 {font-size:14px;color:blue}
<style>
H1 {color: #008000; font-weight: bold}
P {font-family: Arial; color: #800080; font-size: 14px}
</style>
</head>
<body>
</body>
12
inline n englez
embedded n englez
14
linked n englez
13
ncapsulate
21
</html>
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.
15
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.
23
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:
<LINK rel="stylesheet" href="nume_foaie_stiluri.css">
Exemplu:
16
24
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.
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:
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").
Exemplu: acest exemplu conine o definiie de clas aplicabil doar textelor
desemnate prin marcajul <p></p>.
Exemplu: acest exemplu conine dou definiii de stil de tip identificator cap i corp.
26
Semnificaie
descrie starea normal a unei legturi
descrie o legtur vizitat
descrierea aspectul legturii cnd aceasta primete focusul
descrie starea activ a unei legturi
descrie o legtur selectat
17
italice
27
28
valoare
disc
circle
square
decimal
lower-roman
upper-roman
upper-alpha
lower-alpha
none
semnificaie
disc
cerc
ptrat
numere ntregi
numere romane, caractere mici (i, ii, iii, iv)
numere romane, caractere mari (I, II, III, IV)
litere mari (A, B, C, D)
litere mici (a, b, c, d)
nimic
Exemplu: pagina urmtoare conine o list ordonat care utilizeaz ca marcatori literele mari
ale alfabetului englez
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
30
pn la celelalte elemente,
chenarul 20 este o bordur care nconjoar
elementul,
completarea 21 stabilete distana dintre coninut i chenar,
19
margin n englez
border n englez
21
padding n englez
20
31
32
Poziionarea tridimensional
Elementele sunt poziionate pe ecran pe o suprafa bidimensional dar pot fi
aezate i unul deasupra celuilalt, ntr-o stiv utiliznd un indicativ (index-z) ncepnd cu 0,
urmtorul 1 i tot aa, n continuare. Elementul cu indexul cel mai mare este aezat
deasupra.
33
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
23
34
I.3.11.
Evaluare
Care din urmtoarele variante definete un paragraf cruia i se aplic stilul respectiv?
a) <p name="ochean">Am aplicat stilul...
b) <p class="ochean">Am aplicat stilul...
c) <p style="ochean">Am aplicat stilul...
d) <p id="ochean"> Am aplicat stilul...
6. Dac ntr-un document HTML apar urmtoarele definiii de stil:
<STYLE>
.ochean{background-color:gray;color:red;align:center}
H1{color:yellow;align:left}
</STYLE>
...
<H1 class ="ochean" style="color:blue">
35
9. Completai sursa HTML de mai jos astfel nct listele definite s apar cu mai multe tipuri
de marcaje, ca n figur.
36
Properties window
Toolbox
Design surface
debug n englez
.NET FRAMEWORK 3.5
26
un Master Page este un formular WEB standard care acioneaz ca un tipar pentru paginile unui site
25
37
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.
Cu attea panouri opionale i attea moduri de a muta i a redimensiona lucrurile,
este uor s facei o mare dezordine n fereastra programului. Pentru a aduce totul la
normal, trebuie s alegei Window Reset Window Layout din bara de meniu.
27
controale
38
28
29
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).
acesteia.
Paginile care conin erori de compilare nu opresc execuia ntregului site cum s-ar ntmpla
Site-ul
compileaz
creaz
un
assembly.
Web site-ul genereaz dinamic fiierele care conin cod generat automat de Visual
Studio (cel cu definiiile controalelor); Web Application Project creaz fiierul respectiv pe
disc, cu extensia .designer.cs. Un beneficiu al variantei a doua este timpul mai mic necesar
30
31
un .dll
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.
41
va
site-ului
dura
cteva
va
fi
stocat
32
i este un protocol
standard de Internet pentru transferarea fiierelor. Vei alege aceast opiune dac dorii s
creai site-ul pe un server Web la distan, server care permite ncrcare FTP. Dar nu este
neaprat nevoie s creeai site-ul pe un calculator la distan. Este mai simplu s creai un
site local (pe calculatorul personal), i apoi cnd este terminat s-l transferai pe un server.
HTTP este prescurtarea de la File Transfer Protocol
33
pentru transferul datelor n World Wide Web. Putei folosi aceast opiune pentru a crea siteul pe un server la distan, chiar i pe calculatorul personal dac avei IIS 34 instalat, dar
pentru c nu este necesar i este dificil de efectuat, vom rmne cu opiunea File System
selectat.
Pagina afiat de Visual Studio ne prezint codul care va fi trimis spre browser. Aceasta
poate fi abordat i n mod Designer 35, selectnd tab-ul
Design.
32
42
facei click-dreapta pe numele site-ul din partea de sus a ferestrei Solution Explorer i
alegei New Folder, ca n exemplu
36
foldere-lor, n englez
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.
44
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:
protected void Page_Load(object sender, EventArgs e)
{
int an = DateTime.Now.Year;
int luna = DateTime.Now.Month;
int zi = DateTime.Now.Day;
Label1.Text = Label1.Text + " " + zi + "-" + luna + "-" + an;
}
Ce se vede n browser?
Observaii:
Fiierul cod este locul unde se afl partea de programare din spatele paginii Web.
45
vizualizate direct, ci doar motenite din punct de vedere al interfeei de ctre paginile cu
coninut.
39
40
Un calculator conectat la Internet care furnizeaz clienilor, la cerere, diverse resurse web
Simple Mail Transfer Protocol
46
47
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
<%@
Page
Language="C#"
AutoEventWireup="true"
CodeFile="first.aspx.cs" Inherits="first1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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>
using
using
using
using
using
using
using
using
using
using
using
using
49
System;
System.Collections;
System.Configuration;
System.Data;
System.Linq;
System.Web;
System.Web.Security;
System.Web.UI;
System.Web.UI.HtmlControls;
System.Web.UI.WebControls;
System.Web.UI.WebControls.WebParts;
System.Xml.Linq;
first.aspx.cs
Exemplul 3.2
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"%>
III.1.1.
Controale ASP.NET
50
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>
III.1.2.
III.1.3.
51
Aplicaii rezolvate
Fiierul .aspx:
Observaii:
n codul de mai jos + este operator de concatenare a dou iruri de caractere.
Fiierul .aspx.cs:
52
Fiierul .aspx
public partial class _Default : System.Web.UI.Page
{
protected void afisare(object sender, EventArgs e)
{
output.InnerHtml = "<center><b><i><font face='arial' color ='blue' size
= '14'>";
output.InnerHtml += mesaj.Value;
output.InnerHtml += "</font></i></b></center>";
}
}
Fiierul .aspx.cs
Aplicaia 3. Folosind Visual Web Developer i controale server HTML, creai o
pagin web care s conin un link i un buton. La apsarea butonului, link-ul trebuie s-i
modifice url-ul i s fie aliniat pe centrul paginii. De asemenea, culoarea de fundal a paginii
trebuie s se modifice.
Rezolvare: Pentru a modifica atributele unui control server Html, se poate folosi n
codul C# proprietatea Attributes asociat unui control Html. Aceast proprietate este un
vector asociativ atribut/valoare. Vom asocia atributele id respectiv runat tag-urilor body, div,
53
a, input, iar n codul C# vom modifica atributele bgcolor, align respectiv href, prin intermediul
proprietii Attributes.
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs"
Inherits="_Default" %>
<!DOCTYPE
html
PUBLIC
"-//W3C//DTD
XHTML
1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"> <title>Atribute</title>
</head>
<body id="mainBody" runat="server">
<form id="form1" runat="server">
<div id="mainDiv" runat="server">
<a href = "http://www.microsoft.com" target="_blank" id="link"
runat="server">Microsoft</a> <br/>
</div>
<input type = "submit" id = "button1" runat = "server"
onserverclick="change"/>
</form></body></html>
Fiierul .aspx
protected void change(object sender, EventArgs e)
{
mainDiv.Attributes["align"] = "center";
mainBody.Attributes["bgcolor"] = "#659EC7";
link.Attributes["href"] = "http://www.microsoft.com/romania/";
link.InnerText = "Microsoft Romania";
}
Fiierul .aspx.cs
III.2. Limbajul C#
Limbajul C# este un limbaj nou de programare, aprut odat cu platforma .NET.
Ideea central a limbajului C# este programarea orientat pe obiecte (POO). O aplicaie C#
este format din una sau mai multe clase, grupate n spaii de nume (namespaces).
O clas reprezint un ablon care definete forma unui obiect. Este un tip de date
abstract, care definete att datele ct i codul care va prelucra acele date. Obiectele sunt
instane, particularizri ale claselor. Datele din cadrul clasei se mai numesc proprieti, iar
funciile mai poart numele de metode.
Simplificnd mult lucrurile, putei s v imaginai o clas ca o extindere a tipului
structur din C sau nregistrare din Pascal. ntr-o structur putei defini date de tipuri diferite.
ntr-o clas, pe lng aceste date exist i funciile care le prelucreaz. La fel cum putei
defini variabile de tip structur, se pot defini variabile de tip clas (numite obiecte). Accesul
la cmpurile unei structuri se realizeaz prin nume_variabil_structur . nume_cmp.
54
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
using
using
using
III.2.1.
System
System.Web
System.Web.UI.HtmlControls;
System.Web.UI.WebControls;
Vocabularul limbajului
Ca i limbajul C++ cu care se nrudete, limbajul C# are un alfabet format din litere
mari i mici ale alfabetului englez, cifre i alte semne. Vocabularul limbajului este format din
identificatori, expresii, separatori, delimitatori i comentarii.
Comentariile pot fi scrise pe un singur rnd prin folosirea //. Tot ce urmeaz dup
caracterele // sunt considerate, din acel loc, pn la sfritul rndului drept comentariu.
Comentariile pe mai multe rnduri pot fi scrise prin folosirea /* i */ .
Un identificator reprezint o succesiune de caractere care ndeplinete urmtoarele
reguli:
ncepe cu o liter sau cu unul dintre caracterele _ i @;
primul caracter poate fi urmat numai de litere, cifre sau un caracter de subliniere;
identificatorii care reprezint cuvinte cheie nu pot fi folosii n alt scop dect acela
pentru care au fost definii.
III.2.2.
55
Tipuri de date
C# include dou categorii generale de tipuri predefinite: tipuri simple (sau tipuri
valoare) i tipuri referin. Tipurile simple cuprind tipurile numerice (ntregi, reale i char),
tipul boolean, tipul struct i tipul enumerare. n categoria tipurilor referin se ncadreaz
tipurile tablou, ir de caractere i clas.
Tipurile ntregi
Tip
byte
sbyte
short
ushort
int
uint
long
ulong
Descriere
ntreg pe 8 bii fr semn
ntreg pe 8 bii cu semn
ntreg pe 16 bii cu semn
ntreg pe 16 bii fr semn
ntreg pe 32 bii cu semn
ntreg pe 32 bii fr semn
ntreg pe 64 bii cu semn
ntreg pe 64 bii fr semn
Domeniul de valori
0 .. 255
-128 .. 127
-32 768 .. 32 767
0 .. 65 535
-2 147 483 648 .. 2 147 483 647
0 .. 4 294 967 295
- 263 .. 263 - 1
0 .. 264 - 1
Descriere
tip cu virgul mobil, simpl precizie, pe 32 bii
(8 pentru exponent, 24 pentru mantis)
tip cu virgul mobil, dubl precizie, pe 64 bii
(11 pentru exponent, 53 pentru mantis)
tip zecimal, pe 128 bii (96 pentru mantis), 28
de cifre semnificative
Domeniul
de
valori
1.5 E-45 .. 3.4E+38
5E-324 .. 1.7E+308
1E-28 .. 7.9E+28
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
Operatori aritmetici
Operatori de incrementare/decrementare
Operatori relaionali
Operatori logici
Operatori de atribuire
Operatorul condiional
57
Semnificaie
Se mrete cu o unitate valoarea variabilei x, i apoi x
este utilizat n cadrul expresiei (preincrementare)
Se mrete cu o unitate valoarea variabilei x dup ce x
este utilizat n cadrul expresiei (postincrementare)
Se micoreaz cu o unitate valoarea variabilei x, i apoi x
este utilizat n cadrul expresiei (predecrementare)
Se micoreaz cu o unitate valoarea variabilei x dup ce
x este utilizat n cadrul expresiei (postdecrementare)
== (egal cu)
!= (diferit)
> (mai mare)
< (mai mic)
>= (mai mare egal)
<= (mai mic egal)
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
true
true
false
false
q
true
false
true
false
p && q
true
false
false
false
p||q
true
true
true
false
!p
false
false
true
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;
Operatorul condiional are forma:
expresie1 ? expresie2: expresie3
Dac expresia1 este adevrat, atunci se returneaz valoarea expresiei2, altfel se
returneaz valoarea expresiei3. Urmtoarea secven de instruciuni va returna maximul
dintre variabilele a i b.
x > y ? x : y;
protected void Page_Load(object sender, EventArgs e)
{ int x = 7, y = 2;
mainDiv.InnerHtml = "Maximul este " + (x > y ? x : y);
}
III.2.4.
Conversii
59
implicite
explicite.
Conversia implicit se efectueaz doar dac nu este afectat valoarea convertit.
Conversiile implicite sunt prezentate n tabelul urmtor:
Conversie
din
sbyte
byte
short
ushort
int
uint
long
char
float
ulong
n
short, int, long, float, double, decimal
short, ushort, int, uint, long, ulong, float, double, decimal
int, long, float, double, decimal
int, uint, long, ulong, float, double, decimal
long, float, double, decimal
long, ulong, float, double, decimal
float, double, decimal
ushort, int, uint, long, ulong, float, double, decimal
double
float, double, decimal
intermediul unui control Html <input type=text id =nr1 runat=server> se poate folosi
urmtoarea linie de cod:
int a;
a = Convert.ToInt32(nr1.Value);
III.2.5.
Funcii matematice
60
Funcia
Abs (x)
Ceiling (x)
Exp (x)
Floor (x)
Log (x)
Log10(x)
Max (x, y)
Min (x, y)
Pow (x, y)
Round (x, n)
Sqrt (x)
Truncate(x)
Descriere
Returneaz modulul unei valori numerice
Returneaz cel mai apropiat ntreg mai mare sau egal dect
valoarea trimis ca parametru.
Returneaz ex
Returneaz cel mai apropiat ntreg mai mic sau egal dect
valoarea trimis ca parametru.
Returneaz logaritmul natural.
Returneaz logaritmul n baza 10.
Returneaz maximul dintre 2 numere.
Returneaz minimul dintre 2 numere.
Returneaz xy
Returneaz cel mai apropiat ntreg sau un numr rotunjit cu
un anumit numr de zecimale.
Returneaz radicalul numrului trimis ca parametru.
Returneaz partea ntreag a numrului trimis ca parametru.
Exemplul 3.5
protected void Page_Load(object sender, EventArgs e)
{
mainDiv.InnerHtml = "Floor(3.75) = " + Math.Floor(3.75) + "<br/>";
mainDiv.InnerHtml += "Ceiling(3.25) = " + Math.Ceiling(3.25) + "<br/>";
mainDiv.InnerHtml += "Round(3.25) = " + Math.Round(3.25) + "<br/>";
mainDiv.InnerHtml += "Round(3.257) = " + Math.Round(3.257, 2) + "<br/>";
mainDiv.InnerHtml += "Round(3.249) = " + Math.Round(3.249, 2) + "<br/>";
mainDiv.InnerHtml += "Truncate(3.75) = " + Math.Truncate(3.75) + "<br/>";
mainDiv.InnerHtml += "Truncate(3.25) = " + Math.Truncate(3.25) + "<br/>";
}
III.2.6.
Instruciuni C#
Instruciuni decizionale.
n limbajul C# exist dou instruciuni decizionale: simpl (if) i multipl (switch).
61
Fiierul .aspx
public partial class _Default : System.Web.UI.Page
{
protected void calculeaza(object sender, EventArgs e)
{
int a, b, c, max;
a = Convert.ToInt32(nr1.Value);
b = Convert.ToInt32(nr2.Value);
c = Convert.ToInt32(nr3.Value);
max = a;
if (max < b) max = b;
if (max < c) max = c;
maxim.InnerText = "Maximul este: " + max.ToString();
}
}
Fiierul .aspx.cs.
62
Rezultatul
execuiei
este
urmtorul:
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
63
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;
default: instruciuni; break;
}
Fiierul .aspx
input
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
Rezultatul execuiei este urmtorul:
Figura 3.3
Instruciuni repetitive
Instruciunile repetitive n C# sunt:
65
<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
public partial class _Default : System.Web.UI.Page
{
protected void cmmdc(object sender, EventArgs e)
{
int a, b, r;
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
2. Instruciunea repetitiv do while are urmtoarea sintax:
do
{
instruciuni
}while (condiie);
66
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:
67
<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
public partial class _Default : System.Web.UI.Page
{
protected void calcul(object sender, EventArgs e)
{
int n = Convert.ToInt32(nr1.Value), s = 0, p = 1;
for (int i = 1; i <= n; i++)
{
p = p * i;
s = s + p;
}
rezultat.InnerText = s.ToString();
}
}
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.
69
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
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int[] v = { 1, 2, 3, 4 }; //initializarea elementelor din vector
int[] w = new int[10];
int poz;
//Afisarea elementelor
mainDiv.InnerHtml += "Elementelor vectorului sunt: ";
for (int i = 0; i < v.Length; i++) mainDiv.InnerHtml += v[i] + " ";
70
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/>";
//Cautarea unui element in vector
if (v.Contains(6) == true)
{
mainDiv.InnerHtml += "Elementul se gaseste in vector<br/>";
}
else
{
mainDiv.InnerHtml += "Elementul nu se gaseste in vector<br/>";
}
}
}
71
Figura 3.4
III.2.8.
iruri de caractere
De exemplu: string s;
La declarare, o variabil poate fi iniializat:
string s = "Hello World";
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.
73
Exemplul 3.24
Instruciunea s.IndexOf(s1, 0, 10, StringComparison.OrdinalIgnoreCase) caut prima
apariie a subirului s1 n primele 10 caractere din irul s, ncepnd cu poziia 10. Cutarea
nu este case sensitive.
III.2.9.
Date calendaristice
O variabil de tip dat calendaristic este un obiect care poate reine valori pentru
data i timp. Declararea unei variabile de acest tip este:
DateTime d1;
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:
1. Prin adugarea unui numr la o dat calendaristic, rezult o alt dat calendaristic.
Astfel,
se
pot
folosi
metodele
AddSeconds(valoare),
AddMinutes(valoare),
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:
d3 = new DateTime(2008, 10, 28);
d2 = new DateTime(2008, 10, 24);
mainDiv.InnerHtml += Math.Floor((d3 - d2).TotalDays) + "</br>";
Modelul client-server
75
ezultatul va fi: 4
76
IV.1.1.
Label
IV.1.2.
Aceste controale creeaz butoane de submit pentru pagina web. Proprietatea Text
reine irul de caractere afiat pe buton. n exemplul urmtor, la apsarea butoanelor se
execut codul C# asociat evenimentului click, i este modificat proprietatea text a unui
obiect Label.
imaginea. (dac fiierul imagine nu apare n folderul images, alegei opiunea refresh folder).
Modelul client-server
77
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:
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Label2.Text = "Ati apasat butonul 1 !";
}
protected void Button2_Click(object sender, EventArgs e)
{
Label2.Text = "Ati apasat butonul 2! ";
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
Label2.Text = "Ati apasat butonul 3! ";
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Label2.Text = "Ati apasat butonul 4! ";
}
}
78
IV.1.3.
TextBox
Modelul client-server
IV.1.4.
79
CheckBox, CheckBoxList
Controlul CheckBox permite crearea unei casete de marcare. Pentru a lucra cu mai
multe casete la nivel unitar, se folosete controlul CheckBoxList.
Controlul CheckBox are proprietatea Checked, care are valoarea True dac s-a bifat
caseta sau False n caz contrar. irul de caractere afiat n dreptul casetei, este reinut de
proprietatea Text.
Exemplul 4.3 n exemplul urmtor, dac este bifat prima caset i apoi se apas
butonul Ok, se modific proprietatea Text a controlului Label1. De asemenea, la apsarea
butonului Submit se modific proprietatea Text a obiectului Label2, fiind afiate oraele
selectate prin intermediul casetelor de bifare.
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";
}
}
80
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
anumit
proprietatea
caset,
Selected,
care
se
folosete
poate
avea
Modelul client-server
81
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.
protected void Button1_Click(object sender, EventArgs e)
{
if (RadioButton1.Checked == true)
{
Label1.Text = "Sunteti casatorit";
}
else if (RadioButton2.Checked == true)
{
Label1.Text = "Nu sunteti casatorit ";
}
}
82
IV.1.6.
RadioButtonList
2. n design mode:
Modelul client-server
IV.1.7.
83
BulletList
avea
valorile:
NotSet,
Numbered,
LowerAlpha,
UpperAlpha,
LowerRoman,
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:
<asp:BulletedList ID="BulletedList1" runat="server" BulletStyle="Square"
DisplayMode="HyperLink" Target="_blank">
<asp:ListItem
Value="http://msdn.microsoft.com/">MSDN</asp:ListItem>
<asp:ListItem
Value="http://www.microsoft.com">Microsoft</asp:ListItem>
<asp:ListItem
Value="http://www.microsoft.com/romania/">Microsoft
Romania</asp:ListItem>
</asp:BulletedList>
84
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
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:
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Value="movie1.jpeg">Jaws</asp:ListItem>
<asp:ListItem Value="movie2.jpeg">Casablanca</asp:ListItem>
<asp:ListItem
Value="movie3.jpeg">Breakfast
Tiffany's</asp:ListItem>
<asp:ListItem
Value="movie4.jpeg">Butch
&
The
Kid
back</asp:ListItem>
<asp:ListItem Value="movie5.jpeg">Forrest Gump</asp:ListItem>
</asp:DropDownList>
at
are
Modelul client-server
85
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.
<asp:HyperLink ID="HyperLink1" runat="server"
NavigateUrl="http://www.microsoft.com" Target="_blank">www.microsoft.com
</asp:HyperLink>
86
Modelul client-server
87
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.
public partial class _Default : System.Web.UI.Page
{
protected void BulletedList1_Click1(object sender, BulletedListEventArgs e)
{
MultiView1.ActiveViewIndex = Convert.ToInt32(e.Index);
}
}
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
HasFile
Descriere
Metod care returneaz true sau false dac utilizatorul a
selectat un fiier pentru upload
Metod care salveaz fiierul selectat pe server. Are ca
SaveAs
parametru calea destinaie
Proprietate care reine numele fiierului
FileName
Proprietate care conine informaii despre fiierul upload-at
PostedFile
Proprietate care returneaz tipul fiierului upload-at
ContentType
Proprietate care returneaz dimensiunea fiierului upload-at.
ContentLength
Exemplul 4.9 n urmtorul exemplu, fiierul va
fi upload-at ntr-un folder numit upload, construit n
cadrul proiectului (din fereastra Solution Explorer).
Informaiile despre fiierul upload-at vor fi afiate folosind un control de tip Label.
Modelul client-server
89
Codul C# care se execut la apsarea butonului Upload este cel care realizeaz
efectiv upload-ul fiierului selectat:
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
FileUpload1.SaveAs(@"C:\Documents and Settings\User\My Documents\Visual Studio
2008\WebSites\ASP_Projects\FileUpload\App_Data\upload\"+FileUpload1.FileName);
Label1.Text = "Ati upload-at fisierul: " + FileUpload1.FileName + "<br/>Tip: " +
FileUpload1.PostedFile.ContentType
+
"
<br/>
Dimensiune:
"
+
FileUpload1.PostedFile.ContentLength;
}
else
{ Label1.Text = "Nu ati selectat nici un fisier";}
}
}
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.
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.
Modelul client-server
91
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.
Exemplul 4.12 O alt situaie n care dorim generarea automat a
aciunii de post back este cazul controlului DropDownList. n
subcapitolul anterior am prezentat o aplicaie n care se selecta
denumirea unui film dintr-un DropDownList, apoi la apsarea unui buton
era afiat posterul filmului respectiv (ntr-un control de tip Image). Vrem
s modificm aplicaia, astfel nct afiarea imaginii s se realizeze
automat la selectarea filmului n DropDownList.
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,
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:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
TextBox1.Text = "0";
}
}
protected void Button1_Click1(object sender, EventArgs e)
{
TextBox1.Text = Convert.ToString(Convert.ToInt32(TextBox1.Text) + 1);
}
}
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
94
IV.3.5.
CustomValidator
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:
<asp:CompareValidator ID="CompareValidator1" runat="server"
ControlToValidate="DropDownList1" ErrorMessage="Nu ati selectat orasul!"
Operator="GreaterThan" Type="Integer" ValueToCompare="0">
</asp:CompareValidator>
Modelul client-server
95
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
Modelul client-server
97
IV.3.6.
Evaluare
98
ImageMap
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
AlternateText
HotSpotMode
Descriere
Textul care apare cnd user-ul poziioneaz mous-ul peste hot spot
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
n funcie de tipul de tip, un HotSpot poate avea i alte proprieti.
Tip HotSpot
Proprieti
Circle
X, Y, Radius coordonatele centrului cercului, i raza acestuia
Rectangle Bottom, Left, Right, Top coordonatele colurilor dreptunghiului din stanga
jos respectiv dreapta sus
Polygon
Coordinates list de perechi de coordonate pentru vrfurile poligonului
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
100
<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>
Figura 4.21 Imaginile i paginile .aspx corespunztoare fiecrui jude
Modelul client-server
IV.4.2.
101
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
ImageUrl
NavigateUrl
AlternateText
Keyword
Impressions
Descriere
Calea ctre fiierul care conine imaginea
URL-ul ctre care se realizeaz redirectarea la un click pe imagine
Textul care apare la poziionarea mouse-ului peste imagine
O categorie pentru reclama, dup care se pot realiza filtrri
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:
Modelul client-server
103
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
Day
DayWeek
DayWeekMonth
None
Descriere
Utilizatorul poate selecta doar o zi
Utilizatorul poate selecta o sptmn
Utilizatorul poate selecta o lun
Selecia unei date este dezactivat
selectarea
unei
date
de
ctre
utilizator,
se
genereaz
evenimentul
al doilea control DropDownList este iniializat cu anii din intervalul [an_curent 10,
an_curent +10].
Modelul client-server
105
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
Modelul client-server
IV.4.4.
1.
107
Evaluare
Realizai un site web care s conin informaii despre statele uniunii Europene.
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.
Descriere
Numele sursei de date
Cmpul din sursa de date care va popula proprietatea text a
controlului
DataValueField Cmpul din sursa de date care va popula proprietatea value a
controlului
DataBind
Metod care populeaz controlul cu datele din sursa de date
Exemplul 4.25
Aplicaia urmtoare folosete un control ListBox pentru care se poate modifica sursa
de date prin intermediul unor butoane radio.
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.
Modelul client-server
109
switch (RadioButtonList1.SelectedValue)
{
case "1": add(); break;
case "2": listItem(); break;
case "3": vector(); break;
case "4": xml(); break;
}
110
obiectului ViewState
Cookies
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
Fiierul .aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
if (ViewState["n"] == null)
{
ViewState["n"] = "0";
}
else
{
ViewState["n"] = Convert.ToInt32(ViewState["n"]) + 1;
}
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
Exemplul 4.29
n exemplul urmtor, datele introduse de utilizator ntr-o caset text, sunt salvate ntrun 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)
{
if (TextBox1.Text.Trim().Length > 0)
{
Response.Cookies["userName"].Value = TextBox1.Text;
Response.Cookies["userName"].Expires.AddMinutes(10);
//timpul de viata al cookie-ului este de 10 minute
}
Response.Redirect("Default2.aspx");
}
}
L
a
apsare
a
114
Exemplul 4.30
n pagina Default.aspx.cs, datele sunt citite din Cookie i afiate.
Modelul client-server
115
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:
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
string redirectUrl = "Default2.aspx?";
redirectUrl += "nume=" + TextBox1.Text;
redirectUrl += "&media=" + TextBox2.Text;
Response.Redirect(redirectUrl);
}
Exem
plul 4.32
n evenimentul Load asociat celei de a doua pagini, se realizeaz prelucrarea
valorilor:
public partial class Default2 : System.Web.UI.Page
{
Exemplul 4.33
Pe lng Response.Redirect, pentru a redirecta user-ul ctre o alt pagin, se poate
folosi
metoda
Transfer
obiectului
Server.
De
exemplu
Server.Transfer("Default2.aspx");
Aceast metod poate realiza un redirect doar ctre paginile web de pe server, dar
nu i ctre pagini web externe.
116
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:
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 idurile 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.
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Session.Add("nume", TextBox1.Text);
Session.Add("media", TextBox2.Text);
Response.Redirect("Default2.aspx");
}
}
Exemplul 4.38
n a doua pagin, datele sunt extrase din sesiune, i afiate prin intermediul unor
controale de tip Label.
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["nume"].ToString().Trim() != null)
{ Label1.Text = "Numele: " + Session["nume"].ToString().Trim();
}
if (Session["media"].ToString().Trim() != null)
{ Label2.Text = "Media " + Session["media"].ToString().Trim();
}
118
Exemplul 4.39
n urmtoarea aplicaie se folosete un
control Menu pentru navigarea ntre paginile
web.
Exist
dou
pagini,
prima
numit
Dac
utilizatorul
introduce
corect
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());
120
Exemplul 4.42
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:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Application.Add("counter", 0);
}
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).
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
int counter = Convert.ToInt32(Application.Get("counter").ToString());
counter++;
Application.Set("counter", counter);
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
int counter = Convert.ToInt32(Application.Get("counter").ToString());
counter--;
Application.Set("counter", counter);
}
Modelul client-server
121
Exemplul 4.44
Afiarea numrului de utilizatori conectai la un moment dat, se realizeaz n
evenimentul Load al fiecrei pagini:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
Label1.Text = "Numar de utilizatori conectati:" +
Application.Get("counter").ToString();
}
}
}
Exempl
ul 4.45
La ncrcarea unei noi pagini, valoarea din elementul counter va fi incrementat, iar
la nchiderea unei pagini, decrementat.
IV.6.7. Evaluare
1.
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
Ultima pagin va avea un link ctre o pagin de rezultat, n care se va afia rezultatul
testului.
2.
pagin. Enunul ntrebrilor i variantele de rspuns vor fi reinute prin intermediul vectorilor.
Navigarea ntre pagini se va realiza n dou moduri:
122
3.
Realizai o pagin web care pentru fiecare user afieaz prin intermediul unui
Request.ServerVariables("REMOTE_ADDR") pentru ip
Request.ServerVariables("HTTP_USER_AGENT")
pentru
tipul
de
browser
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;
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:
simultan determin
44
(n limba englez Hypertext Transfer Protocol) este metoda cea mai des utilizat pentru
accesarea informaiilor pstrate pe servere World Wide Web
125
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 matematicinformatic 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).
127
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
3) Pentru a mri viteza de accesare a unei baze de date Web trebuie s lucrm n stil
a. conectat
b. deconectat
c. server
c. interoperabilitate
b. durabilitate
d. concuren
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
I. 1-1
b. Main-Proprietar
II. 1-n
c. Carte-Autor
III. 2-n
d. Spectacol-Artist
e. ar-Preedinte
9) ntre dou entiti poate exista cel mult o relaie.
a. Adevrat
b. Fals
129
atunci
cnd
serverul
nu
este
pe
folosii
numele
de
server
SQLEXPRESS
indic faptul c v
130
fereastra
Database
Explorer,
baza
de
date
ce fel de date putem scrie pe acea coloan (numere, caractere, imagini etc.);
46
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:
. n exemplul din figura 5-6 se stabilete cheia primar idDep.
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
tabelei i alegei, din meniul contextual, opiunea
figura V-9
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
51
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.
n imaginile urmtoare avem descrierea i coninutul celor trei tabele.
134
tabelei permite afiarea relaiilor existente i introducerea altora. Numele unei relaii poate fi
generat automat i este prefixat de irul FK_ urmat de numele celor dou tabele. Acest
nume poate fi schimbat .
135
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
permite
grupului
Database
realizarea
Diagrams
diagramelor
136
permite/inhib
afiarea
numelui relaiilor.
Pentru modelul ales se obine diagrama din figura 5-18.
V.4.1. Evaluare
1) ntr-o tabel, o linie este obinut prin maparea
a. unei relaii
b. unui atribut
137
c. unei instane
d. unei constrngeri
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
b. fals
138
139
d) executm interogarea
55
56
140
WHERE <condiie>
GROUP BY <condiie>
HAVING <condiie>
putnd
ORDER BY <condiie>
fi
afiate
sau
pot
fi
utilizate
pentru
141
join permite prelucrarea datelor din dou sau mai multe tabele pe baza unor
criterii bine definite.
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.
142
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.
143
Funciile de grup sunt funcii care returneaz o singur valoare pentru fiecare grup
de linii dintr-un tabel. Principalele funcii de grup sunt :
COUNT (x) returneaz numrul de valori ale lui x;
Dac x este nlocuit de caracterul * atunci funcia determin numrul de linii
returnate iar dac x este precedat de cuvntul DISTINCT atunci funcia returneaz numrul
de valori distincte i nenule ale expresiei x.
n exemplul urmtor se afieaz numrul total de produse, numrul de produse cu
denumiri diferite i numrul de categorii.
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)
57
O subinterogare este o interogare aflat n interiorul unei alte comenzi SQL. Subinterogrile
sunt rulate ntotdeauna naintea comenzii n care sunt incluse.
145
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.
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.
147
148
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.
149
Dac lista de coloane lipsete trebuie s introducem valori pentru toate cmpurile
tabelei n ordinea n care au fost definite.
De exemplu, adugarea unui nou reper care s indice un volum al cumprturilor
mare atunci cnd numrul produselor comandate apaine intervalului [12,20] se poate face
150
151
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.
153
imaginea urmtoare) pentru c exist obiecte care acceseaz aceast coloan. n acest caz
trebuie s utilizm o tergere n cascad.
154
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
TRUNCATE TABLE <nume tabel>
ca n exemplul din figura urmtoare:
155
Comanda
156
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_
b) Fals
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
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
158
Oracle Data
Connection
SQL Server
Data Provider
SqlConnection
OLE DB
Data Provider
OleDbConnection
Oracle
Data Provider
OracleConnection
Command
SqlCommand
OleDbCommand
OracleCommand
DataReader
SqlDataReader
OleDbDataReader
OracleDataReader
DataAdapter
SqlDataAdapter
OleDbDataAdapter
OracleDataAdapter
159
figura V-21
160
cu
acea
surs.
Clasele
din
categoria
Connection
(SQLConnection,
unei
tranzacii
etc.
Aceste
clase
se
gsesc
subspaii
(SqlClient,
161
Proprieti
a) ConnectionString (String, cu accesori de tip get i set ) definete un ir care
permite identificarea tipului i sursei de date la care se face conectarea i eventual
contul i parola de acces. Conine lista de parametri necesari conectrii sub forma
parametru=valoare, separai prin ;.
Parametru
Descriere
Specific furnizorul de date pentru conectarea la sursa de date. Acest
Provider
Data Source
Initial Catalog
Integrated
Security 60
User ID
Password
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
Metode
a) Open(): deschide o conexiune la baza de date
b) Close() i Dispose(): nchid conexiunea i elibereaz toate resursele alocate pentru
ea
c) BeginTransaction(): pentru executarea unei tranzacii pe baza de date; la sfrit se
apeleaz Commit() sau Rollback().
d) ChangeDatabase(): se modific baza de date la care se vor face conexiunile. Noua
baz de date trebuie s existe pe acelai server ca i precedenta.
e) CreateCommand(): creeaz o comand (un obiect de tip Command) valid asociat
conexiunii curente.
Evenimente
a) StateChange: apare atunci cnd se schimb starea conexiunii. Handlerul corespunztor
(de tipul delegat StateChangeEventHandler) spune ntre ce stri s-a fcut tranziia.
b) InfoMessage: apare cnd furnizorul trimite un avertisment sau un mesaj ctre client.
163
pentru fiecare baz de date din folderul App_Data. Pentru a alege o conexiune se apas
dublu click pe fiierul . mdf n Solution Explorer.
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:
SqlConnection conn = new SqlConnection(StringConectare);
Pentru
preluarea
acestuia
este
necesar
includerea
spaiului
de
nume
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
165
166
167
Exemplul 3. Am adugat pe pagin o list de tip DropDownList pentru care sursa de date
este reprezentat de numele, denumirea i preul produselor.
168
V.6.5. Command
Clasele din categoria Command (SQLCommand, OleDbCommand etc.) conin date
referitoare la o comand SQL (SELECT, INSERT, DELETE, UPDATE) i metode pentru
executarea unei comenzi sau a unor proceduri stocate. Aceste clase implementeaz
interfaa IDbCommand. Ca urmare a interogrii unei baze de date se obin obiecte din
categoriile DataReader sau DataSet. O comand se poate executa numai dup ce s-a
stabilit o conexiune cu baza de date corespunztoare.
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
Metode
a) Constructori:
SqlCommand()
SqlCommand(string CommandText)
SqlCommand(string CommandText, SqlConnection con )
SqlCommand(string CommandText,SqlConnection con,SqlTransaction trans)
b) Cancel() oprete o comand aflat n executare.
c) Dispose() distruge obiectul comand.
169
SqlDataReader.
SqlCommand cmd = new SqlCommand("SELECT * FROM elevi",con);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read()) { Console.WriteLine("{0} - {1}",
reader.GetString(0),reader.GetString(1));
}
reader.Close();
primul rnd a setului de date rezultat; folosit pentru obinerea unor rezultate statistice.
Exemplu.
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM elevi",con);
SqlDataReader reader = cmd.ExecuteScalar();
Console.WriteLine(reader.GetString(0));
g)
ExecuteXmlReader()
interogare.
SqlCommand CMD=
new SqlCommand("SELECT * FROM elevi FOR XML MATE,EXAMEN", con);
System.Xml.XmlReader myXR = CMD.ExecuteXmlReader();
170
171
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
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.
173
174
64
SqlCommand cmd =
new SqlCommand("SELECT * FROM PRODUSE WHERE DENUMIRE = @den", conn);
Astfel, comanda
SELECT * FROM produse WHERE CodProdus = 34;
devine
SELECT * FROM produse WHERE CodProdus = @CodProdus;
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
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
177
string selectSQL=
"SELECT*FROM produse WHERE CodProdus='"+DropDownList2.SelectedItem.Value +"'";
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:
Selectarea unui item din list determin executarea evenimentului
DropDownList2_SelectedIndexChanged
178
179
stoc.
protected void ButonAdauga_Click(object sender, EventArgs e)
{
icp.Text = ipu.Text = il.Text = "";
idp.Text = ic.Text =ist.Text = text1.Text = "";
ButonInserare.Visible = true;
}
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.
180
Secvena de inserare a unui nou produs poate fi rescris , utiliznd comenzile parametrizate.
181
...
string insertSQL;
insertSQL = "INSERT INTO produse
(CodProdus,DenumireProdus,PretUnitar,Categorie,Stoc,Descriere) VALUES (";
insertSQL +=
"@CodProdus,@DenumireProdus,@PretUnitar,@Categorie,@Stoc,@Descriere)";
SqlCommand cmd = new SqlCommand(insertSQL, conn);
...
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
protected void ButonModificare_Click(object sender, EventArgs e)
{
string updateSQL;
updateSQL = "UPDATE produse
SET DenumireProdus=@DenumireProdus,PretUnitar=@PretUnitar,";
updateSQL += "Categorie=@Categorie, Descriere=@Descriere ";
updateSQL += "WHERE CodProdus=@CodProdus";
conn = new SqlConnection
("Data Source='.\\SQLEXPRESS';Initial Catalog=master; Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand(updateSQL, conn);
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();}
if (NrProduseModificate > 0) ListaProduse();
}
Dup modificare, lista de produse este actualizat, i sunt afiate noile valori pentru
produsul modificat.
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
Proprieti
InsertCommand,
185
SelectCommand,
UpdateCommand
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
popularea succesiv a unui DataSet prin intermediul unuia sau mai multor obiecte
DataAdapter, apelnd metoda Fill (vezi exemplul de mai sus)
actualizarea datelor
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.
DataSet dsProduse = new DataSet();
187
s utilizm comenzi care vor folosi mai multe tabele este recomandat construirea separat
a comenzilor i apoi ataarea lor adapterului, folosind proprieti.
Popularea DataSet-ului se face dup ce am construit cele dou instane:
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, ...
Un DataSet poate fi folosit ca surs de date pentru un DataGrid din ASP.Net .
Exemplu. 65
DataGrid dgProduse = new DataGrid();
dgProduse.DataSource = dsProduse;
dgProduse.DataMembers = "PRODUSE";
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
private void ListaProduse()
{
DropDownList2.Items.Clear();
string selectSQL =
"SELECT CodProdus,DenumireProdus,PretUnitar,Stoc,Descriere FROM produse";
conn = new SqlConnection(StringConectare);
SqlCommand cmd = new SqlCommand(selectSQL, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
try{conn.Open();
// Toate informatiile sunt transferate folosind o singura comanda
// care creaza o tabela noua numita produse n DataSet.
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);
}
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.
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.
191
Modelul conceptual ataat unei aplicaii poate fi generat automat prin selectarea din
Solution Explorer a opiunii AddNew Item
Pentru generare putem folosi tabelele unei baze de date deja contruit sau putem crea
un model conceptual nou.
192
193
194
ds.Relations.Add(Clienti_Comenzi);
ds.Relations.Add(Produse_Comenzi);
foreach (DataRow client in ds.Tables["Clienti"].Rows)
{text1.Text += "<br /><b>" + client["NumeClient"];
text1.Text += " " + client["PrenumeClient"] + "</b><br />";
foreach (DataRow comanda in client.GetChildRows(Clienti_Comenzi))
{foreach (DataRow produs in comanda.GetParentRows(produse_Comenzi))
{
text1.Text += " ";
text1.Text += produs["DenumireProdus"] + "<br />";
}
}
}
195
196
.i
197
Secvenele de cod SQL din procedura stocat pot fi selectate i executate separat.
198
V.10.1.
Controalele de server Web ASP.NET pot fi legate la o baz de date prin folosirea
controlului DataSource.
Toate controalele pentru sursa de date includ interfaa IDataSource i se gsesc
n seciunea Data a meniului Toolbox din Visual Studio.
.NET Framework include urmtoarele controale pentru sursa de date:
SqlDataSource permite conectarea la orice surs de date care are un
provider ADO.NET (SQL Server, Oracle, ODBC, OLE DB) 67;
AccessDataSource permite conectarea la o baz de date Access .mdb 68;
ObjectDataSource permite conectarea la o clas personalizat definit
pentru accesul la date. Aceast soluie este preferat de cei mai muli dezvoltatori
ns necesit scrierea unui volum mare de cod;
XmlDataSource permite conectarea la un fiier XML;
66
199
200
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:
red o gril 69 multi-coloan, complet ablonat i permite afiarea tabelelor
mari.
este ideal pentru afiarea la un moment dat a unei singure nregistrri dintro tabel, ntr-un tabel ce are o singur linie pentru fiecare cmp i permite editarea;
69
201
Definirea coloanelor
n mod implicit, proprietatea GridView.AutoGenerateColumns este True astfel nct
se genereaz o coloan pentru fiecare cmp al tabelei legate. Aceast proprietate trebuie
setat pe False atunci cnd dorim s afim doar o parte dintre coloane sau atunci cnd
vrem s schimbm ordinea n care sunt afiate sau chiar formatul de afiare.Selectarea
coloanelor se va face n seciunea Columns a tag-ului GridView.
Coloanele vor fi afiate n ordinea n care sunt scrise n aceast seciune.
Coloanele pot avea tipuri diferite, pe lng cele de baz n care afieaz textul dintr-un
cmp al unei coloane din tabel (
202
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 :
70
203
204
Un control de tip GridView permite selectarea unui rnd din tabel atunci cnd
proprietatea ShowSelectButton a coloanei de tip CommandField este setat la True.
<asp:CommandField ShowSelectButton="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.
selectat.
Pentru
aceasta
trebuie
selectm
proprietatea
205
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:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [clase]"
DeleteCommand="DELETE FROM [clase] WHERE idClasa=@idClasa"
UpdateCommand="UPDATE clase SET profil=@profil,
specializare=@specializare, intensiv=@intensiv WHERE idClasa=@idClasa">
</asp:SqlDataSource>
Pentru exemplificare,se modific valoarea din cmpul intensiv pentru clasa 9F.
206
71
207
208
<asp:FormView ID="FormView1" runat="server" AllowPaging="True"
DataSourceID="SqlDataSource1">
<ItemTemplate>
<b>Clasa:</b>
<%# Eval("idClasa") %><br />
<b>Profil:</b>
<%# Eval("profil") %><br />
<b>Specializare:</b>
<%# Eval("specializare") %><br />
</ItemTemplate>
</asp:FormView>
Controlul
coninutului controlului prin repetarea unui ablon specificat pentru fiecare element din lista
legat. Se definete cte un ablon ASP.NET pentru fiecare categorie de elemente: antet,
subsol, separator, etc.) iar controlul l aplic repetat pe pagin.
Controlul Repeater nu conine nicio
structur grafic
209
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>
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
Controlul
210
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.
SelectedItemTemplate
controleaz
cum
este
afiat
elementul
selectat
iar
cancel
UpdateCommand,
select.
Evenimentele
DeleteCommand,
predefinite
asociate
CancelCommand,
(EditCommand,
SelectedIdexChanged)
corespunztoare.
V.10.4.3 DropDownList
Controlul
211
n exemplul urmtor elementele listei derulante sunt preluate din tabela clase.
DataTextField= "CP" i
selecia
SELECT idClasa+ + profil AS CP FROM clase;
V.10.4.4 CheckBoxList
Controlul
elemente din list care pot fi bifate, fiecare fiind redat printr-un control CheckBox individual.
O list de casete de validare se insereaz astfel:
Legarea
la
date
se
realizeaz
prin
utilizarea
proprietilor:
DataSource,
212
La un moment dat , un control CheckBoxList poate avea unul sau mai multe elemente
selectate.
Toate
controalele
list
au
proprietate
Items
este
implementat
prin
intermediul
clasei
V.10.4.5 RadioButtonList
Controlul
Legarea
proprietile:
la
date
DataSource,
se
realizeaz
DataMember,
prin
utilizarea
DataTextField,
DataValueField i DataTextFormatString.
Aceste proprieti se comport n acelai mod ca
proprietile controalelor descrise anterior.
V.10.5.
213
Evaluare
d.2
d.3
d.4
d.5
d.6
d.7
d.8
d.9
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
Modul de autentificare
Descriere
Anonim
Windows Integrated
Aplicatie
web
disponibila pe Internet, dar cu
acces privat.
Windows Integrated
Aplicatii
comerciale.
Forms Authentication
web
VI.1.Windows Authentication
n acest mod de autentificare, aplicaia ASP .NET are ncorporate procedurile de
autentificare, dar se bazeaz pe sistemul de operare Windows pentru autentificarea
utilizatorului.
1. Utilizatorul solicit o pagin securizat de la aplicaia Web.
2. Cererea ajunge la Serverul Web IIS care compar datele de autentificare ale
utilizatorului cu cele ale aplicaiei (sau ale domeniului)
3. Dac acestea dou nu corespund, IIS refuz cererea utilizatorului.
4. Calculatorul clientului genereaz o fereastr de autentificare,
5. Clientul introduce datele de autentificare, dup care retrimite cererea ctre IIS
6. IIS verific datele de autentificare, si n cazul n care sunt corecte, direcioneaz
cererea ctre aplicaia Web.
7. Pagina securizat este returnat utilizatorului.
215
VI.2.Forms-Based Authentication
Atunci cnd se utilizeaz autentificarea bazat pe formulare, IIS nu realizeaz
autentificarea, deci este necesar ca n setrile acestuia s fie permis accesul anonim.
1. n momentul n care un utilizator solicit o pagin securizat, IIS autentific
clientul ca fiind un utilizator anonim, dup care trimite cererea ctre ASP.NET.
2. Acesta verific pe calculatorul clientului prezena unui anumit cookie1
3. Dac cookie-ul nu este prezent sau este invalid, ASP.NET refuz cererea
clientului si returneaz o pagin de autentificare (Login.aspx).
4. Clientul completeaz informaiile cerute n pagina de autentificare si apoi trimite
informaiile.
5. Din nou, IIS autentific clientul ca fiind un utilizator anonim si trimite cererea ctre
ASP .NET
6. ASP.NET autentific clientul pe baza informaiilor furnizate. De asemenea
genereaz si un cookie. Cookie reprezint un mic fisier text ce pstreaz diverse
informaii despre utilizatorul respectiv, informaii folosite la urmtoarea vizit a sa
pe site-ul respectiv, la autentificare, sau n diverse alte scopuri.
7. Pagina securizat cerut si noul cookie sunt returnate clientului. Atta timp ct
acest cookie rmne valid, clientul poate solicita si vizualiza orice pagin
securizat ce utilizeaz aceleasi informaii de autentificare.
i uneltele din
216
VII.
Pentru realizarea unui site web dinamic, trebuie parcurse urmtoarele etape:
Proiectarea interfeei
n continuare vom prezenta, pas cu pas, realizarea unui site web dinamic care ofer
informaii despre filme.
VII.1.
Realizarea interfeei
VII.1.1.
MasterPages
217
Pentru a aduga o pagin MasterPage, din meniul Website se alege opiunea Add
New Item, i apoi MasterPage:
La adugarea n proiect a unei noi pagini .aspx, se poate selecta pagina MasterPage
care conine layout-ul dorit pentru site-ul web.
218
Figura 7.4 La adugarea unei noi pagini .aspx se bifeaz opiunea Select master page
219
Movie.aspx va afia o list cu toate filmele din baza de date, sau anumite filme
conform unui criteriu de filtrare.
220
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:
Seciunea de logo
221
Coloana este format din dou casete de informaii, fiecare fiind definit de un div.
222
<%@ Master Language="C#" AutoEventWireup="true"
CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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>
VII.1.2.
Foi de stiluri
223
Observaie: Acest lucru se poate realiza i prin drag and drop a fiierului
StyleSheet.css (din fereastra Solution Explorer) n seciunea de head a fiierului
MasterPage.master.
Visual Web Developer pune la dispoziie un editor css foarte puternic. Avnd deschis
fiierul StyleSheet.css putei avea acces la opiunile Add Style Rule, respectiv Build Style.
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.
224
225
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.
VII.1.3.
Pentru a finaliza layout-ul paginii master, vom aduga urmtoarele controale web server:
Pentru seciunea de logo, un obiect hyperlink.
<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>
227
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:
229
VII.1.4.
Conectarea la sursa de date a controalelor din
MasterPage
Pentru controlul AdRotator selectm ca surs de date o baza de date Sql Server.
230
Figura 7.29 Selectarea bazei de date filme ca surs de date
La pasul urmtor salvm connection string pentru a-l putea reutiliza i la celelalte
surse de date. Acest ir de caractere va fi salvat n fiierul web.config.
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.
231
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
232
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
233
Cookie
Control (un alt control web din pagin, de exemplu un control textBox)
Form
Profile
QueryString
Session
VII.2.
Home.aspx
234
VII.3.
Movie.aspx
n aceast pagin sunt afiate filmele din baza de date i se poate realiza filtrarea
acestora dup anumite criterii.
235
Sursa de date din GridView va fi un obiect DataSet. Adugarea unui obiect DataSet
se poate realiza prin intermediul opiunii Add New Item.
236
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
237
238
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:Panel ID="Panel1" runat="server" BorderStyle="Solid" BorderWidth="1px">
<asp:Label ID="Label1" runat="server" Font-Bold="True" ForeColor="White"
Text="Filtrare dupa:"></asp:Label><br />
<table>
<tr>
<td>
<asp:RadioButton ID="RadioButton1" runat="server" AutoPostBack="True"
Font-Bold="True" ForeColor="White" GroupName="filtru" oncheckedchanged =
"RadioButton1_CheckedChanged" Text="Categorie" />
</td>
<td>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
CssClass="textBox" Enabled="False"
onselectedindexchanged="DropDownList1_SelectedIndexChanged"
TabIndex="6" Width="131px">
239
<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>
</tr>
</td>
<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().
240
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)
La ultimul pas vom alege numele
motodei.
241
Acelai procedeu l vom folosi i pentru filtrarea dup criteriile nume i categorie:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
ObjectDataSource1.SelectMethod = "GetDataByCategory";
ObjectDataSource1.SelectParameters.Clear();
ObjectDataSource1.SelectParameters.Add(new Parameter("categoria",
TypeCode.String, DropDownList1.SelectedValue));
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
if (TextBox1.Text.Length > 0)
{
ObjectDataSource1.SelectMethod = "GetDataByName";
ObjectDataSource1.SelectParameters.Clear();
ObjectDataSource1.SelectParameters.Add(new Parameter("nume",
TypeCode.String, TextBox1.Text));
}
}
242
VII.4.
n
aceast
pagin
Detalii.aspx
putem
243
Pentru afiarea i modificarea informaiilor pentru un film, vom folosi un control de tip
DetailsView
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
CellPadding="4" DataKeyNames="id" DataSourceID="ObjectDataSource1"
ForeColor="#333333" GridLines="None" Height="50px"
HorizontalAlign="Center" Width="420px">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
CommandRowStyle BackColor="#FFFFC0" Font-Bold="True" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<FieldHeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
<PagerStyle BackColor="#FFCC66"ForeColor="#333333"HorizontalAlign="Center" />
<Fields>
<asp:BoundField DataField="nume" HeaderText="Denumirea:"SortExpression="nume" />
<asp:BoundField DataField="regizor" HeaderText="Regizorul:"SortExpression="regizor"/>
<asp:BoundField DataField="data_aparitie" HeaderText="Data aparitiei:"
SortExpression="data_aparitie" />
<asp:BoundField DataField="incasari" HeaderText="Incasari:"SortExpression="incasari"/>
<asp:BoundField DataField="actori" HeaderText="Actori:" SortExpression="actori" />
<asp:ImageField DataImageUrlField="poza"
DataImageUrlFormatString="images/movies/{0}" HeaderText="Poster:">
</asp:ImageField>
<asp:HyperLinkField HeaderText="Upload imagine" Text="upload"
DataNavigateUrlFields="id"DataNavigateUrlFormatString="Upload.aspx?id={0}" />
<asp:BoundField DataField="categoria"HeaderText="Categoria:"SortExpression="categoria"/>
<asp:CommandField ButtonType="Image" CancelImageUrl="~/images/delete.png"
EditImageUrl="~/images/edit.png" ShowEditButton="True"
UpdateImageUrl="~/images/edit.png" />
</Fields>
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp: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:
244
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.
245
246
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
247
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,
aceast
pagin
trebuie
inclus
spaiul
de
nume
System.Web.Configuration:
using System.Web.Configuration;
248
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{ FileUpload1.SaveAs(Server.MapPath(".") + "/images/movies/" + FileUpload1.FileName);
int id = Convert.ToInt32(Request.QueryString["id"]);
if (id > 0)
{SqlConnection conn = new SqlConnection
(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
conn.Open();
string updateString = @"UPDATE film SET poza = @fileName WHERE id = @id";
SqlCommand cmd = new SqlCommand(updateString, conn);
cmd.Parameters.AddWithValue("@id", id.ToString());
cmd.Parameters.AddWithValue("@fileName", FileUpload1.FileName);
cmd.ExecuteNonQuery();
Server.Transfer("Detalii.aspx?id=" + id);
}
else
{Session["uploadedFileName"] = FileUpload1.FileName;
Server.Transfer("AdaugaFilm.aspx");
}
}
}
VII.6.
AdaugFilm.aspx
controalele
de
tip
TextBox
sau
prin
249
<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">
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
252
valoarea False.
Cnd utilizatorul selecteaz o dat calendaristic, se completeaz controlul textBox
corespunztor:
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
txtData.Text = Calendar1.SelectedDate.ToShortDateString();
}
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.
253
La apsarea butonului Adaug, datele vor fi salvate n baza de date i terse din
sesiune:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection
(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
conn.Open();
string insertString = "INSERT INTO film (nume, data_aparitie, incasari, regizor,
actori, poza, categoria)";
insertString += " VALUES (@nume, @data, @incasari, @regizor, @actori, @poza,
@categoria)";
SqlCommand cmd = new SqlCommand(insertString, conn);
cmd.Parameters.AddWithValue("@nume", txtDenumire.Text.Trim());
cmd.Parameters.AddWithValue("@data", Convert.ToDateTime(txtData.Text));
cmd.Parameters.AddWithValue("@incasari",Convert.ToInt32(txtIncasari.Text.Trim()));
cmd.Parameters.AddWithValue("@regizor", txtRegizor.Text.Trim());
cmd.Parameters.AddWithValue("@actori", txtActori.Text.Trim());
254
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
255
Figura 7.63
Al doilea pas este de tip Finish
256
257
<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
Pentru a trimite efectiv mail-ul, folosim clasa SmtpClient. Trimiterea unui mail presupune
existena unui server Smtp. n exemplul de mai jos, folosim server-ul smtp oferit gratis
utilizatorilor Gmail. Parametrii username@gmail.com respectiv username@gmail.com trebuie
nlocuii cu datele contului de mail.
259
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.
260
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?
261