You are on page 1of 221

BEOGRADSKA POSLOVNA KOLA

Objektno orijentisano programiranje


(slajdovi sa predavanja)
Mr. Goran Aritonovi

Beograd 2008.

Uvod u objektno orijentisano


programira
nje

Tipovi programa
Mainski programi
Raunar ih moe neposredno razumeti
Program se sastoji samo od 0 i 1
Asemblerski programi
Sastoje se od naredbi kojima se
jednoznano pridruuju mainske
naredbe
Naredbe su mnemonike skraenice rezumljive
oveku npr. LD (LoaD)
Programi pisani na jeziku visokog nivoa
Naredbe programa visokog nivoa su
bliske engleskom jeziku
4

Mainski program
11000010 00000000 00101000 00101100
11000100 00000000 00101000 00110000
10000110 10001000 11000000 00000000

Asemblerski program
LD R1, x
LD R2, y
ADD R0, R1, R2
Uitaj sadraj promenljive x u registar R1
procesora
Uiraj sadraj promenljive y u registar R2
procesora
Saberi sadraj registara R1 i R2 i rezultat
sauvaj u registru R0
Ono to elimo programom je x+z
6

Prevoenje programa visokog


nivo
a

Proceduralno programiranje

Proceduralno programiranje razdvaja podatke i kod koji


manipulie tim podacima
Procedura ili funkcija je skup imenovanih naredbi programa
Glavni program je sekvenca poziva procedura
Glavni program predaje podatke proceduri i od nje
dobija rezultate izvravanja
Procedura se ne moe koristiti u drugom programu
Reenje grupisanje procedura u module tj. Modularno programiranje
Programski jezici kao to su C i Pascal su proceduralni programski jezici

Izvravanje proceduralnog programa

Modularno programiranje

Program se sastoji iz vie modula


Svaki modul ima svoje podatke
Svaki modul ima samo jedno stanje i svaki
modul postoji najvie jednom u programu
(jednoj instanci)

10

Objektno orijentisano programiranje


1

Program se izvrava razmenom poruka izmeu objekata

11

Objektno orijentisano programiranje2


Objektno orijentisano programiranje
je nain programiranja programska
paradigma
Objektno orijentisano programiranje (OOP) je
pristup realizaciji softvera kao modela
realnog sveta
OOP uvodi drugaiji nain razmiljanja u programiranje
U OOPu mnogi vie vremena se troi na
projektovanje a manje na samu implementaciju
(programiranje, kodovanje)
U OOPu se razmilja o objektima delovima
sistema koji neto rade a ne o algoritmima tj.
kako se neto radi
C# je objektno orijentisani programski jezik
12

ta je
objekat ?
Neformalno, objekat pretstavlja neki
entitet bilo fiziki, konceptualni ili
logiki(software)
Fiziki entitet
Kamion

Konceptualni entitet
Hemijski proces

Softverski entitet
Jednostruko spregnuta lista

13

Formalna definicija objekta


Objekat pretstavlja koncept,
apstrakciju ili stvar sa jasnim
granicama i znaenjem sa aspekta
neke primene.
Objekat (model entiteta realnog sveta)

Ima svoj identifikator


Stanje
Ponaanje

14

Kreiranje apstrakcije objekta


Treba razlikovati objekte u realnom
svetu i softversku predstavu objekta

Apstrakcija podrazumeva
eliminisanje detalja da bi se
ilustrovale glavne take nekog
koncepta

Apstrakcija predstava objekta iz realnog sveta

Apstrakcije nam omoguavaju


rukovanje sloenou
koncentracijom na esencijalne
karakteristike po kojima se jedan
entitet razlikuju od drugih

15

Primer apstakcije

Prodavac
Bez navoenja Koji prodavac samo
prodavac u optem smislul!!!

Proizvod
Kupac
16

ta je
klasa?
Klasa je opis (model) grupe
objekata koji poseduju skup
zajednikih: svojstava
(atributa), ponaanja
(operacije/metode), veza i
znaenja
Skup atributa
Skup operacija

Klasa pretstavlja APSTRAKCIJU jer:


Naglaava relevantne karakteristike
Potiskuje sve ostale karakteristike
17

Odnos klase i objekata


Klasa :
To je model koji opisuje kako kreirati objekat

je kao ematski plan(skica)


Sadri podatke i metode

Objekti:
Objekat je predstava nekog entiteta iz
realnog sveta
Instance klase
Moe biti vie objekata (instanci) klase
18

Primer klase i objekata


Objekti

19

C# i .NET Framework

20

.NET Framework
.NET Framework je razvojno
okruenje koje omoguava kreiranje
.NET aplikacija
Predstavlja osnovu .NET platforme
Sastoji se iz dve komponenti:
Common Language Runtime (CLR)
virtualna maina odgovorna za
izvravanje koda
.NET framework biblioteka klasa, biblioteka
klasa koja omoguava kreiranje windows,
web aplikacija
i web servisa
21

Struktura .NET Frameworka


Programming Lan
Langua
guages
ADO.
ADO.NET, Window
Windows forms,
ASP.NET, Glo
Globalizati
balization, Sec
Security
.NET Frame
Framework Class Library
Common Language Runtime
Operating System

22

Princip rada .NET Frameworka


Visual Studio .NET je integrisano
razvojno okruenje (IDE) koje
omoguava kreiranje .NET aplikacija
Kada se kompajlira aplikacija u Visual Studio
.NETu source kod se translira u tzv. Microsoft
Intermediate Langusge (MSIL)
Posle kompajliranja runtime
upravlja izvravanjem
aplikacije
Runtime ukljuuje karakteristiku koja se naziva
JIT
just in time compilation, transliranje MSIL koda
u mainski kod
23

Visual C# 2005 Express Edition

24

Kreiranje novog projekta

FileNew Project, Console Application


25

Konzolna aplikacija

26

Prvi C#
program

Izvravanje programa poinje od Main() metode


using kljuna re se odnosi na korienje .NET
Framework biblioteke klasa
Klase u .NET Frameworku su organizovane u tzv. namespace
ove (prostore imena)
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World !!!");
}
}
}
27

Formatiranje koda u C#
svaka aplikacija ima Main() metodu
definisanu
u jednoj od njenih klasa
Main() metoda je statika to znai da
je globalna, i klasa se ne mora
instancirati da bi se metoda pozvala
Main() metoda je javna
C# razlikuje velika i mala slova
Klasa Console se nalazi u namespaceu
System
28

Metode WriteLine i ReadLine


Ulazni parametar ove metode je string
koji treba prikazati u konzoli (DOS
prozoru)
Posle ispisa teksta kursor prelazi u novi red
Odmah nakon ispisa teksta konzola se zatvara
Da bi tekst ostao na ekranu metoda ReadLine
Metoda eka korisniki unos koji se zavrava
pritiskom na taster ENTER
static void Main(string[] args)
{
Console.WriteLine("Hello World !!!");
Console.ReadLine();
}

29

Pisanje komentara

Komentar je tekst koji se ignorie od strane kompajlera


Komentar u jednoj liniji pie se korienjem znaka //
Komentar u vie linija /* */

static void Main(string[] args)


{
Console.WriteLine("Hello World !!!");
// metoda ReadLine() ceka ENTER da bi se izvrsila
/* metoda ReadLine prihvata tekst koji korisnik unosi u konzoli i
nakon pritiska na taster ENTER smesta ga u string promenljivu
koju treba definisati */
Console.ReadLine();
}
30

Osnove C#
jezika

31

Formatiranje C# koda
Program je skup instrukcija naredbi
Naredba se zavrava oznakom ;
Iako je mogue pisati vie naredbi u
istoj liniji, dobra je praksa da se u
svakoj liniji pie samo po jedna
naredba
Prazan prostor u editoru koda se
ignorie od strane kompajlera
Grupisanje naredbi (kreiranje bloka naredbi)
vri se korienjem litiastih zagrada {}
32

Identifikat
ori
Imena ili identifikatori se koriste
za oznaavanje osnovnih objekta
jezika : konstanti promenljivih,
funkcija i tipova podataka
Ime moe sadrati slovo, cifru
i znak podvlaenja _
Ime ne sme poinjati cifrom
U svojstvu imena ne smeju se
koristiti rezervisane rei jezika
Velika i mala slova se razlikuju (x i X
su dve razliite promenljive)
33

Ugraeni tipovi podataka


Ugraeni tipovi podataka su
oni koje obezbeuje C# i .NET
frejmvork
Tipovi se koriste za deklarisanje
promenljivih i konstanti
Promenljive se moraju deklarisati pre
nego to mogu da se koriste
Promenljive uvaju razliite tipove podataka
Mogue je definisati sopstvene
tipove podataka
34

Tipovi
podataka

Osnovni tipovi podataka su :


object osnovni tip za sve ostale tipove
Celobrojni tip
int
short
long
uint

Realni tip
float
double
decimal

Znakovni tip:
char
string

35

Pregled ugraenih tipova


podataka

36

Celobrojni
tip

Celi brojevi se predstavljaju nizom cifara kojima se moe pridruiti znak +


ili
Promenljivoj tipa int se dodeljuje onoliko memorijskog
prostora kolika je osnovna jedinica memorije ( 4 bajta)
Tip short obezbeuje da dati tip ne zauzima vie memorijskog
prostora od tipa int (2 bajta)
Tip long obezbeuje da dati tip ne zauzima manje
memorijskog prostora od tipa int (8 bajtova)
Tip uint (unsigned int) se koristi za oznaavanje nenegativni
celih promenljivih, ime se opseg pozitivnih brojeva
udvostruuje u odnosu na osnovni tip (4 bajta)

37

Realni
tip
float realni brojevi jednostruke tanosti (4
bajta)
double realni brojevi dvostruke tanosti (8
bajtova)
Promenljive tipa double zauzimaju
dva puta memorijskog prostora od
tipa float
Kada se napie broj sa decimalnom
takom , onda je on tipa double
ukoliko e drugaije ne naznai

38

Deklarisanje i inicijalizacija
promenljiv
ih
Promenljiva
je objekat
jezika
koji ima
ime i
kome
mogu
dodeljivati
razliite
vrednosti
tokomse
izvravanja
programa
Deklarisanje
Navodi se tip i identifikator (ime) promenljive
Deklaracija se zavrava oznakom ;
int brojStudenata;
string zanimanje;
Deklarisanje vie promenljivih istog tipa
int x, y;
Deklarisanje i inicijalizacija
Promenljivoj se dodeljuje identifikator i
inicijalna vrednost
string zanimanje = student;
Deklaracija i inicijalizacija vie promenljivih istog tipa
int p = 2, q = 3;

39

Primeri deklaracija
int mojInt;
mojInt = 1;
ili
int mojInt = 1;
Broj sa decimalnom takom podrazumevano je tipa double
decimal stanjeNaRacunu = 3433.20; // greka !!!
decimal stanjeNaRacunu = 3433.20M;

40

Tabela sufiksa za oznaavanje


promenljiv
ih

float f = 12.3F;

41

Karakte
ri
Karakteri (char) tip podataka se
inicijalizuje navoenjem
odgovarajueg karaktera izmeu
jednostrukih znakova navoda
Za uvanje promenljive tipa char
koristi se dva bajta (unicode karakteri)
Znakovna konstanta je ceo broj
ije je vrednost jednaka kodu
navedenog znaka prema unicode
standardu

char mojKarakter = 'a';

42

Escape karakteri

char jednostrukiNavodnik = '\'';

43

Deklaracija i inicijalizacija
stringova
String je sekvenca alfanumerikih karaktera
Stringovi se piu izmeu dvostrukih
znakova navoda
string s = "Hello World ; // Hello World
string s = "\"Hello\""; // "Hello"
string s = "Hello\nWorld"; // dodaje se nova linija
string s = @"Hello\n"; // Hello\n

string sample = "c:\\My Documents\\sample.txt";


string sample = @"c:\My Documents\sample.txt";

Verbatim string

44

Konstan
te
Objekti jezika koji dobijaju vrednost
pre nego to pone izvravanje
programa i u toku rada programa ne
menjaju vrednost nazivaju se
konstante
Konstante se koriste za uvanje
vrednosti koje se ne mogu promeniti u
toku izvravanja programa
Deklariu se korienjem kljune rei const
Moraju se inicijalizovati u trenutku deklaracije
const int earthRadius = 6378;//km
const long meanDistanceToSun = 149600000;//km
const double meanOrbitalVelocity = 29.79D;//km sec
45

Operato
ri

46

Osnovni operator dodeljivanja


Izraz je sekvenca operatora i operanada
Konstante ili promenljive koje uestvuju u
izrazima nazivaju se operandi
Operator je simbol koji precizira koju akciju
treba izvriti nad operandima
Operacije nad jednim operandom nazivaju
se unarne operacije, a operacije nad dva
operanda nazivaju se binarne operacije
Osnovni operator dodeljivanja je binarni i
predstavlja se simbolom =
Osnovni operator dodeljivanja ( = ) prouzrokuje
da se vrednost operanda na desnoj strani dodeli
operandu na levoj strani
Operatori dodeljivanja imaju najnii prioritet
47

Primeri upotrebe osnovnog operatora dodeljivanja


x = 10;

Promenljivoj x se dodeljuje vrednost 10

y = x;

Promenljivoj y se dodeljuje vrednost promenljive x

x = x + 1;

Promenljivoj x se dodeljuje stara vrednost promenljive x


uveana za broj 1

48

Pregled operatora

Aritmetiki operatori
Inkrementiranje i Dekrementiranje
Operatori poreenja
Logiki operatori

49

Aritmetiki operatori
Aritmetike operacije su:
Mnoenje (*)
Deljenje (/)
Celobrojni ostatak (%)
Sabiranje i oduzimanje (+, )

Najvei prioritet ima unarni minus,


zatim multiplikativne operacije i na
kraju su aditivne operacije
50

Primer upotrebe aritmetikih


operator
a
int prviInt, drugiInt;
float prviFloat, drugiFloat;
prviInt = 17;
drugiInt = 4;
prviFloat = 17;
drugiFloat = 4;
Console.WriteLine("Celobrojno deljenje:\t{0}\nRealno deljenje:\t{1}",
prviInt / drugiInt, prviFloat / drugiFloat);
Console.WriteLine("Ostatak pri celobrojnom deljenju {0} sa {1} je: \t{2}",
prviInt, drugiInt, prviInt % drugiInt);
Console.ReadLine();

51

Inkrementiranje i dekrementiranje
Operacija inkrementiranja (++)
Operacija dekrementiranja ()
Obe operacije mogu imati prefiksni
oblik tj. nalaze se ispred promenljive i
postfiksni oblik tj. nalaze se iza
promenljive
Veeg su prioriteta od aritmetikih operacija
y = ++x;

x =x+1;
y =x;

y = x++;

y =x;
x =x+1;

52

Primeri prefiksnog i sufiksnog operatora


int x = 1;
x++; // x je sada 2
Console.WriteLine("x={0}", x);
++x; // x je sada 3
Console.WriteLine("x={0}", x);
int y;
x = 2;
y = x++; // y je sada 2 a x je 3
Console.WriteLine("x={0} y={1}", x, y);
x = 6;
y = ++x; // x i y imaju vrednost 7
Console.WriteLine("x={0} y={1}", x, y);

53

Operatori sloenog dodeljivanja


x += 2;
x *= 2;
x -= 2;
x /= 2;
x %= 2;

// x = x+2;
// x = x*2;
// x = x-2;
// x = x/2;
// x = x%2;

54

Operatori poreenja

Operacije poreenja su:


Vee (>)
Vee ili jednako (>=)
Manje (<)
Manje ili jednako (<=)
Jednako (==)
Razliito (!=)
Rezultat izvravanja operacije je logika vrednost true
ako je uslov ispunjen, u suprotnom je false.
Manjeg su prioriteta od aritmetikih operatora

55

Primer upotrebe operatora poreeja


bool a, b, c, d;
a = 3 < 5; /* manje */
b = 5 > 3; /* vece */
c = 3 == 5; /* jednako */
d = 3 != 5; /* razlicito */
Console.WriteLine(" a = {0} b = {1} c = {2} d = {3}", a, b, c, d);

56

Logike operacije

Negacija (!)
Konjukcija logiko I (&&)
Disjunkcija logiko ILI (||)
Rezultat logikih operacija je bool promenljiva true ili false
Operacija negacije je unarna i daje true ako je operand false
Operacija konjukcije je binarna i daje true ako oba
operanda imaju vrednost true
Operacija disjunkcije je binarna i daje true ako je
bar jedan od operanada ima vrednost true
Imaju nii prioritet od operacija poreenja
Najvei prioritet ima operacija negacije, zatim
konjukcija i na kraju disjunkcija

57

Primer upotrebe logikih operacija


bool a, b;
a = 3 > 5;
b = 5 > 3;
Console.WriteLine("Konjunkcija : 3>5 && 5>3 - {0}\n", a && b);
Console.WriteLine("Disjunkcija : 3>5 || 5>3 - {0}\n", a || b);
Console.WriteLine("Negacija : !(3>5) - {0}\n", !a);

58

Korienje zagrada
Operator dodeljivanja je desno
asocijativan tj. Izraunava se sa desne
na levu stranu
Binarni operatori su levo
asocijativni tj. Izraunavaju se sa
leve na desnu stranu
Redosled izvravanja operatora u
izrazu moe se promeniti korienjem
zagrada

59

Grananja u programu

60

Naredba
if
if(izraz)
naredba1;
Ako je rezultat izraunavanja vrednosti izraza
izraz logiki istinita vrednost tj. true izvrava
se naredba1
i
prelazi se
na sledeu
naredbu programa. Ukoliko je vrednost izraza
izraz false ne izvrava se naredba naredba1
ve se prelazi na sledeu naredbu programa.

if ( izraz )
{ naredba
1;
naredba2;
}

Naredba if sa blokom naredbi.

61

Primer upotrebe naredbe if


int b = -3;
//int b = 5;
bool izraz = true;
izraz = b > 0;
if (izraz)
Console.WriteLine("Broj je pozitivan\n");
Console.WriteLine("Kraj programa\n");

int b = -3;
//int b = 5;
if( b > 0)
Console.WriteLine("Broj je pozitivan\n");
Console.WriteLine("Kraj programa\n");

62

if(izraz)
naredba1;
else
naredba2;

Naredba if
else

Ako je rezultat izraunavanja


vrednosti
izraza
izraz
logiki
istinita vrednost true onda se
izvrava naredba1.
Ako
je
vrednost
izraza izraz
logiki
neistinita vrednost false, onda
se izvrava se naredba naredba2.
Posle
izvravanja
naredbe
naredba1 ili naredbe naredba2
prelazi sena
sledeu
naredbu
programa.

If(izraz)
{
naredba1;
naredba2;
}
else
naredba3;
{
naredba4;
}

63

Primer upotrebe ifelse naredbe


int b = 3;
if (b < 0)
Console.WriteLine("Broj je negativan\n");
else
Console.WriteLine("Broj nije negativan\n");
Console.WriteLine("Kraj programa\n");

64

if(izraz1)
naredba1;
else if(izraz2)
naredba2;
else
naredba3;

ifelse
if

Ako je izraz izraz1 taan


izvrava
se
naredba
naredba1.
Ako
izraz
izraz1 nije taan ali je izraz
izraz2 taan
izvrava
se
naredba naredba2. Ako nisu
tani ni izraz
izraz1
ni
izraz izraz2 izvravase
naredba
naredba3.

if ( uslov1 )
{
B1;
}
else if ( uslov2 )
{
B2;
}
else
{
B3;
}

65

Primer upotrebe ifelse if naredbe


int b = 4;
if (b < 0)
Console.WriteLine("Broj je negativan\n");
else if (b == 0)
Console.WriteLine("Broj je nula\n");
else
Console.WriteLine("Broj je pozitivan\n");
Console.WriteLine("Kraj programa\n");

66

Primer upotrebe ifelse naredbe sa blokom naredbi


decimal x, y;
string sx, sy;
Console.WriteLine("Ucitaj broj x:\n");
sx = Console.ReadLine();
x = Convert.ToDecimal(sx);
Console.WriteLine("Ucitaj broj y:\n");
sy = Console.ReadLine();
y = Convert.ToDecimal(sy);
if (x >= y )
{
x *= 2;
y *= 2;
}
else
{
x = -x;
y = -y;
}
Console.WriteLine("Nova vrednost x je {0} a y je {1} " , x, y);
Console.WriteLine("Kraj programa\n");
67

Petlj
e

68

While
petlja
Opti oblik while petlje je:
while(izraz)
naredba;

while(izraz)
{
naredba1;
....
naredban;
}

Ako je vrednost izraza true izvrie se naredba ili blok naredbi


koji ine telo ciklusa
Zatim se ponovo izraunava vrednost izraza i ako
je on taan ponovo se izvravaju naredbe koje ine
telo ciklusa
Svaki taj korak naziva se iteracija
Unutar tela ciklusa moraju postojati naredbe
koje menjaju parametre koje ulaze u uslov
ciklusa
69

Primeri upotrebe while petlje


int brojac = 0;
while (brojac < 10)
{
Console.WriteLine("{0}\n", brojac);
brojac++;
}
int a = 0;
float b = 0;
while (a <= 100)
{
b = a / 2.54f;
Console.WriteLine("{0} cm = {1} incha \n", a, b);
a += 5;
}

70

Primeri beskonane petlje


int brojac = 0;
while (true)
{
Console.WriteLine("{0}\n", brojac);
brojac++;
}

int brojac = 0;
while (brojac != 10)
{
Console.WriteLine("{0}\n", brojac);
brojac += 4;
}

71

Petlja
for
Naredba for koristi se u
situacijama kada je unapred
poznat broj ciklusa
Naredba for ima sledeu strukturu:
for(inicijalizacija; provera_uslova;korekcija)
naredba;
for(inicijalizacija; provera_uslova;korekcija)
{ naredba_
1;
naredba_2;
.....
naredba_n;
}
72

Objanjenje mehanizma rada for ciklusa


inicijalizacija predstavlja
setovanje poetne vrednosti
brojaa petlje (boja petlje broji
iteracije tj.cikluse)
Ako provera_uslova daje rezultat
true tj. predstavlja logiki tanu
vrednost telo ciklusa se izvrava
jedanput tj. izvrava se naredba ili
blok naredbi
Zatim se izraunava vrednost
korekcije , obino se vri
inkrementiranje brojaa
Zatim se ponovo vri provera_uslova
Ako provera_uslova ponovo da
rezultat true ponovo se izvrava
telo cikljusa ,....
Iz ciklusa se izlazi kada
provera_uslova da vrednost false

73

Redosled izvravanja zadataka u for ciklusu

Inicijalizacije se izvrava samo jedanput


Provera uslova za izvravanje tela
ciklusa se izvrava na poetku svake
iteracije
Na kraju svake iteracije vri se korekcija
Poto je for ciklus sa preduslovom
mogue je da se telo ciklusa ne izvri
nijednom
Telo ciklusa moe biti samo jedna
naredba ili blok naredbi (skup
naredbi izmeu litiastih zagrada
74

Primeri upotrebe for petlje


for (int i = 0; i < 10; i++)
Console.WriteLine("{0}\n", i*2);

int j = 0;
for (int i = 0; i < 10; i++)
{
j = 2 * i + 1;
Console.WriteLine("i = {0}\t j = {1}\n", i,j);
}

75

Specijalni sluajevi ciklusa for


for(;provera_uslova;)
naredba;
ekvivalentno
while(provera_uslova)
naredba
int i = 0;
for (;i<10 ; )
{
Console.WriteLine("{0}\n",i);
i++;
}

76

Beskonana for petlja


for(;;)
naredba
ekvivalentan sa
while(true)
naredba

for (; ; )
{
Console.WriteLine("Pozdrav.\n");
}

77

Naredba
break
Koristi se za prevremeni zavretak ciklusa
int i = 0;
for (; ; )
{
Console.WriteLine("Pozdrav.\n");
if (i > 9)
break; i+
+;
}

78

Naredba continue
Naredba continue prekida izvravanje
tekue iteracije ciklusa i prelazi na
sledeu iteraciju
int i;
for (i = 0; i < 10; i++)
{
if (i % 2 == 1)
continue; // ako je i neparan predji na sledecu iteraciju
Console.WriteLine("i={0}\n", i);
}

79

Naradba viestrukog izbora

80

Uslovna naredba ?:
Koristi se za skraeno zapisivanje naredbe if-else.
(izraz1) ? izraz2 : izraz3

Ako je izraz izraz1 true izvrava se izraz izraz2 u


protivnom se izvrava izraz izraz3.

81

Primer upotrebe uslovne naredbe


int x, y;
string sx;
Console.WriteLine("Ucitaj broj x:\n");
sx = Console.ReadLine();
x = Convert.ToInt32(sx);
y = (x > 0) ? x : -x;
Console.WriteLine("Apsolutna vrednost broja {0} je {1}\n", x, y);

82

Naredba viestrukog izbora switch

Omoguava organizaciju grananja u programu


izborom jedne od vie naredbi
Moe se realizovati sa vie if operatora
Iza kljune rei switch navodi se izraz ija je
vrednost celobrojna ili znakovna koji se
naziva selektor
Naredbom viestrukog izbora se izvrava ona
grupa naredbi ispred koje se nalazi konstanta koja
je jednaka vrednosti selektora
U sluaju da vrednost selektora nije jednaka
nijednoj od konstanti izvrava se grupa naredbi
iza default direktive
Naredba break se koristi da bi se izalo iz switch
naredbe neposredno posle izvravanja
odgovarajue grupe naredbi

83

Opti oblik naredbe switch


switch(izraz)
{
case konstanta1:
naredba1_1;
naredba1_2;
....
break;
case konstanta2:
naredba2_1;
naredba2_2;
....
break;
......
case konstantan:
naredban_1;
naredban_2;
.....
break;
default:
naredbaX_1;
naredbaX_2;
......

break;
}
84

Primer upotrebe naredbe switch


switch (n)
{
case 0:
Console.WriteLine("Uneli ste nulu\n");
Console.WriteLine("tj. broj 0.\n");
break;
case 2:
Console.WriteLine("Uneli ste dvojku\n");
Console.WriteLine("tj. broj 2.\n");
break;
case 4:
Console.WriteLine("Uneli ste cetvorku\n");
Console.WriteLine("tj. broj 4.\n");
break;
case 6:
Console.WriteLine("Uneli ste sesticu\n");
Console.WriteLine("tj. broj 6.\n");
break;
case 8:
Console.WriteLine("Uneli ste osmicu\n");
Console.WriteLine("tj. broj 8.\n");
break;
default:

int n;
string sn;
Console.WriteLine("Ucitaj broj n:\n");
sn = Console.ReadLine();
n = Convert.ToInt32(sn);

Console.WriteLine("Uneli ste ili neparan broj ili paran broj koji nije manji od 10\n");
Console.WriteLine("tj. nesto sto nije trazeno.\n");
break;
}
85

Primer upotrebe naredbe switch


int n;
string sn;
Console.WriteLine("Ucitaj broj n:\n");
sn = Console.ReadLine();
n = Convert.ToInt32(sn);
switch (n)
{
case 0:
case 2:
case 4:
case 6:
case 8:
Console.WriteLine("Uneli ste paran broj koji je manji od 10\n");
Console.WriteLine("tj. Uneli ste 0, 2, 4 , 6 ili 8.");
break;
default:
Console.WriteLine("Uneli ste ili neparan broj ili paran broj koji nije manji od
10\n");
Console.WriteLine("tj. nesto sto nije trazeno.\n");
break;
}
86

Dowhile petlja, konverzije izmeu


tipova podataka, enumeracije

87

Opti oblik ciklusa dowhile


do
naredba;
while(izraz);

do
{ naredba_
1;
naredba_2;
...
naredba_n;
}
while(izraz);

88

Princip rada ciklusa dowhile


Naredba ili blok naredbi koje ine telo
ciklusa se izvrava bar jednom
Provera uslova se vri na kraju ciklusa
Ako je vrednost izraza tano
ponovo se izvava telo ciklusa
Kada vrednost izraza dobije vrednost
netano izlazi se iz ciklusa

89

Primer upotrebe dowhile ciklusa


string odaberiString;
int odaberi = 0;
do
{ Console.WriteLine("\n")
;
Console.WriteLine("\n1 - Dodaj zapis");
Console.WriteLine("\n2 - Promeni zapis");
Console.WriteLine("\n3 - Obrisi zapis");
Console.WriteLine("\n4 - Izadji");
Console.WriteLine("\n");
Console.WriteLine("\nUnesite vas izbor: ");
odaberiString = Console.ReadLine();
// sve dok se sa tastature unosi 1 ,2 ili 3 ostaje se u petlji
odaberi = Convert.ToInt32(odaberiString);
Console.WriteLine("Uneli ste vrednost {0}\n", odaberi);
} while (odaberi > 0 && odaberi < 4);

90

Konverzija izmeu tipova


implicitna
izvrava je kompjler u sluaju da ne
dolazi do odsecanja informacija
int x = 123456 ;
long y = x ;
eksplicitna
eksplicitno se trai od kompajlera
da izvri konverziju (kastovanje)
int x = 65537 ;
short z = (short) x ;
// z = 1

91

Enumeracijski tipovi
enum Planet {
Mercury,
Venus,
Earth,
Mars
}
Definie se unutar klase ili unutar namespace-a,
Ne unutar metode !

Planet aPlanet = Planet.Mars;


Console.WriteLine("{0}", aPlanet); //Displays Mars
int x = (int)Planet.Mars;
Console.WriteLine("x= {0} ",x);
Console.ReadLine();

92

Pojam klase i objekta

93

Osnovni koncepti OOPa

Apstraktni tipovi podataka


Enkapsulacija
Nasleivanje
Polimorfizam

94

Apstraktni tipovi podataka


ugraeni (osnovni, primitivni tipovi
podataka) nrp. float, int , double
object,...
Ravnopravno se definiu
korisniki definisani tipovi
apstraktni tipovi
podataka : TekuciRacun, Osoba, Student,
Proizvoljan broj primeraka nekog
tipa i mogu se vriti operacije
nad njima

95

Enkapsulac
ija
Grupisanje podataka i koda koji manipulie podacima
Enkapsulacija se ostvaruje korienjem klase kao
novog tipa podataka
Realizija nekog tipa podataka moe i treba da se
sakrije od ostatka sistema tj. onih koji ga koriste
Korisnicima se definie ta se sa tipom moe uraditi
a nain na koji se to radi se skriva

96

Odnos klase i objekata


Klasa :
To je model koji opisuje kako kreirati objekat
je kao ematski plan(skica)
Sadri podatke i metode

Objekti:
Objekat je predstava nekog entiteta iz
realnog sveta
Instance klase
Moe biti vie objekata (instanci) klase
97

Ilustracija odnosa klase i objekata


Klas
Klasa
a

Covered Porch

Bath

Office

kitche
n
Famil
Dinin
g
Roo
m

Living
Room

Roo
m

Objekti
Objekti

98

Dodavanje klase u Visual Studiu

Desni klik na naziv projekta


99

Definisanje klase i kreiranje


objekat
a

100

Definisanje klase
Klasa predstavlja apstraktnu predstavu skupa objekata koji imaju
iste osobine. Sastoji se od atributa i metoda.Atributi i metode
se nazivaju lanice klase. Objekat predstavlja konkretan
primerak- instancu klase.

class TekuciRacun
{
public string imePrezime;
public decimal stanjeNaRacunu;
}

101

Instanciranje klase (kreiranje


objekata)
class Program
{
static void Main(string[] args)
{
TekuciRacun trNeki = new TekuciRacun();
trNeki.imePrezime = "Mika Mikic";
trNeki. stanjeNaRacunu = 24567.9874M;
Console.WriteLine("Korisnik {0} ima {1} dinara na racunu",
trNeki.imePrezime, trNeki. stanjeNaRacunu);
Console.ReadLine();
}
}

102

Metode
klase
Metode klase predstavljaju funkcije lanice klase.
Svaka metoda sadri :
tip koji vraa (ili void ukoliko ne vraa nikakav tip)
naziv(ime metode)
listu parametara
telo metode
Ukoliko metoda vraa neku vrednost, onda se unutar tela metode mora
pozvati naredba return.

103

Primeri
metoda
public decimal podizanjeNovca(decimal iznos)
{
// stanjeNaRacunu = stanjeNaRacunu - iznos;
stanjeNaRacunu -= iznos;
return stanjeNaRacunu;
}

public decimal uplata(decimal iznos)


{
stanjeNaRacunu += iznos;
return stanjeNaRacunu;
}

104

Pozivanje metoda klase


static void Main(string[] args)
{
TekuciRacun tr = new TekuciRacun();
tr.imePrezime = "Pera Peric";
tr.stanjeNaRacunu = 23456.45M;
decimal novoStanje = tr.stanjeNaRacunu;
Console.WriteLine("{0} ima trenutno {1} dinara na racunu.\n",
tr.imePrezime, novoStanje);
novoStanje = tr.podizanjeNovca(5434.45M);
Console.WriteLine("{0} ima trenutno {1} dinara na racunu.\n",
tr.imePrezime, novoStanje);
novoStanje = tr.uplata(56678.34M);
Console.WriteLine("{0} ima trenutno {1} dinara na racunu.\n",
tr.imePrezime, novoStanje);
Console.ReadLine();
}
105

Konstruktori, predavanje
parametara metodi

106

Definisanje konstruktora
Konstruktor predstavlja specijalnu metodu klase pomou koje
se vri inicijalizacija objekata klase. Konstruktor ima isto ime kao i klasa.
Konstruktor ne vraa nikakav tip podataka, ak ni void.

// podrazumevani konstruktor
public TekuciRacun()
{
imePrezime = "";
stanjeNaRacunu = 0.0M;
}
// parametarski konstruktor
public TekuciRacun(string imeP, decimal stRac)
{
imePrezime = imeP;
stanjeNaRacunu = stRac;
}

107

Poziv konstruktora
// poziv podrazumevanog Konstruktora
TekuciRacun tr1 = new TekuciRacun();
tr1.imePrezime = "Pera Peric";
tr1.stanjeNaRacunu = 34567.45M;
// poziv parametarskog kontruktora
TekuciRacun tr2 = new TekuciRacun("Laza Lazic", 38999.56M);

108

Predavanje parametara po
vrednos
ti
// metodi se prosledjuje parametar po vrednosti
public void citajStanje(decimal ocitanoStanje)
{
ocitanoStanje = stanjeNaRacunu;
}

static void Main(string[] args)


{
TekuciRacun tr3 = new TekuciRacun("Zika Zikic", 48999.56M);
decimal novoStanje = 0M;
// pokusaj da se preko metode citajStanje procita stanje na racunu
tr3.citajStanje(novoStanje);
Console.WriteLine(novoStanje);
Console.ReadLine();
}
109

Rezultat predavanja
parametara po vrednosti
Promenljiva novoStanje e i posle pozivanja metode
citajStanje imati vrednost 0. Razlog tome je to
se unutar
f-je
citajStanje
kreira
lokalna
kopija
promenljive
novoStanje , dok sama promenljiva ostaje ne
promenjena.
Dakle, ako se promenljiva predaje funkciji po
vrednosti ona ne moe biti promenjena unutar tela te
funkcije !!!

110

Predavanje parametara po referenci


Spoljanj objekat (promenljiva) koja se predaje funkciji moe promeniti
svoju vrednost samo ako se predaje po referenci. Predavanje po
referenci se u C# oznaava korienjem kljune rei ref.

public void citajStanje(ref decimal ocitanoStanje)


{
ocitanoStanje = stanjeNaRacunu;
}

111

Primer predavanja parametara


po referenci
static void Main(string[] args)
{
TekuciRacun tr3 = new TekuciRacun("Zika Zikic", 48999.56M);
decimal novoStanje = 0M;
// pokusaj da se preko metode citajStanje procita stanje na racunu
tr3.citajStanje( ref novoStanje);
Console.WriteLine(novoStanje);
Console.ReadLine();
}

Kljuna re ref se mora koristiti i prilikom poziva funkcije.


Ako se ne eli da se promenljiva (objekat) koje se predaje funkciji
prethodno inicijalizuje, umesto rei ref koristi se kljuna re out.
112

Statiki lanovi klase, prava pristupa


lanovim klase, svojstva

113

Statiki lanovi klase

Pripadaju klasi a ne objektu klase


Pristupa im se preko imena klase
I metode i atributi mogu biti statiki
Mogu se pozivati i bez kreiranja objekata klase

114

Primer definisanja statikog lana


class TekuciRacun
{
public string imePrezime;
public decimal stanjeNaRacunu;
public static int brojRacuna = 0;
public TekuciRacun()
{
imePrezime = "";
stanjeNaRacunu = 0.0M;
brojRacuna++;
}

115

Upotreba statikog lana


// inicijalizacija statickog clana pre kreiranja objekata
TekuciRacun.brojRacuna = 9999;
TekuciRacun tr1 = new TekuciRacun();
Console.WriteLine(TekuciRacun.brojRacuna);
TekuciRacun tr2 = new TekuciRacun();
Console.WriteLine(TekuciRacun.brojRacuna);
Console.ReadLine();

116

Definisanje prava pristupa lanovima


klas
e
Definicija

Deklarcija
public

Pristup nije ogranien

private

Pristup je ogranien na lanove klase

internal

Pristup je ogranien na aplikaciju

protected

Pristup je ogranien na lanove klase i klasa


izvedenih iz te klase.

protected internal

Kombinacija internal i protected

117

Ilustracija prava pristupa


class TekuciRacun
{
public string imePrezime;
private double stanjeNaRacunu;
}

static void Main(string[] args)


{
TekuciRacun tr1 = new TekuciRacun();
tr1.imePrezime = "Mika Mikic";
tr1.stanjeNaRacunu = 4567.45; // greka !
}

118

Svojstva(Properties)
class TekuciRacun
{
public string imePrezime;
private double stanjeNaRacunu;
public double Stanje
{
get
{
return stanjeNaRacunu;
}
set
{
stanjeNaRacunu = value;
}
}
}
119

Upotreba svojstva
static void Main(string[] args)
{
TekuciRacun tr1 = new TekuciRacun();
tr1.imePrezime = "Mika Mikic";
tr1.Stanje = 23456.56; // set deo
Console.WriteLine("Korisnik {0} ima na racunu {1} dinara \n",
tr1.imePrezime, tr1.Stanje); // get deo
Console.ReadLine();
}

120

Virtuelne metode, nasleivanje i


polimorfiza
m

121

Nasleivan
je
Nasleivanje je vrsta relacije imeu osnovne(bazne)
klase i izvedenih klasa
Izvedena klasa nasleuje podatke i metode
osnovne klase
Izvedena klasa ima lanove
svojstvene samo izvedenoj klasi
Izvedena klasa postaje vie specijalizovana
Zivotinja

Pas

122

Nasleivan
je
Predstavlja jedan od osnovnih koncepata
objektno orijentisanog programiranja
Klasa koja je izvedena iz osnovne klase
nasleuje sve atribute i metode osnovne
klase
Osnovna klasa se naziva jo i natklasa,
bazna klasa ili super klasa
Izvedena klasa se naziva jo i podklasa
Izvedena klasa moe da nasledi samo jednu natklasu
public class B : A { telo klase B } //(klasa B
izvedena iz klase A)
public seald class NekaKlasa {telo
klase} tada se iz ovakve klase ne moe
vriti nasleivanje

123

Osnovna klasa
class A
{
public int a1;
private int a2;
protected int a3;
public A()
{
a1 = 1;
a2 = 2;
a3 = 3;
}
public void stampajA()
{
Console.WriteLine("Vrednosti a1 a2 i a3 su {0} {1} {2}\n", a1, a2, a3);
Console.WriteLine("---------------------------");
}
}

124

Izvedena
klasa
class B:A
{
public int b;
public B()
{
b = 100;
}
public void stampajB()
{
// mogu da pozovem funkciju osnovne klase
base.stampajA();
Console.WriteLine("Vrednost b je {0} ", b);
Console.WriteLine("***************************");
}
static void Main(string[] args)
{
// main metoda je smestena unutar klase B radi ilustracije
// protected prava pristupa
}

125

Ilustracija procesa nasleivanja


static void Main(string[] args)
{
B objB = new B();
// objB je nasledio a1,a2 i a3
Console.WriteLine("Pre setovanja vrednosti su :\n ");
// objekat objB je nasledio i metodu stampajA
objB.stampajA();
objB.stampajB();
objB.a1 = 11;
// za objB atribut a3 je javni
objB.a3 = 13;
objB.b = 120;
Console.WriteLine("Posle setovanja vrednosti su : \n");
objB.stampajB();
Console.ReadLine();
}

126

Poziv specificiranog baznog konstruktora


iz
izvedene
klase
Prilikom kreiranja objekta izvedene
klase ako se drugaije ne naznai poziva
se podrazumevani konstruktor osnovne
klase
Ako osnovna klasa ima pored
podrazumevanog i parametarski
konstruktor npr.
public A(int novoA){ telo konstruktora}
tada se on moe pozvati prilikom kreiranja
objekta izvedene klase ako se konstruktor
izvedene klase definie
:
public B(int nekoA, int nekoB): base(nekoA)
{... telo konstruktora}
127

Polimorfiza
m
Objekti klase ivotinja

Pozvana metoda

Karakteristika

Slon

Jede ()

Jede travu

Maka

Jede ()

Jede mia

Mi

Jede ()

Jede sir

Polimorfizam je ponaanje nasleenog tipa na njemu svojstven nain.

128

Virtuelne metode
Kada se kreira metoda u baznoj
klasi za koju se oekuje da e
biti promenjena u izvedenoj
klasi , metoda se definie kao
virtuelna.(virtual)
Metoda u izvedenoj klasi koja ima
isto ime kao i virtuelna metoda u
baznoj klasi vri
prebrisavanje (override) metode
iz bazne klase
129

Pisanje virtuelnih metoda


metoda osnovne klase:
public virtual void stampaj()
{
Console.WriteLine(Metoda osnovne klase);
}

metoda izvedene klase:


public override void stampaj()
{
Console.WriteLine(" Metoda izvedene klase);
}

130

Primer bazne klase sa definisanom


virtuelnom metodom
class A
{
private int a;
public A()
{
a = 99;
Console.WriteLine("Poziv podrazumevanog konstruktora osnovne klase");
}
public A(int novoA)
{
a = novoA;
Console.WriteLine("Poziv parametarskog konstruktora osnovne klase");
}
public virtual void stampaj()
{
Console.WriteLine("Parametar a ima vrednost: " + a);
}
}

131

class B:A
{
private int b;
public B()
{
b = 11;
Console.WriteLine("Poziv podrazumevanog konstruktora izvedene klase");
}
// poziv parametarskog konstruktora osnove klase
// inace bi se pozivao podrazumevani konstruktor osnovne klase
public B(int nekoA, int nekoB) :base(nekoA)
{
Console.WriteLine("Poziv parametarskog konstruktora izvedene klase");
b = nekoB;
}
public override void stampaj()
{
// mogu da pozovem funkciju osnovne klase
base.stampaj();
Console.WriteLine(" \nVrednost b je {0} ", b);
}
}
132

Demonstracija polimorfizma i poziva


specificiranog konstruktora bazne klase
static void Main(string[] args)
{
B objB1 = new B();
Console.WriteLine("*******************************************"); B
objB = new B(88, 99);
objB.stampaj();
Console.ReadLine();
}

133

Primer: nasleivanje, polimorfizam


class Osoba
{
protected string JMBG;
protected string imePrezime;
protected string adresa;
public Osoba()
{
JMBG = "";
imePrezime = "";
adresa = "";
}
public Osoba(string JMBG1, string ImePrezime1, string Adresa1)
{
JMBG = JMBG1;
imePrezime = ImePrezime1;
adresa = Adresa1;
}
public virtual void prikazi()
{
Console.WriteLine("Ime i prezime: {0} \nJMBG: {1}\nAdresa:
{2}",imePrezime,JMBG,adresa);
Console.WriteLine("**************************************");
}
}

Bazna klasa

134

Izvedena klasa
class Student : Osoba
{
private string brIndeksa;
private int godina;
public Student()
{
brIndeksa = "";
godina = 0;
}
public Student(string JMBG1, string ImePrezime1, string Adresa1, string BrojIndeksa1, int
Godina1)
: base(JMBG1, ImePrezime1, Adresa1)
{
brIndeksa = BrojIndeksa1;
godina = Godina1;
}
public override void prikazi()
{
base.prikazi();
Console.WriteLine("Broj indeksa: " + brIndeksa + " Godina: " + godina);
Console.WriteLine("-----------------------------------");
}
}

135

static void Main(string[] args)


{
Osoba os1 = new Osoba("22222222", "Pera Peric", "N Heroja 1");
// poziva se metoda klase osoba
os1.prikazi();
Student st = new Student("1111111111", "Mika Mikic", "Vodovodska 1",
"14/03", 2);
Osoba os2 = new Osoba();
os2 = st; // objekat izvedene klase se moze dodeliti objektu bazne klase
os2.prikazi();
// poziva se prikazi() izvedene klase
Student st1 = new Student("1566556", "Laza Lazic", "Cara Dusana 1",
"16/03", 2);
st1.prikazi();
// poziva se prikazi() izvedene klase
Console.ReadLine();
}

136

Apstraktne klase i interfejsi

137

Apstraktne klase
Apstraktna metoda je prazna metoda tj.
metoda koja nema implementaciju (nema
ni prazno telo)
Klasa koja ima bar jedan apstraktniu
metodu naziva se apstraktna klasa
Ispred apstraktnih metoda i apstraktnih
klasa stavlja se kljuna re abstract
Apstraktna klasa ne moe da se instancira
Apstraktna klasa moe imati i metode
koje nisu apstraktne
Klasa izvedena iz apstraktne klase
mora da realizuje(da implementaciju)
svih apstraktnih metoda
138

Nasleivanje apstraktne metode


public abstract class A
{
.
// apstraktna metoda
public abstract void prikazi();
}
..
public class B : A
{

// realizacija metode apstraktne klase


public void prikazi()
{
Conslole.WriteLine(Realizacija);
}

139

Interfej
si
Interfejs je koncept koji razdvaja
specifikaciju metode od njene
implementacije
Svaka metoda u interfejsu ima samo
specifikaciju bez implementacije
Interfejs se ne moe instancirati
Koristi se kljuna re interface
Interfejs moe da nasledi vie interfejsa
Klasa moe da nasledi vie interfejsa
Metoda koja realizuje metodu iz interfejsa
mora biti javna
140

Dodavanje interfejsa

141

Definisanje interfejsa
interface IOsoba
{
void Napuni(string MLB1,string ImePrezime1,string Adresa1,
string BrojIndeksa1, int Godina1);
void Prikazi();
}

142

Implementiranje interfejsa
class Student:IOsoba
{
private string MLB;
private string ImePrezime;
private string Adresa;
private string BrojIndeksa;
private int Godina;
public void Napuni(string MLB1, string ImePrezime1, string Adresa1)
{
MLB = MLB1;
ImePrezime = ImePrezime1;
Adresa = Adresa1;
}
public void studentskiPodaci(string brojIndeksa1, int godina1)
{
BrojIndeksa = brojIndeksa1;
Godina = godina1;
}
public void Prikazi()
{
Console.WriteLine("MLB: " + MLB + " ImePrezime: " + ImePrezime + " Adresa:" + Adresa);
Console.WriteLine("Broj indeksa: " + BrojIndeksa + " Godina: " + Godina);
}
}
143

Poziv metoda klase koje implementiraju


interfe
js
static void Main(string[] args)
{
Student st = new Student();
st.Napuni("B123434", "Pera Peric", "Beogradska 1");
st.studentskiPodaci("21/03", 2);
st.Prikazi();
Console.ReadLine();
}

144

Windows
forme

145

Pojam Windows forme


Forma je osnovni elemenat korisnikog interfejsa
Forma je kontrola izvedena iz klase Form
a koja je izvedena iz klase Control
Windows forme se kreiraju u sluajevima
kreiranja desktop aplikacija i kada se
oekuje da klijentski raunari imaju
dovoljno snage da izvre odgovarajuu
obradu podataka
ASP.NET Web forme se kreiraju u
sluajevima kada je korisniki interfejs
web browser i za aplikacije
koje se objavljuju putem weba

146

Svojstva windows forme

Name ovo svojstvo postavlje ime forme odnosno ime


odgovarujue klase

public partial class Form1 : Form

AcceptButton pomou ovog propertija se postavlja koje


e dugme biti kliknuto kada korisnik pritisne taster
ENTER
CancelButton ovaj properti odreuje koje e dugme
biti kliknuto kada se pritisne ESC taster
ControlBox odreuje da li forma sadri dugmad za
minimizaciju , maksimizaciju,za zatvaranje prozora
Minimize Box, MaximizeBox svojstva omoguavaju
prikazivanje i sakrivanje dugmadi za maksimiziranje i
minimiziranje
Text property odreuje tekst koji e biti prikazan na
naslovnoj liniji forme
StartPosition odreuje poetnu poziciju forme na ekranu
WindowState svojstvo omoguava prikaz forme u normalnoj
veliiti, minimiziranu i maksimiziranu

147

Dogaaji i metode forme


(ivotni ciklus forme)

Load
GotFocus
Activated
Closing
Closed
Deactivate
LostFocus
Dispose()

148

Opis dogaaja forme I


Load dogaaj se koristi da bi se izvril
akcije pre nego to forma postane
vidljiva
Activated dogaaj se okida kada se forma
aktivira u kodu ili od strane korisnika.Okida
se npr. kada forma dobije fokus od neke
druge forme.Ovaj dogaaj se okida pre
dogaaja GotFocus
Kada forma predaje fokus drugoj formi
pali se dogaaj Deactivate

149

Opis dogaaja forme II


Closing dogaaj se trigeruje kada forma
dobije zahtev da se zatvori. Ukoliko postoji
potreba da forma i dalje bude otvorena
ovaj dogaaj se moe ponititi.
Closed dogaaj se trigeruje kada je forma
zatvorena ali pre dogaaja Dispose
Dispose metod se automatski poziva
za glavnu formu aplikacije
Metoda Hide() sakriva formu sa ekrana ali
ona i dalje postoji u memoriji

150

Prikazivanje, skrivanje i unitavanje


forme
Form2 f2;
public Form1()
{
InitializeComponent();
f2 = new Form2();
}
private void button1_Click(object sender, EventArgs e)
{
//f2.Show();
f2.Visible = true;
}
private void button2_Click(object sender, EventArgs e)
{
//f2.Hide();
f2.Visible = false;
}
private void button3_Click(object sender, EventArgs e)
{
f2.Dispose();
}

151

Osnovne windows kontrole

152

Klasa
Label
Koristi se za predstavljenje
opisnog teksta korisniku
Obino se koristi u kombinaciji sa
kontrolama za unos i editovanje
teksta
Text propery definie tekst koji
e se pojaviti na labeli
Korisnik ne moe menjati
tekst na labeli
Labela ne moe da dobije fokus
153

Klasa
Button
Klasa Button predstavlja windows kontrolu Button
Na dugme se moe kliknuti miem, pritiskom na
taster ENTER ili pritiskom na SPACE kada dugme ima
fokus
Ako se kao AcceptButton (CancelButton)
forme postavi odgovarajue dugme tada
se pritiskom na taster ENTER (Esc)
izvrava klik na to dugme
Najee korieni dogaaj za dugme je Click
Event Handler se generie dvostrukim klikom
na dugme u dizajn modu
Pozivom metode dugme.PerformClick()
simulira se klik korisnika na dugme

154

Windows Hello world aplikacija

private void button1_Click(object sender, EventArgs e)


{
MessageBox.Show("Hello world");
}

155

TextBo
x

Koriste se za prihvatanje ulaza od strane korisnika


ili za prikaz vrednosti
Text property se koristi za itanje sadraja tekst
boksa ili prikaz sadraja u tekst boksu
Multiline property ako se postavi na true mogue je
prikazivanje teksta u vie linija
MaxLength definisanje maksimalnog broja karaktera za TextBox
ScrollBars za postavljanje horizontalnog, vertikalnog ili oba skrola
PasswordChar omoguava da se prikazuje odreeni znak
kada korisnik unosi tekst
TextAlign svojstvo omoguava podeavanje ravnjanja teksta u
TextBox kontroli
Najee korieni dogaaj ove kontrole je TextChanged koji se
generie svaki put kada se promeni tekst u TextBox kontroli
Dogaaj KeyPress generie se kada se pritisne neki taster na
tastaturi

156

Obrada dogaaja KeyPress


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
MessageBox.Show("Pritisnuli ste taster ENTER");
}
}

157

Primer upotrebe TextBox kontrole GUI

158

Primer upotrebe TextBox kontrole


ko
d
private void buttonPrikaz_Click(object sender, EventArgs e)
{
string t1 = textIme.Text;
string t2 = textPrezime.Text;
// operator + nad stringovima je operator konkatenacije
// nadovezivanja
MessageBox.Show(t1+ "
"+t2); textIme.Clear();
textPrezime.Clear();
}
private void Form1_Load(object sender, EventArgs e)
{
textIme.Text = "Unesite ime";
textPrezime.Text = "Unesite prezime";
}

159

Modalni i nemodalni dijalozi

160

Modalne i nemodalne forme


Metoda ShowDialog() kreira modalnu formu
tj. kada se ona prikae korisnik e morati da
je zatvori da bi mogao da pree na neku
drugu formu.U jednom trenutku moe biti
otvoren samo jedan modalni
prozor
Ako se za prikazivanje forme odabere metoda
Show() tada se kreira nemodalna forma.
Nemodalna forma ne mora biti zatvorena
da bi se prelo na neku drugu formu

161

Kreiranje modalne i nemodalne forme


Ako je kreirana klasa Form2 (izvedena iz klase
System.Windows.Forms.Form ) tada se ona moe instanicirati
iz neke metode unutar klase Form1 na sledei nain :
private void buttonForma2_Click(object sender, System.EventArgs e)
{
Form2 f2 = new Form2(); // kreiranje instance klase Form2
f2.ShowDialog();
// prikazivamje forme kao modalne
}
Napomena : Ako se objekat f2 deklarie lokalno tada mu se
ne moe pristupiti iz drugih metoda u formi Form1. Ukoliko se to eli
onda se deklarie atribut forme Form1:
private Form2 f2 ;

162

Prikazivanje poruka korienjem MessageBox


ov
a
string poruka = "Pritisnite neko od ovih dugmadi";
string naslov = "Naslovna linija Dijaloga za poruke";
MessageBoxButtons buttons =
MessageBoxButtons.YesNoCancel; MessageBoxIcon
ikona = MessageBoxIcon.Information;
DialogResult rez = MessageBox.Show(poruka, naslov, buttons,ikona);

private void menuOtvori_Click(object sender, System.EventArgs e)


{
MessageBox.Show("Poruka","Naslov",MessageBoxButtons
.OKCancel, MessageBoxIcon.Information);
}

163

DialogRezult enumeracija
Koristi se za odreivanje akcije korisnika
Npr. ako se prikae MessageBox koji
sadri OK i Cancel dugmad treba
odrediti ta je korisnik kliknuo
Ako je vraena vrednost DialogResult.OK
korisnik je kliknuo dugme OK
Ako je vraena vrednost
DialogResult.Cancel korisnik je
kliknuo dugme Cancel
Pomou propertyja DialogResult
moe se postaviti odgovarjua
vrednost enumeracije DialogResult
za dugme
Metode klase Form : Show() i
ShowDialog() vraaju vrednost tipa
DialogResult tj neku od vrednosti ove
enumeracije.
164

Primer upotrebe DialogResult enumeracije


GUI

165

Primer upotrebe DialogResult enumeracije


private void buttonYNC_Click(object sender, EventArgs e)
{
string poruka = "Pritisnite neko od ovih dugmadi";
string naslov = "Naslovna linija Dijaloga za poruke";
MessageBoxButtons buttons =
MessageBoxButtons.YesNoCancel; MessageBoxIcon
ikona = MessageBoxIcon.Information;
DialogResult rez = MessageBox.Show(poruka, naslov, buttons, ikona);
switch (rez)
{
case DialogResult.Yes:
textRezultat.Text = "Izabrali ste dugme
YES";
brea
k;
case DialogResult.No:
textRezultat.Text = "Izabrali ste dugme
NO";
brea
k;
case DialogResult.Cancel:
textRezultat.Text = "Izabrali ste dugme
Cancel";
brea
k;
}
}

166

Kontrole CheckBox i RadioButton

167

CheckB
ox

Klasa CheckBox predstavlja Windows


kontrolu CkeckBox koja omoguava
korisniku da nesto potvrdi(ekira) ili
ne
moe biti ekirano vie od jednog ek dugmeta
Pomou propertyja Checked moe se
iitati ili postaviti stanje CheckBoxa
Dogaaj CheckedChanged se okida
kada dugme prelazi iz stanja ekirano
u stanje neekirano ili obrnuto.
Moe se takoe instancirati iz koda, pri
emu je potrebno dodati ga u Controls
kolekciju forme i definisati njegove
event handlere

168

168

Upotreba CheckBox kontrole GUI

169

Svojstvo Checked
private void buttonSalji_Click(object sender, EventArgs e)
{
textBox1.Clear();
textBox1.AppendText("Odabrali ste :" + Environment.NewLine);
if(checkDorucak.Checked)
textBox1.AppendText("dorucak" + Environment.NewLine);
if (checkRucak.Checked)
textBox1.AppendText("rucak" + Environment.NewLine);
if (checkVecera.Checked)
textBox1.AppendText("vecera" + Environment.NewLine);
}

170

Dogaaj CheckedChanged
private void checkPrikazi_CheckedChanged(object sender, EventArgs e)
{
if (textBox1.Visible == false)
textBox1.Visible = true; else
textBox1.Visible = false;
}

171

RadioButt
on
Radio dugmad se obino nalaze u Grupi
najpre se na formu dodaje kontrola
GroupBox koja se nalazi u Containers
sekciji Toolboxa
zatim se dodaju radio dugmad u grupu
samo jedno radio dugme u grupi u jednom
trenutku moe biti selektovano
Property Checked radio dugmeta vraa
true ako je ono ekirano ili false ako nije

Dogaaj CheckedChanged se okida


kada dugme prelazi iz stanja ekirano
u stanje neekirano ili obrnuto.

172

172

Primer upotrebe RadioBitton


kontrol
e

173

Svojstvo Checked RadioButton kontrole 1


private void buttonRezervisi_Click(object sender, EventArgs e)
{
textBox1.Clear();
if (radioAvion.Checked)
textBox1.AppendText("Odabrali ste avionski prevoz");
else if (radioAutobus.Checked)
textBox1.AppendText("Odabrali ste autobuski prevoz");
else if (radioSopstveniPrevoz.Checked)
textBox1.AppendText("Odabrali ste sopstveni prevoz");
else
{
MessageBox.Show("Odaberite tip prevoza");
return;
}
decekirajSve();
}

174

Svojstvo Checked RadioButton kontrole 2

private void decekirajSve()


{
radioAvion.Checked = false;
radioAutobus.Checked = false;
radioSopstveniPrevoz.Checked = false;
}

175

Kontrole ComboBox ListBox i


RichTextB
ox

176

ComboBox i ListBox kontrola


SelectedIndex svojstvo vraa indeks
selektovane stavke kombo boksa
int selectedIndex = comboBox1.SelectedIndex
SelectedItem vraa selektovanu stavku
kombo boksa koja je tipa object
object selectedItem = comboBox1.SelectedItem;
Dodavanje stavki u kombo
boks:
comboBox1.Items.Add(st
avka1); ili
comboBox1.Items.AddRange(new object[] =
{stavka1,stavka2,stavka3});
Metoda FindString pronalazi prvu stavku u
kombo boksu koja poinje sa tim stringom
int index = comboBox1.FindString(textBox2.Text);
comboBox1.SelectedIndex = index;
177

177

Dodavanje stavki u ComboBox u dizajn modu

178

SelectedIndexChanged dogaaj

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)


{
string selektovano = comboBox1.SelectedItem.ToString();
textBox1.Text = "Odabrali ste: " + selektovano;
}

179

ListBox
primer

180

ListBox SelectedIndexChanged
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show("Odabrali ste: " + listBox1.SelectedItem.ToString());
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
// ako je pritisnut taster ENTER
listBox1.Items.Add(textBox1.Text);
textBox1.Clear();
}
}

181

RichTextBox
Omoguava korisniku unos teksta
ali mu daje naprednije mogunosti
za editovanje.
Metoda LoadFile omoguava
uitavanje tekstualnog fajla(ist
tekst ili rtf format) u tekst boks
Metoda SaveFile omoguava
uvanje sadraja teksboksa u
tekstualni fajl
Metoda Clear() brie sadraj tekst
boksa.
Svojstvo SelectionFont daje ili setuje
font selektovanog teksta ili od
naznaene take
SelectionColor daje ili setuje boju
selektovanog teksta ili tu boju
primenjuje poevi od naznaene
take

182
182

Primer upotrebe RichTextBox


kontrol
e

183

RichTextBox primer1
private void buttonCuvaj_Click(object sender, EventArgs e)
{
richTextBox1.SaveFile(@"C:\Temp\proba.rtf");
MessageBox.Show("Tekst sacuvan");
}
private void buttonCitaj_Click(object sender, EventArgs e)
{
richTextBox1.LoadFile(@"C:\Temp\proba.rtf");
}
private void buttonBrisi_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
}
184

RichTextBox primer2
private void buttonBold_Click(object sender, EventArgs e)
{
Font tekuciFont = richTextBox1.SelectionFont;
FontStyle noviStilFonta;
if (richTextBox1.SelectionFont.Bold == true)
{
noviStilFonta = FontStyle.Regular;
}
else
{
noviStilFonta = FontStyle.Bold;
}
richTextBox1.SelectionFont = new Font(tekuciFont.FontFamily,
tekuciFont.Size,
noviStilFonta
);
}

185

RichTextBox primer3
private void button1_Click(object sender, EventArgs e)
{
// Postavi font
richTextBox1.SelectionFont = new Font("Arial", 14,FontStyle.Italic);
richTextBox1.SelectionColor = Color.Red;
string selektovano = richTextBox1.SelectedText;
richTextBox1.SelectedText = selektovano;
}

186

RichTextBox primer4
private void Form1_Load(object sender, EventArgs e)
{
standardniTekst();
}
private void buttonStandard_Click(object sender, EventArgs e)
{
standardniTekst();
}
private void standardniTekst()
{
richTextBox1.SelectionFont = new Font("Times New Roman", 12,
FontStyle.Regular);
richTextBox1.SelectionColor = Color.Black;
}

187

Izuze
ci

188

Pojam izuzetaka
Izuzetak je sluaj koji se deava
tokom izvravanja programa koji
moe da poremeti normalan rad
programa
Izuzetak je objekat izveden iz klase
Exception
Izuzeci se obrauju
korienjem kljunih rei
try, catch i finally

189

Obrada izuzetaka
try
{
// deo koda u kome moze doci do izuzetka
}
catch(Exception ex)
{
// hendlovanje izuzetaka
}

Naredbe unutar catch bloka se izvravaju ukoliko je izuzetak izbaen


unutar try bloka.
Kod unutar try bloka moe da izbacuje razliite tipove izuzetaka.
Moe se definisati vie catch blokova od kojih svaki hendluje
specijalizovanu klasu izuzetaka.

190

GUI
aplikacije

191

Ko
d
private void buttonIzracunaj_Click(object sender, EventArgs e)
{
double a = Convert.ToDouble( textPrvi.Text);
double b = Convert.ToDouble(textDrugi.Text);
double zbir = a + b;
MessageBox.Show("Zbir je: " + zbir);
}

192

Aplikacija prekida sa radom zbog


izuzetk
a

193

Kod sa obradom izuzetaka


private void buttonIzracunaj_Click(object sender, EventArgs e)
{
try
{
double a = Convert.ToDouble(textPrvi.Text);
double b = Convert.ToDouble(textDrugi.Text);
double zbir = a + b;
MessageBox.Show("Zbir je: " + zbir);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
textPrvi.Clear();
textDrugi.Clear();
}

194

Primeri klasa izuzetaka

IndexOutOfRangeException
InvalidCastException
FormatException
OverflowException
DividebByZeroException
ArithmeticException

195

Korienje vie catch blokova


try
{
// kod u kome dolazi do izuzetka
}
catch(DivideByZeroException )
{
// kod se izvrsava ukoliko dodje do pokusaja deljenja sa nulom
}
catch(ArithmeticException)
{
// neki drugi aritmeticki izuzetak npr. OverflowException
}

Ukoliko postoji vie catch blokova tada treba prvo hendlovati izuzetke koji
su vie specijalizovaniji, a zatim optije. Npr. DivideByZeroException
klasa je izvedena iz klase ArithmeticException. Ako se catch je
ArithmeticException pre DivideByZeroException tada se izuzetak
DivideByZeroException nee uhvatiti.
196

finally
blok
Ukoliko se eli da se neki blok koda izvri posle catch bloka (blokova)
nezavisno od toga da li je dolo do izuzetka ili ne koristi se finally blok.

try
{
// otvori konekciju
// radi sa bazom
}
catch
{
// catch exceptions
}
finally
{
// zatvori konekciju
}

197

Eksplicitno izbacivanje izuzetaka


private int CitajPodatke()
{
byte brojMesta = 0; // 0 -255
try
{
brojMesta = Convert.ToByte(textBroj.Text);
}
catch (FormatException ex)
{
// u catch bloku izbacujem novi izuzetak
if (textBroj.Text.Length == 0)
throw new FormatException("Unesite broj", ex);
else
throw ex;
}
catch (OverflowException ex)
{
throw new FormatException("Unesite broj od 0 do 255", ex);
}
catch (Exception ex)
{
throw ex;
}
return brojMesta;
}

198

Hendlovanje prethodno izbaenih


izuzeta
ka
private void buttonUnesi_Click(object sender, EventArgs e)
{
try
{
// funkcija koja usled izuzetka generie novi izuzetak
int b = CitajPodatke();
MessageBox.Show( b.ToString(), "Broj mesta");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
if (ex.InnerException != null)
MessageBox.Show(ex.InnerException.Message);
}
}
Kada je izuzetak Y izbaen kao rezultat prethodno uhvaenog izuzetka X
tada Y.InnerExcePtion predstavlja referencu na izuzetak X.
199

Standardni windows dijalozi

200

Standardni windows dijalozi


Nalaze se u Dialogs sekciji Toolboxa
Instanciraju se prevlaenjem na
windows formu

OpenFileDialog
SaveFileDialog
FontDialog
ColorDialog
PrintDialog
FolderBrowserDialog

201

Primer upotrebe standardnih dijaloga

202

Funkcije za startovanje aplikacije


private void buttonNovi_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
noviFajl();
}
private void noviFajl()
{
richTextBox1.SelectionFont = new Font("Times New Roman", 12);
}
private void Form1_Load(object sender, EventArgs e)
{
noviFajl();
}

203

ColorDial
og
private void buttonBoja_Click(object sender, EventArgs e)
{
Font tekuciFont = richTextBox1.SelectionFont;
DialogResult rez = colorDialog1.ShowDialog();
if (rez == DialogResult.OK)
{
if (richTextBox1.SelectionFont != null)
{
richTextBox1.SelectionFont = new Font(tekuciFont.FontFamily,
tekuciFont.Size, tekuciFont.Style);
richTextBox1.SelectionColor = colorDialog1.Color;
}
}
}

204

FontDial
og
private void buttonFont_Click(object sender, EventArgs e)
{
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.SelectionFont = fontDialog1.Font;
}
}

205

FolderBrowserDialog
private void buttonFolder_Click(object sender, EventArgs e)
{
folderBrowserDialog1.ShowNewFolderButton = true;
folderBrowserDialog1.Description = "Odaberite podrazumevani folder";
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
Environment.CurrentDirectory = folderBrowserDialog1.SelectedPath;
}
}

206

OpenFileDial
og
private void buttonOtvori_Click(object sender, EventArgs e)
{
openFileDialog1.InitialDirectory = folderBrowserDialog1.SelectedPath;
openFileDialog1.Filter = @" Rich Tekst|*.rtf|Text fajl|*.txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.LoadFile(openFileDialog1.FileName);
}
}

207

SaveFileDial
og
private void buttonSacuvaj_Click(object sender, EventArgs e)
{
saveFileDialog1.InitialDirectory = folderBrowserDialog1.SelectedPath;
saveFileDialog1.Filter = @" Rich Tekst|*.rtf|Text fajl|*.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.SaveFile(saveFileDialog1.FileName);
}
}

208

Jednodimenzionalni nizovi

209

Nizo
vi
Skup podataka istog tipa
Nizovi su indeksirani
Prvi element niza ima indeks nula
Mogu biti
jednodimenzionalni i
viedimenzionalni
niz u C# je objekat i mora se instancirati

210

Kreiranje
niza
//Deklarisanje niza:
int[ ] mojCelobrojniNiz ;

//Instanciranje niza:
mojCelobrojniNiz = new int[5];

int[ ] mojCelobrojniNiz = new int[5];

// inicijalizacija niza
int[ ] mojCelobrojniNiz = new int[5] = {1,2,5,6,7};
// ako se niz inicijalizuje ne mora se koristiti kljuna re new
int[ ] mojCelobrojniNiz1 = {5,5,6,7,8};

211

Boxing i unboxing
int x = 25;
object boxedValue = (object) x ;
int y = (int) boxedValue ;

object[] nizObjekata = new object[3];


nizObjekata[0] = 'A';
nizObjekata[1] = 2.34M;
nizObjekata[2] = 34;
char x = (char)nizObjekata[0];
decimal y = (decimal)nizObjekata[1];
int z = (int) nizObjekata[2];

212

Naredba foreach
private void button1_Click(object sender, EventArgs e)
{
int[ ] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers)
{
listBox1.Items.Add(i);
}
}

213

Niz kao parametar metode


class Nizovi
{
public int sumaNiza(int[] x)
{
int total = 0;
foreach (int i in x)
{
total += i;
}
return total;
}
}

214

Prosleivanje niza metodi


private void buttonSuma_Click(object sender, EventArgs e)
{
int[] x = new int[5];
for (int i = 0; i < 5; i++)
{
x[i] = 2 * i + 1;
}
Nizovi niz = new Nizovi();
int zbir = niz.sumaNiza(x);
MessageBox.Show("Suma niza je: " + zbir);
}

215

Kljuna re params
public int sumaNiza(params int[] x)
{
int total = 0;
foreach (int i in x)
{
total += i;
}
return total;
}
...
Nizovi niz = new Nizovi();
int zbir = niz.sumaNiza(1,3,5,7,9,11);
MessageBox.Show(zbir.ToString());

216

Viedimenzionalni nizovi i
indekse
ri

217

Viedimenzionalni nizovi
int[,] x = new
int[3, 4];
x[0, 0] = 1;
x[0, 1] =
2; x[0, 2]
= 3; x[0,
3] = 2;
x[1, 0] =
4; x[1, 1]
= 5; x[1,
2] = 6;
x[1, 3] =
5; x[2, 0]
= 7; x[2,
1] = 8;
x[2, 2] =
9; x[2, 3]
= 10;

int[,] y = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

int brVrsta = x.GetLength(0);


int brKolona = x.GetLength(1);

218

Primer metode za tampanje 2D niza


private void stampajNiz(int[,] x, int brVrsta, int brKolona)
{
for (int i = 0; i < brVrsta; i++)
{
for (int j = 0; j < brKolona; j++)
{
richTextBox1.AppendText(x[i, j].ToString() + "\t");
}
richTextBox1.AppendText("\n");
}
}

stampajNiz(x, 3, 4);
stampajNiz(y, 3, 3);
219

Indekser
public class
IndexerClass
{
private int[ ] mojNiz ;
public IndexerClass()
{
mojNiz = new int[100];
}
public int this [int index] // deklaracija Indexer a
{
get
{
return mojNiz[index];
}
set
{
mojNiz[index] = value ;
}
}
}
220

Upotreba indeksera
KlasaIndekser objekat = new KlasaIndekser();
// objekat klase se sada zahvaljuci indekseru tretira kao niz
for (int i = 0; i < 100; i++)
{
objekat[i] = 5 * i + 1;
listBox1.Items.Add(objekat[i]);
}
int[] x = new int[100];
for (int j = 0; j < 100; j++)
{
x[j] = objekat[j];
}
//MessageBox.Show(maxClan(x).ToString());

221

Primer: Maksimalna vrednost niza


private int maxClan(int[] x)
{
int maxVred = x[0];
foreach (int clan in x)
{
if (clan > maxVred)
maxVred =
clan;
}
return maxVred;
}

222

Kolekcij
e

223

Nizo
vi
Nizovi su jedina kolekcija koja je ugraena
u C# jezik
Sve ostale kolekcije se nalaze u
prostoru imena
System.Collections
Kreiranjem niza vri se instanciranje klase
Array
Svojstvo Length ove klase
daje broj elemeneta niza
Rank svojstvo daje broj dimenzija niza

224

Klasa
Array

Statika metoda CreateInstance() koristi se za kreiranje niza


Metoda Clear() koja sve elemente niza postavlja na
nulu, false ili null
Metoda Reverse() je statika metoda koja
postavlja niz u inverznom redosledu
Metoda Sort() je statika metoda koja sortira elemente niza
Metoda SetValue() definie vrednost lana niza
Metoda GetValue() ita vrednost odreenog lana niza

Array odredisniNiz = Array.CreateInstance(typeof(int), 12);


odredisniNiz.SetValue(100, 0);
odredisniNiz.SetValue(200, 1);
odredisniNiz.SetValue(300, 2);
int temp = (int)odredisniNiz.GetValue(1);
richTextBox1.AppendText(temp.ToString());

225

Prostor imena System.Collections

Sadri interfejse i klase koje definiu razliite kolekcije objekata


Klase:

ArrayList
Queue
Stack
Hashtable
........

Interfejsi:

ICollection
IEnumerable
IEnumerator
IDictionaryEnumerator
IList
.....
226

Interfej
si
ICollection definie veliinu i
enumeratore za sve kolekcije
IComparer sadri metode za
komparaciju dva objekta
IDictionary predstavlja
kolekciju
parova(klju,vrednost)
IDictionaryEnumerator enumeracija kroz
elemente renika
IEnumerable sadri enumerator koji
omoguava jednostavnu iteraciju kroz
kolekciju
IEnumerator jednostavna iteracija kroz kolekciju
IList interfejs predstavlja kolekciju objekata
kojima se moe pristupati preko indeksa

227

Klasa
ArrayList

Elementima liste pristupa se preko indeksa kao i kod niza


Za razliku od niza nije neophodno unapred
poznavati broj elemenata
Metoda Add(object) dodaje objekat na kraj liste
metoda Clear() brie sve elemente iz liste
Metoda Insert(pozicija, vrednost) ubacuje
objekat vrednost na pozicuju pozicija
Metoda RemoveAt(index) brie elemenat sa
indeksom index iz liste
GetEnumerator() metoda vraa iterator koji
se koristi za iteraciju(prolaz) kroz elemente
liste
Metoda Sort() sortira elemente liste
Metoda Reverse() prikazuje emente liste u inverznom redosledu
Metoda ToArray() kopira elemente liste u
jednodimenzionalan niz

228

Upotreba ArrayList kolekcije


ArrayList al = new ArrayList();
al.Add(1);
al.Add("Mika");
al.Add(2.456);
al.RemoveAt(0);
IEnumerator mojEnumerator = al.GetEnumerator();
while (mojEnumerator.MoveNext())
{
richTextBox1.AppendText( mojEnumerator.Current.ToString() + "\n");
}

229

Redovi (Queues)
Queue: FIFO struktura (first in, firstout)
Metoda Enqueue(object) dodaje objekat u listu
Metoda Dequeue() skida najstariji
elemenat (koji je prvi dodat na listu) sa
liste
Metoda GetEnumerator() vraa iterator
(objekat tipa IEnumerator) kojim se vri
jednostavan
prolaz kroz listu

230

Primer upotrebe Queuea


Queue mojRed = new Queue();
mojRed.Enqueue(A);
mojRed.Enqueue(1);
mojRed.Enqueue(B);
mojRed.Enqueue(2);
mojRed.Dequeue();
IEnumerator mojEnumerator = mojRed.GetEnumerator();
while (mojEnumerator.MoveNext())
{
richTextBox1.AppendText(mojEnumerator.Current.ToString() + "\n");
}
1
B
2
231

Stekovi
(Stacks)

Stack je LIFO(Lastin, firstout) struktura


Metoda Push(object) stavlja objekat na stek
Metod Pop() skida najmlai
objekat(koji je posledni stavljen na
stek) sa steka
Metoda GetEnumerator() takoe vraa
iterator kojim se vri iteracija kroz
elemente liste.
232

Upotreba stacka
Stack mojStack = new Stack();
mojStack.Push("Hello");
mojStack.Push(1);
mojStack.Push("World");
mojStack.Push("!");
mojStack.Pop();
mojStack.Pop();
IEnumerator mojEnumerator = mojStack.GetEnumerator();
while (mojEnumerator.MoveNext())
{
richTextBox1.AppendText(mojEnumerator.Current + "\n");
}
1
Hello
233

Hash
tabele

To je struktura podataka dizajnirana za brzo pretraivanje podataka


Svakom objektu se pridruuje klju ime se
omoguava brzo pretraivanje
Metoda GetEnumerator() takoe vraa enumerator koji je tipa
IDictionaryEnumerator.

Hashtable tabela = new Hashtable();


tabela.Add('N', "Idi na sever");
tabela.Add('S', "Idi na jug");
tabela.Add('W', "Idi na zapad");
tabela.Add('E', "Idi na istok");
tabela.Add('Q', "Dovidjenja");
richTextBox1.AppendText(tabela['N'].ToString());
richTextBox1.AppendText("\n---------------------------------\n");
IDictionaryEnumerator mojEnumerator = tabela.GetEnumerator();
while (mojEnumerator.MoveNext())
{
richTextBox1.AppendText(mojEnumerator.Key.ToString() + "----->" +
mojEnumerator.Value.ToString() + "\n");
}

234

Hash tabela GUI

235

Klasa
Object
Svaki objekat u C# je izveden iz bazne klase
System.Object
object je nadimak za ovu klasu
tipu object se moe pridruiti bilo koji tip
double a =12.34;
object obj = a; // boxing
double d = (double) obj ; // unboxing

public virtual string ToString();


metoda vraa string koji opisuje
instancu klase

236

Klasa
Object,
rad sa stringovima, klasa DateTime

237

Klasa
Object
Svaki objekat u C# je izveden iz bazne klase
System.Object
object je nadimak za ovu klasu
tipu object se moe pridruiti bilo koji tip
double a =12.34;
object obj = a; // boxing
double d = (double) obj ; // unboxing

public virtual string ToString();


metoda vraa string koji opisuje
instancu klase

238

Metode klase Object


GetHashCode
vraa ceo broj koji je HashCode za objekat

Equals
vraa true ako su dva objekta jednaka
a.Equals(b)

GetType
vraa tip instance objekta

239

Rad sa stringovima
tip string je nadimak za klasu
System.String
operator + se koristi za
nadovezivanje stringova
(konkatenaciju)
string je niz elemenata tipa char
Metoda public string Substring( int
startIndex, int length ) vraa podstring
poev od indeksa startIndex i duine length
Length property daje broj
karaktera stringa
Trim() metoda skida blanko
karaktere sa poetka i kraja
stringa
240

Metode klase String


Metoda public char[]
ToCharArray(); kopira karaktere u
stringu u niz unicode karaktera
public string ToUpper(); vraa kopiju
stringa ali su svi karakteri prikazani
velikim slovima
public string ToLower(); vraa kopiju
stringa ali su svi karakteri prikazani
malim slovima
Metoda public static int Compare( string strA,
string strB );
ako je vraena vrednost manja od 0 tada je strA < strB (aca
< bilja)
ako je vraena vrednost nula tada je strA = strB
ako je vraena vrednost vea od nule tada je strA > strB

241

Jo neke metode klase String


public int IndexOf(char);
vraa
indeks prvog pojavljivanja
znaka
public int IndexOf(string);
vraa indeks poetka prvog
pojavljivanja podstringa u
okviru stringa
public int
LastIndexOf(char);
public int
LastIndexOf(string);
string verbatim =
@"C:\Windows\Temp";

Kl
as
a
Sy
st
e
m.
Co
nv
er
t
ko

nvertuje
neki osnovni tip podataka u
drugi tip

242

Konvertovanje stringa u prost tip


Stringovi se mogu konvertovati u bilo koji prost tip podataka.
string s = "123.45";
double d = System.Convert.ToDouble(s);
Klasa Convert konvertuje jedan bazni tip podataka u drugi.
string s = "123.45";
double d = Double.Parse(s);

243

Formatiranje datuma i vremena


public DateTime(
int year,
int month,
int day,
int hour,
int minute,
int second,
int millisecond
);

244

Primer upotrebe DateTime klase


private void button1_Click(object sender, EventArgs e)
{
DateTime dt = new DateTime(2005,7,15,11,20,0,0);
richTextBox1.AppendText(dt.ToString() + "\n");
DateTime dt1 = DateTime.Now ;
richTextBox1.AppendText(dt1.ToString("dd MM yyyy") + "\n");
richTextBox1.AppendText(dt1.ToString("d" + "\n"));//d,D,t,T,f,F
dt1 = dt1.AddYears(-3);
richTextBox1.AppendText(dt1.ToString("dd MM yyyy") + "\n");
}

245

Osobina nepromenljivosti
stringo
va
for(int i=0; i< 10; i++)
{
s = string.Concat(s, i.ToString());
}
Stringovi su nepromenljivi(immutable) tj . nakon toga to se string
sauva u memoriji ta memorijska lokacija se ne moe
promeniti. Metoda string.Concat kreira novi string i onda rezultat
uva na novoj memorijskoj lokaciji. I stara i nova verzija
stringa se uvaju privremeno u memoriji. Stara verzija
stringa
e
se
obrisatu
u procesu odnoenja smea
(garbage collection). Ako aplikacija esto manipulie stringovima
u memoriji se uvaju nepotrebni podaci ekajui sledei period
odnoenja
smea.
Reenje
klasa StringBuilder koja se
nalazi u namespace-u System.Text

246

Klasa StringBuilder
StringBuilder sb = new StringBuilder();
for(int i=0; i< 10; i++)
sb.Append(i);

String bilder alocira inicijalnu vrednost od 16 karaktera i kako string


postaje vei alocirana memeorija se proirila da bi se prilagodila
duini stringa (slino kao kod kolekcija)
StringBuilder sb1 = new StringBuilder("ABCD");
sb1.Append("E");
sb1.Insert(2,Z)
sb1.Remove(7,6);

247

Primer upotrebe stringova1


private void button1_Click(object sender, EventArgs e)
{
string s1 = "abcd";
string s2 = "ABCD";
string s3 = @"Liberty Associates, Inc.
provides custom .NET development,
on-site Training and Consulting";
int result;
richTextBox1.AppendText("s1 = ");
richTextBox1.AppendText(s1);
richTextBox1.AppendText(" s2=");
richTextBox1.AppendText(s2);
richTextBox1.AppendText("\n");
string s7 = s1 + s2;
richTextBox1.AppendText("s7 se dobija kao s1 + s2\n");
richTextBox1.AppendText("s7=");
richTextBox1.AppendText(s7);
richTextBox1.AppendText("\n");
richTextBox1.AppendText("--------------------------------------\n");
248

Primer upotrebe stringova2


// poredjenje dva stringa, case sensitive
result = string.Compare(s1, s2);
richTextBox1.AppendText("uporedi s1 i s2: \n");
richTextBox1.AppendText("rezultat je :" + result.ToString() + "\n");
richTextBox1.AppendText("--------------------------------------\n");
//(true = ignore case)
result = string.Compare(s1, s2, true);
richTextBox1.AppendText("compare insensitive\n");
richTextBox1.AppendText("uporedi s1 i s2: \n");
richTextBox1.AppendText("rezultat je :" + result.ToString() + "\n");
richTextBox1.AppendText("--------------------------------------\n");
// concatenation method
string s4 = string.Concat(s1, s2);
richTextBox1.AppendText(
"s4 se dobija konkatenacijom s1 i s2: " + s4 + "\n");
richTextBox1.AppendText("--------------------------------------\n");

249

Primer upotrebe stringova3


string s5 = s3.Substring(0, 3);
richTextBox1.AppendText(s5 + "\n");
richTextBox1.AppendText("--------------------------------------\n");
string s6 = s5.ToUpper();
richTextBox1.AppendText(s6 + "\n");
richTextBox1.AppendText("--------------------------------------\n");
string s8 = s3.ToLower();
richTextBox1.AppendText(s8 + "\n");
richTextBox1.AppendText("--------------------------------------\n");
string s9 = " Ovo je tekst " + "*";
richTextBox1.AppendText(s9.Trim() + "\n");
richTextBox1.AppendText("--------------------------------------\n");
richTextBox1.AppendText(s3.Length.ToString() + "\n");
richTextBox1.AppendText("--------------------------------------\n");
richTextBox1.AppendText(s3.IndexOf("Tryining").ToString());

250

Toolstrip kontrola

251

ToolStri
p
Predstavlja osnovu kontrola MenuStrip, StatusStrip i
ContextMenuStrip
Kreira se prevlaenjem kontrole ToolStrip
koja se nalazi u Menus & Toolbars sekciji
toolboxa
Svojstvo LayoutStyle odreuje poloaj
ToolStrip kontrole na formi
Sastoji se od kolekcije objekata ToolStripItem
ToolStripItem objekti mogu biti labele,
dugmad, kombo boksovi itd.

2252

Primer ToolStripa

2253

Kreiranje ToolStripa u dizajn modu

2254

Editovanje stavki ToolStripa

2255

Tool Strip
Items
U ToolStrip mogu se dodavati sledee kontrole:

ToolStripLabel
ToolStripButton
ToolStripTextBox
ToolStripComboBox
ToolStripProgressBar
ToolStripSplitButton
ToolStripDropDownButton
ToolStripSeparator
2256

ToolStripItems
Svojstvo ToolTipText svake od
ToolStripItems kontrola odreuje tekst koji
e se prikazati kada se pokaziva mia
nae iznad ovih kontrola
U zavisnosti koju kontrolu predstavlja stavka
ToolStrip kontrole mogue je definisati
odgovarajue dogaaje kao to su :

Click
DoubleClick
SelectedIndexChanged itd.

2257

ToolStripLab
el

Ova kontrola kombinuje funkcionalnost Label i LinkLabel kontrole


Kada je svojstvo IsLink postavljeno na vrednost false ponaa
se kao Label kontrola
Kada je svojstvo IsLink postavljeno na vrednost true ponaa se kao
Linklabel kontrola
Svojstvo Image omoguava da se ovoj kontroli pridrui slika
Svojstvo DisplayStyle odreuje da li se prikazuje samo tekst,
samo slika ili i jedno i drugo
Svojstvo TextImageRelation omoguava da se definie
meusobni poloaj teksta i slike na ovoj kontroli

2258

ToolStripLabel primer
private void toolStripLabel1_Click(object sender, EventArgs e)
{
MessageBox.Show("Kliknuli ste stavku " + ((ToolStripItem)sender).Text);
}

2259

Kreiranje ToolStrip linka


Dodaje se ToolStripLabel kontrola kao
ToolStrip stavka
Svojstvo IsLink ove kontrole
postavlja se na true
Kao Tag svojstvo definie se url strane
na koju se vri redirekcija kada korisnik
klikne na link
Kao svojstvo Text definie se tekst na linku

2260

Primer ubacivanja linka u ToolStrip

private void toolStripLabel1_Click(object sender, EventArgs e)


{
ToolStripLabel lbl = (ToolStripLabel)sender;
try
{
Process.Start(new ProcessStartInfo(lbl.Tag.ToString()));
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
Mora se ukljuiti prostor imena System.Diagnostics
2261

ToolStripButton

Svojstvo Image odreuje ikonicu koja e biti prikazana na dugmetu


Svojstvo Text definie tekst kojo e se pojaviti u okviru
ToolStripButton kontrole
Svojstvo DisplayStyle definie ta e biti prikazano na
mestu ToolStrip dugmeta, samo tekst, slika i tekst, samo
slika ili nita
Svojstvo TextImageRelation definie prostorni poloaj
teksta i slike na mestu dugmeta
Odgovarajui event handler kreira se kao i kod obinog
dugmeta npr. dvostrukim klikom za Click dogaaj

2262

Obrada dogaaja na ToolStrip kontroli

private void toolStripButton1_Click(object sender, EventArgs e)


{
MessageBox.Show("Kliknuli ste: " + ((ToolStripItem)sender).Text);
}

2263

ToolStripContainer

Koristi se u situacijama kada forma sadri vie ToolStrip kontrola


Uobiajeno je da se posle dodavanja ToolStrip
kontejnera na formu njegovo Dock svojstvo postavi na
vrednost Fill.
U kontejner se mogu dodati ToolStripovi
ToolStripContainer sadri 4 panela : gornji, donji, levi i desni
Definie se vidljivost panela po elji korisnika
ToolStripovi se mogu po elji razmetati unutar ToolStripContainera

2264

Spajanje ToolStripova
Korienjem ToolStripManager statike klase
u toku izvravanja koda moe se vriti
spajanje
razliitih ToolStripova

2265

Spajanje ToolStripova kod


private void button1_Click(object sender, EventArgs e)
{
ToolStripManager.Merge(toolStrip2, toolStrip1);
}

2266

MenuStrip
kontrola

267

Men
i
Koristi se za brz pristup vanim komandama aplikacije
Poev od .NET frejmvorka 2.0 za kreiranje menija
koristi se kontrola MenuStrip
MenuStrip kontrola je izvedena iz kontrole ToolStrip
Kontrole MenuStrip moe da hostuje sve ToolStrip stavke ali
je prvenstveno namenjena za hostovanje ToolStripMenuItems
stavki
ToolStripMenuItem je kontrola koje se koristi za
vizuelnu predstavu stavki menija

268

Svojstva MenuStrip kontrole


AllowItemReorder svojstvo se koristi da omogui
korisniku da preureuje redosled stavki menija
AllowMerge svijstvo omoguava spajanje
MenuStrip kontrole sa nekom drugom MenuStrip ili
ToolStrip kontrolom
Dock svojstvo definie poloaj menija u odnosu na formu
LayoutStyle definie raspored stavki menija u okviru menija

HorizontalStackWithOverFlow
VerticalStackWithOverFlow
StackWithOverflow
Flow
Table

ShowItemToolTips prikaz TooTipova

269

Svojstva kontrole ToolStripMenuItem1


AutoSize stavka menija se prilagoava veliini teksta
Checked govori da se je stavka menija pojavljuje kao
ekirana
CheckOnClick odreuje da li se stavka menija
ekira pri kliku na nju
CheckState govori da li je stavka menija ekirana ili nije
DisplayStyle stavka menija se moe prikazati kao
tekst, tekst i slika ili samo slika
DoubleClickEnabled govori da li se za stavku
menija koristi dogaaj dvostruki klik

270

Svojstva kontrole ToolStripMenuItem2


DropDownItems sadri kolekciju ToolStripItem
(obino ToolStripMenuItem) koje se pojavljuju u
padajuem meniju kada se stavka menija odabere
Enabled da li je stavka menija dozvoljena za korienje
Image dodeljuje sliku odgovarajuoj stavci menija
ShortcutKeys definie kombinaciju tastera sa
tastature koje treba pritisnuti da bi se odgovarajua
stavka menija aktivirala
Text odreuje tekst koji e se pojaviti na
odreenoj stavci menija
TextImageRelation svojstvo definie meusobni poloaj
teksta
i slike na stavci menija

271

MenuStri
p
Koristi se za kreiranje glavnog menija
ToolStripMenuItem
ToolStripComboBox
ToolStripTextBox

ToolStripMenuItem moe sadrati :


ToolStripMenuItem
ToolStripSeparator
ToolStripComboBox
ToolStripTextBox
272

Kreiranje MenuStripa

273

ContextMenuStrip kontrola,
Timer komponenta

274

ContextMenuStrip
Koristi se za kreiranje kontekstnog menija
Pridruuje se nekoj kontroli npr. dugmetu
Aktivira se desnim klikom na
pridruenu kontrolu
U kontekstni meni moe se dodati
ToolStripMenuItem
ToolStripComboBox
ToolStripSeparator
ToolStripTextBox
2275

Kreiranje kontekstnog menija i pridruivanje kontroli

2276

Primer ContextMenuStrip kontrole

private void copyToolStripMenuItem_Click(object sender, EventArgs e)


{
richTextBox1.Copy();
}
private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Pas
2277
te();
}

Timer komponenta

Omoguava generisanje Timer.Tick dogaaja u ravnomernim


vremenskim intervalima
Glavno svojstvo Timer kontrole je Interval kojim se
specificira broj milisekundi izmeu dva uzastopna Tick
dogaaja
Ako je Enabled svojstvo tajmera setovano na vrednost false
Tick dogaaja se nee generisati
Metode Timer.Start i Timer.Stop omoguavaju startovanje i
zaustavljanje tajmera
Pozivom Timer.Start metoda vri se postavljanje svojstva
tajmera Enabled na vrednost true

2278

Primer upotrebe Timer komponente

private void Form1_Load(object sender, EventArgs e)


{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToShortTimeString();
}

2279

StatusStrip kontrola

280

StatusStrip kontrola
StatusStrip kontrola je podskup
ToolStrip kontrole
Koristi se za realizaciju status bara
Uobiajenoje dokovanje za dno windows prozora
U status bar se mogu dodati:

ToolStripStatusLabel kontrola
ToolStripProgressBar kontrola
ToolStripDropDownButton kontrola
ToolStripSplitButton kontrola

281

ProgressBar kontrola
Koristi se da se vizuelno prikae napredovanje
vremenski zahtevnog posla
Svojstvo Maximum odreuje maksimalnu
vrednost ove kontrole
Svojstvo Minimum odreuje minimalnu vrednost ove kontrole
Step predstavlja vrednost koja e se dodati
Value svojstvu kontrole kada se pozove
PerformStep metoda
Value je tekua vrednost ProgressBar kontrole , i ova
vrednost se kree izmeu minimalne i maksimalne
vrednosti

282

Primer upotrebe StatusStrip


kontrole
1

283

Primer upotrebe StatusStrip


kontrole
2
private void button1_Click(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = "Proces pokrenut ...";
toolStripProgressBar1.Value = toolStripProgressBar1.Minimum;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (toolStripProgressBar1.Value != toolStripProgressBar1.Maximum)
{
toolStripProgressBar1.PerformStep();
}
else
{
timer1.Stop();
toolStripStatusLabel1.Text = "Proces Zavrsen ...";
}
}
284

LinkLabel kontrola
Omoguava kreiranje web linkova
Svojstvo ActiveLinkColor postavlja boju
aktivnog linka
LinkArea definie oblast Labele koja
funkcionie kao link
LinkBehavior definie ponaanje linka
LinkColor definie boju linka
LinkVisited pokazuje da li je web adresa ve
poseivana
VisitedLinkColor boja poseivanih web adresa
285

Primer: LinkLabel kontrola

private void linkLabel1_LinkClicked(object sender,


LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("www.microsoft.com");
linkLabel1.LinkVisited = true;
}

286

WebBrowser kontrola

287

WebBrowser kontrola 1
Obezbeuje funkcionalnost za
uitavanje i prikazivanje HTML
strana
Svojstvo AllowWebBrowserDrop odreuje da
li dokument prevuen u ovu kontrolu biva
automatski otvoren
CanGoBack omoguava navigaciju unazad
CanGoForward omoguava navigaciju unapred
Document vraa tekui HTML dokument unutar
WebBrowser kontrole
DocumentStream vraa tok pridruen
tekuem dokumentu
288

WebBrowser kontrola 2
DocumentText svojstvo vraa string koji
predstavlja tekui dokument
DocumentTitle svojstvo vraa naslov
tekueg dokumenta
DocumentType svojstvo vraa tip
tekueg dokumenta
IsOffline svojstvo pokazuje da li sistem radi offline
IsWebBrowserContextMenuEnabled pokazuje
da li je za IE omoguen kontekstni meni
URL daje url adresu tekueg dokumenta
289

Metode WebBrowser kontrole 1


GoBack metoda vri navigaciju na
prethodnu stranu ukoliko ona postoji
GoForward metoda vri navigaciju na sledeu stranu
u navigacionoj istoriji
GoHome vri navigaciju na home stranu pretraivaa
GoSearch vri redirekciju na stranu za
pretraivanje browsera
Navigate metoda vri navigaciju na
specificiranu stranu

290

Metode WebBrowser kontrole 2

Print metoda vri tampanje tekueg dokumenta


ShowPageSetupDialog
ShowPrintDialog
ShowPrintPreviewDialog
ShowPropertiesDialog
ShowSaveAsDialog
Stop zaustavlja tekuu navigaciju i
bilo koje dinamike elemente strane

291

Primer WebBrowser

292

Upotreba metode Navigate


private void b92ToolStripMenuItem_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("www.b92.net");
}
private void glasjavnostiToolStripMenuItem_Click(object sender, EventArgs e)
{
webBrowser1.Navigate("www.glas-javnosti.co.yu");
}
private void primerdocToolStripMenuItem_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(@"C:\Temp\Primer.doc");
}

293

Upotreba metode GoHome

private void Form1_Load(object sender, EventArgs e)


{
webBrowser1.GoHome();
}

294

NotifyIcon komponenta, TrackBar


kontrola, Klasa Process,
DateTimePicker Kontrola

295

NotifyIcon komponenta
Obino se koristi sa aplikacijama koje
rade kao pozadinski procesi
Svojstvo BallonTipIcon odreuje ikonicu (.ico) fajl koji
e biti prikazan u balonu
Svojstvo BalloonTipText definie tekst u balonu
Svojstvo BalloonTipTitle definie naslov balona
Metoda ShowBalloonTip definie vreme
prikazivanja balona u sekundama

296

NotifyIcon primer

notifyIcon1.ShowBalloonTip(12);

297

TrackBar kontrola
Maximum svojstvo definie maksimalnu vrednost na
TrackBaru
Minimum svojstvo definie minimalnu vrednost na TrackBaru
SmallChange svojstvo odreuje broj pozicija
pomeranja klizaa pri pritiskanju strelica sa
tastature
LargeChange odreuje broj pozicija pomeranja
klizaa pri pritiskanji tastera PageUp i
PageDown
Value predstavlja tekuu vrednost klizaa
TickFrequency odreuje broj podela klizaa
Scroll dogaaj se generie pri pomeranju klizaa

298

TrackBar primer

private void trackBar1_Scroll(object sender, EventArgs e)


{
textBox1.Text = trackBar1.Value.ToString();
}

299

Klasa
Process
Obezbeuje pristup lokalnim i udaljenim
procesima i omoguava pokretanje i
zaustavljanje lokalnih sistemskih procesa
Pripada prostoru imena System.Diagnostics
Proces je u najjednostavnijem smislu aplikacija
Process.Start() metoda:
Process.Start (String)
Process.Start (String, String)
Process.Start (ProcessStartInfo)

Klasa ProcessStartInfo specificira vrednosti


koje se koriste prilikom startovanja
procesa
300

Primeri startovanja procesa

301

Primeri startovanja procesa 1


private void buttonIE_Click(object sender, EventArgs e)
{
// Start Internet Explorer
//Process.Start("IExplore.exe");
Process.Start("IExplore.exe","www.blic.co.yu");
}
private void buttonWord_Click(object sender, EventArgs e)
{
//Process.Start("winword.exe");
Process.Start("winword.exe", @"C:\Temp\Primer.doc");
}
private void buttonExcel_Click(object sender, EventArgs e)
{
Process.Start("excel.exe");
}
private void buttonWMPlayer_Click(object sender, EventArgs e)
{
Process.Start("wmplayer.exe", @"C:\Temp\test.wma");
}
302

Startovanje procesa korienjem


StartInfo
klase
private void buttonSI_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
startInfo.Arguments = "www.google.com";
Process.Start(startInfo);
}

303

DateTimePicker Kontrola
Omoguava setovanje datuma ili
vremena korienjem jednostavnog
grafikog interfejsa
Svojstvo Format omoguava setovanje
formata prikaza u kontroli
Svojstvo Value odreuje trenutno setovani
datume ili vreme
Ukoliko se kao Fomat setuje Time, treba
postaviti svojstvo ShowUpDown na
vrednost True

304

Definisanje korisnikog formata


prikaza
datuma

305

Primer upotrebe DateTimePicker


kontrol
e

306

Oitavanje vrednosti iz
dateTimePicker
kontrol
e
private void buttonRezervacija_Click(object sender, EventArgs e)
{
DateTime dt1 = dateTimePicker1.Value;
StringBuilder sb1 = new StringBuilder();
sb1.Append("Vas datum leta je :\n");
sb1.Append(dt1.ToShortDateString() + "\n");
DateTime dt2 = dateTimePicker2.Value;
sb1.Append("Vase vreme polasaka je:\n");
sb1.Append(dt2.ToShortTimeString());
richTextBox1.AppendText(sb1.ToString());
}

307

MonthCalendar kontrola
Uvod u
grafiku

308

MonthCalendar kontrola
Omoguava korisniku da selektuje
opseg datuma
Svojstvo MaxSelectionCount odreuje
maksimalan broj dana koji se moe
selektovati korienjem ove kontrole
Svojstvo SelectionStart odreuje
poetni datum selektovanog
intervala
Svojstvo SelectionEnd odreuje zavrni
datum selektovanog intervala
309

Primer upotrebe MonthCalendar kontrole

310

Primer upotrebe MonthCalendar kontrole kod


private void button1_Click(object sender, EventArgs e)
{
TimeSpan ts = monthCalendar1.SelectionEnd - monthCalendar1.SelectionStart ;
if (ts.Days < 1)
{
MessageBox.Show("Koriscenjem tastera SHIFT selektujte opseg datuma");
return;
}
MessageBox.Show("Rezervistali ste usluge u trajanju od "+ts.Days.ToString() + "
dana.","Rezervacija");
MessageBox.Show("Vasa rezervacija pocinje " +
monthCalendar1.SelectionStart.ToShortDateString() + " a zavrsava se " +
monthCalendar1.SelectionEnd.ToShortDateString());
}

311

Uvod u
grafiku
Prostor imena System.Drawing omoguava:
Dodavanje krugova, elipsi, linija I drugih oblika na UI
Kreiranje grafikona
Editovanje i manipulaciju slikom itd

Klase prostora imena Drawing:

Bitmap
Brush
Font
Graphics
Icon
Image
Pen
Color
Point
Itd

312

Crtanje linija i oblika

Najpre se kreira Graphics objekat forme koji slui kao papir za crtanje
Kreiraju se odgovarajue olovke za crtanje instanciranjem klase Pen
Kreiraju se odgovarajue etke za bojenje i popunjavanje
zatvorenih regiona instanciranjem klase Brush
Moe se ukljuiti i prostor imena using System.Drawing.Drawing2D;
Pozivaju se metode graphics objekta za crtanje:

DrawLine , za crtanje linije


DrawRectangle, za crtanje pravougaonika
DrawPolygon, za crtanje poligona
DrawEllipse, za crtanje kruga i eleipse
DrawString za ispis stringa

313

Primer crtanja razliitih oblika

314

Primer crtanja razliitih oblika


private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
// nacrtaj pravougaonik
Pen p = new Pen(Color.Red, 3);
Rectangle rect = new Rectangle(2, 2, 400, 300);
g.DrawRectangle(p, rect);
// podeli pravougaonik na 4 dela
p.DashStyle = DashStyle.Dash;
g.DrawLine(p, 200, 0, 200, 300);
g.DrawLine(p, 0, 150, 400, 150);
p.Width = 5;
p.DashStyle = DashStyle.Solid;
p.StartCap = LineCap.Round;
p.EndCap = LineCap.ArrowAnchor;
g.DrawLine(p, 395, 3, 200, 150);

315

// poligon
Point[] points =
{ new Point(10, 10),
new Point(10, 100),
new Point(50, 65),
new Point(100, 100),
new Point(85, 40)
};
g.DrawPolygon(p, points);
Brush br = Brushes.Beige;
g.FillPolygon(br, points);
// elipsa1 = krug
Pen p1 = new Pen(Color.Turquoise, 3);
g.DrawEllipse(p1, 100, 175, 60, 60);
// elipsa 2
g.DrawEllipse(p1, 250, 225, 100, 50);
// tekst
Font f = new Font("Arial", 12);
Brush cetka = Brushes.Black;
g.DrawString("C# pisanje", f, cetka, 70, 350);

316

Rad sa
slikom

317

PictureBox kontrola
PictureBox kontrola je osnovna kontrola za
prikaz slike u korisnikom interfejsu
Svojstvo Image slui za itanje i setovanje slike koja
je uitana odnosno koja e biti postavljana unutar
PictureBox kontrole

318

Klase Image i Bitmap


Image je apstraktna klasa koja omoguava rad sa
bmp, jpg i tif fajlovima
Bitmap je najee koriena klasa za rad sa
postojeim slikama, kao i za kreiranje novih
slika
Razliiti konstruktori omoguavaju kreiranje Bitmap slike
iz postojee slike ili kreiranje nove Bitmap slike
Image i = Image.FromFile(@"C:\windows\gone fishing.bmp");
pictureBox1.BackgroundImage = i;

Bitmap b = new Bitmap(@"C:\windows\gone fishing.bmp");


pictureBox1.BackgroundImage = b;

319

Upotreba Bitmap klase


using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
Bitmap bm = new Bitmap(400, 350);
Graphics g = Graphics.FromImage(bm);
g.DrawIcon(SystemIcons.Exclamation, 40, 40);
Pen p = new Pen(Color.Red, 5);
Rectangle rect = new Rectangle(20, 100, 300, 200);
g.DrawRectangle(p, rect);
Brush cetka = Brushes.Blue;
g.FillRectangle(cetka, rect);
cetka = Brushes.White;
Font fnt = new Font("Arial", 16);
g.DrawString("Slika kreirana iz koda", fnt, cetka, 100, 310);
bm.Save("bm.jpg", ImageFormat.Jpeg);
string radniFolder = Environment.CurrentDirectory;
pictureBox1.Image = Image.FromFile(radniFolder + @"\bm.jpg");
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
MessageBox.Show("Pronadjite sliku u " + radniFolder, "Slika kreirana",
MessageBoxButtons.OK, MessageBoxIcon.Information);

320

Prikaz rezultata primera

321

Prime
r

322

public partial class Form1 : Form


{
public int brojac = 1;
public Image slika1, slika2;
public Form1()
{
InitializeComponent();
slika1 = pictureBox1.Image;
slika2 = Image.FromFile(@"C:\Temp\IconVista\Windows Vista\Folder\Printer
Folder.png");
}
private void button1_Click(object sender, EventArgs e)
{
if (brojac % 2 == 0)
pictureBox1.Image = slika1;
else
pictureBox1.Image = slika2;
brojac ++;
}
}
323

ImageList komponenta
Koristi se za kreiranje liste slika koje se
kasnije mogu koristiti u aplikaciji
Svojstvo Images vraa kolekciju
slika ove komponente

pictureBox2.Image = imageList1.Images[0];
324

Prime
r
Kreirati ImageList kolekciju koja sadri odreeni skup slika. Posle uitavanja
windows forme se svake 2 sekunde u PictureBox kontroli prikazuje razliita slika
iz ImageList kolekcije.

325

Reenj
e:
// private int brojac=0; // clan klase private void menjajSliku()
{
pictureBox2.Image = imageList1.Images[brojac1];
brojac1++;
if (brojac1 > imageList1.Images.Count - 1)
brojac1 = 0;
}

private void Form1_Load(object sender, EventArgs e)


{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
menjajSliku();
}

326

Slanje maila iz windows


aplikaci
je

327

Kreiranje mail poruke


Za kreiranje mail poruke potrebno je preduzeti
sledee korake:

Potrebno je ukljuiti prostor imena System.Net.Mail (


po potrebi i prostor imena System.net
Kreira se objekat klase MailMessage koji predstavlja
poruku koja e biti poslata
Kreiraju se objekti klase MailAddress, jedan za poiljioca
poruke i po jedan za svakog primaoca poruke
Konstruktor klase MailAddress sadri email adresu i ime
koje e biti prikazano primaocu poruke

Korienjem svojstva From se MailMessage objektu dodeljuje


MailAdres objekat poiljioca poruke
Korienjem svojstva To se MailMessage objektu dodeljuju
MailAdress objekti primaoca poruke
Korienjem svojstva Subject specificira se tema poruke
Korienjem svojstva Body specificira se sadraj, tj. telo poruke
328

Primer kreiranja poruke


MailMessage poruka = new MailMessage();
MailAddress posiljioc = new MailAddress("goran.aritonovic@gmail.com", "Goran
Aritonovic");
MailAddress primaoc = new MailAddress("goran_aritonovic@yahoo.com");
poruka.From = posiljioc;
poruka.To.Add(primaoc);
poruka.Subject = "Tema poruke";
poruka.Body = "Ovo je sadrzaj poruke";

329

Dodavanje fajlova u poruku


Najpre se kreiraju objekti klase Attachment
koji u konstruktoru imaju putanju fajla koji se
alje, na fajl sistemu
Zatim se objekti klase Attachment
dodaju u Attachments kolekciju
prethodno kreiranog objekta
MailMessage (ovaj objekat predstavlja
poruku koja se alje)

330

Primer pridruivanja fajla u poruku


Attachment at1 = new Attachment(@"C:\Temp\Primer.doc");
poruka.Attachments.Add(at1);

331

Slanje
maila
Slanju mejla se moe pristupiti tek poto je objekat klase
MailMessage prethodno kreiran i inicijalizovan
Instancira se klasa SmtpClient klijent, gde u
konstruktoru treba navesti adresu smtp servera
odreenog provajdera
Kreira se objekat klase NetworkCredential
(System.Net) kome se pridruuju korisniko ime i
ifra za pristup
Korienjem svojstva Credentials se
SmtpClient objektu pridruuje objekat kalse
NetworkCredential
U odreenim sluajevima je podrebno naglasiti da se radi o
SSL slanju maila (EnableSsl)
U odreenim sluajevim je potrebno definisatri port
SmtpClienta
Poziva se Send metoda objekta SmtpClient klase
332

Primer slanja maila korienjem


gmailovog smtp servera
SmtpClient mailClient = new SmtpClient("smtp.gmail.com");
mailClient.EnableSsl = true;
mailClient.Port = 587;
mailClient.Credentials = new NetworkCredential("goran.aritonovic@gmail.com",
**********");
try
{
mailClient.Send(poruka);
MessageBox.Show("poruka poslata");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

333

Ulaznoizlazni
tokovi

334

Klasa Environment

Prostor imena System.IO


Klasa Environment ne moe da se nasledi
CurrentDirectory property omoguava itanje ili
setovanje tekueg foldera
string tF =
Environment.CurrentDirectory;
Environment.CurrentDirectory =
@"C:\Baze";

public static string[] GetLogicalDrives();


Ova metoda klase Environment daje spisak svih drajvova koji su
instalirani na sistemu
string[] drajvovi = Environment.GetLogicalDrives();

335

Klasa
Path

Path je string koji odreuje lokaciju fajla ili foldera


Metoda
public static string Combine(string path1, string path2);
Metoda
public static string GetDirectoryName( string path );
Metoda
public static string GetFileName(string path);

string path1 =@ "c:\temp";


string path2 = @"subdir\file.txt";
string combination = Path.Combine(path1, path2);
string fileName = @"C:\mydir\myfile.ext";
string result = Path.GetFileName(fileName);
string result = Path. GetDirectoryName(fileName);

336

Klasa DirectoryInfo
Koristi se za rad sa folderima
Svojstvo Parent daje roditeljski folder tekueg foldera
Svojstvo Root daje DirectoryInfo klasu Root foldera
Metoda GetDirectories daje niz podfoldera
(DirectoryInfo objekata) tekueg foldera
Metoda GetFiles daje niz objekata FileInfo koji
predstavljaju fajlove u tom folderu
Metoda Create kreira folder specificiran DirectoryInfo klasom
Metoda CreateSubdirectory kreira podfolder tekueg foldera

337

Primer upotrebe DirectoryInfo


klas
e
private void buttonFolder_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.Clear();
DirectoryInfo osnovni = new
DirectoryInfo(folderBrowserDialog1.SelectedPath);
richTextBox1.AppendText("Spisak podfoldera:\n");
richTextBox1.AppendText("-------------------------------------\n\n");
foreach (DirectoryInfo di in osnovni.GetDirectories())
{
richTextBox1.AppendText(di.Name + "\n");
}

338

Klasa
FileInfo
Svojstvo Directory daje DirectoryInfo
objekat koji predstavlja folder kome
pripada posmatrani fajl
Svojstvo DirectoryName daje ime
folder kome pripada posmatrani fajl
Svojstvo IsReadOnly je get, set
svojstvo koje odreuje da li se fajl
moe modifikovati
Svojstvo Length daje veliinu fajla u
bajtovima
Metoda CopyTo kreira kopiju fajla na
novoj lokaciji
Metoda Create kreira
fajl

339

Primer upotrebe FileInfo klase


private void buttonFolder_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.Clear();
DirectoryInfo osnovni = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
richTextBox1.AppendText("Spisak fajlova u osnovnom folderu:\n");
richTextBox1.AppendText("-------------------------------------\n\n");
foreach (FileInfo fi in osnovni.GetFiles())
{
richTextBox1.AppendText(fi.Name + "\n");
}
}
}

340

Klasa
DriveInfo
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives)
{
richTextBox1.AppendText( drive.Name + "\t");
richTextBox1.AppendText(drive.DriveType + "\n");
}

341

Ulazno izlazni tokovi(strimovi) i


fajlovi
Fajl je kolekcija podataka
sauvana na disku koja ima
svoje ime i putunju
(directory path)
Tok je objekat koji omoguava
itanje i upis podataka
(FileStream, MemoryStream,
NetworkStream itd.)

itanje je transfer podataka iz


stream a u strukturu podataka kao
to je niz bajtova
upis je transfer podataka i
strukture podataka u stream
stream podrava pozicioniranje
(seeking)

na
odre
eno
mest
o
unuta
r
strea
m a

342

StreamReader klasa
Klasa StreamReader ita linije iz
standardnog tekstualnog fajla kao to
je npr, log fajl
Obezbeuje funkcionalnost za itanje
podataka Metoda Read ita skup karaktera u
strimu
Metoda ReadLine ita liniju karaktera u strimu
Metoda ReadToEnd ita ceo strima
Metoda Close zatvara rider i strim koji
mu je pridruen
343

Primer itanja podataka iz tekstualnog fajla


private void buttonCitaj_Click(object sender, EventArgs e)
{
string folder = @"C:\Temp";
string imaFajla = "proba.txt";
string putanja = Path.Combine(folder, imaFajla);
StreamReader sr = new StreamReader(putanja);
string linija = null;
while ((linija = sr.ReadLine()) != null)
{
richTextBox1.AppendText(linija + "\n");
}
sr.Close();
}

richTextBox1.AppendText(sr.ReadToEnd());

344

Klasa StreamWriter
private void buttonPisi_Click(object sender, EventArgs e)
{
string imeFajla = "MojFajl.txt";
Environment.CurrentDirectory = @"C:\Temp";
if (File.Exists(imeFajla))
{
MessageBox.Show("Vec postoji fajl sa tim imenom");
return;
}
//StreamWriter sr = File.CreateText(imeFajla);
StreamWriter sr = new StreamWriter(@"C:\Temp\MojFajl.txt");
sr.WriteLine("Ovo je prva linija fajla.");
sr.WriteLine(2.56);
sr.WriteLine("Vrednost");
sr.WriteLine(8.45f);
MessageBox.Show("Fajl kreiran");
sr.Close();
}
345

Kontejnerske kontrole

346

Vrste
kontrola

Panel
FlowLayoutPanel
GroupBox
TableLayoutPanel
TabControl
SplitContainer

347

Anchor i Dock svojstvo


Ova svojstva definiu ponaanje
kontrole unutar svoje roditeljske
kontrole
Anchor svojstvo omoguava
definisanje konstantnog rastojanja
kontrole od jedne ili vie ivica
roditeljske kontrole

Dock svojstvo omoguava


vezivanje kontrole za jednu
od ivica roditeljske kontrole
348

Anchor i Dock svojstvo

349

Panel
kontrola
Kreira podsekciju na formi koja
moe da hostuje druge kontrole
Svojstvo AutoScroll odreuje da li
panel prikazuje skrol barove kada se
vri hostovanje kontrola van vidljive
oblasti panela
BorderStyle svojstvo definie da li je
border Panel kontrole vidljiv i ukoliko
jeste kako izgleda

350

FlowLayoutPanel
Ovo je podklasa izvedena iz Panel kontrole
Kontrole se dodaju na formu sleva na desno
poevi od gornjeg levog ugla panela
podrazumevano FlowDirection setovanje
Kada elimo da prekinemo tok onda se
svojstvo FlowBreak poslednje kontrole u
toku postavlja na vrednost true nakon
ega se kreira novi tok

351

TableLayoutPanel

352

TabContr
ol
Omoguava grupisanje kontrola
korienjem kartica
TabPages svojstvo ove kontrole
omoguava definisanje eljenih
kartica
Svojstvo Multiline ppostavljeno na
vrednost true omoguava da se
tabovi definiu u vie
od jedne linije
Svojstvo Text odreuje tekst koji e
pojavljuje na jeziku same kartice
353

TabContr
ol

354

SplitContain
er
Omoguava podelu windows forme na
panele po horizontali ili vertikali
Unutar ove kontrole kreiraju se dve
kontrole SplitterPanel kojima se
pristupa
korienjem
svojstava
Panel1 i Panel2

355

Podela forme na oblasti korienjem


SplitContainer kontrole

356

Uvod u ADO.NET

357

ADO.NE
T
ADO.NET je skup klasa za rad sa podacima
.NET snabdevai podataka su klase
koje obezbeuju mogunost
konektovanja na izvor podataka
SQL Server snabdeva podataka
OLE DB snabdeva podataka
ostali snabdevai podataka

Prostori imena za rad sa podacima su

System.Data
System.Data.SqlClient
System.Data.OleDb
System.Data.SqlTypes
System.Xml

358

Konektovani scenario
Resursi se uzimaju sa servera
sve dok se konekcija ne zatvori
korisnik je konstantno
povezan na izvor podataka
podaci su aurni
konkurentnost se lake kontrolie
mora postojati konstantna
mrena konekacija

359

Korienje ADO.NET klasa u


konektovanom scenariju
otvaranje konekcije
izvravanje komande
obrada zapisa u reader
u
zatvaranje readera
zatvaranje konekcije

360

Prostori imena i nazivi klasa


Da bi se koristio SQL Server .NET
snabdeva podataka potrebno je
ukljuiti prostor imena
System.Data.SqlClient. U ovom prostoru
imena klase poinju sa prefiksom Sql ,
npr. SqlConnection
Da bi se koristio OLE DB .NET
snabdeva mora se ukljuiti prostor
imena System.Data.OleDb prostor
imena. Klase poinju sa prefiksom
OleDb , npr. OleDbConnection

361

Klase konektovanog scenarija


Klasa XxxConnection (Xxx
oznaava odgovarajui prefiks)
omoguava uspostavljenje
konekcije na odgovarajui izvor
podataka
Klasa XxxCommand izvrava SQL
komandu nad odgovarajuim
izvorom podataka
Klasa XxxDataReader slui za itanje
podataka iz odgovarajueg izvora
podataka

362

Diskonektovani scenario
U diskonektovanom scenariju podskup
podataka iz baze podataka se kopira
lokalno
Dok se korisnik nalazi u
diskonektovanom radu ostali korisnici
mogu da koriste konekciju
Diskonektovani rad poveava skalabilnost aplikacije
Podaci nisu uvek aurni
Kada se podacima iz lokalne kopije
podataka aurira baza moe doi do
konflikta

363

Korienje ADO.NET klasa u


diskonektovanom scenariju
Otvaranje konekcije
Punjenje DataSeta
Zatvaranje konekcije
Obrada podataka u
DataSetu
Otvaranje konekcije
Auriranje
izvora
podataka
Zatvaranje konekcije

364

Klase konektovanog scenarija


Klase koje se koriste u diskonektovanom
okruenju nalaze se u System.Data
prostoru imena
XxxDataAdapter klasa koristi Connection, Command i
DataReader klase da bi popunila DataSet
XxxConnection uspostavlja
konekciju sa specificiranim
izvorom podataka
XxxCommand izvrava komandu nad
odgovarajuim izvorom podataka
XxxDataReader ita podatke iz izvora podataka

365

Uspostavljanje konekcije sa bazom


podatak
a

366

Tehnologije za pristup bazi podataka


ODBC Open Database Connectivity
DAO Data Access Objects
Object Linking and Embedding
Database (OLEDB)
ActiveX Data Objects ADO
ADO.NET

367

.NET snabdevai podataka


(Data
Providers)
SQL Server .NET snabdeva podataka se isporuuje uz
.NET Framework
On koristi Tabular Data Stream (TDS) protokol
za slanje zahteva i primanje odgovora od SQL
Servera
Ima visoke performanse jer je protokol TDS
veoma brz jer pristupa SQL Serveru direktno
bez OLE DB ili ODBC sloja.
Klase SQL Server .NET snabdevaa podataka
nalaze se u prostoru imena
System.Data.SqlClient
Ovaj snabdeva podataka se preporuuje
za sve aplikacije koje rade sa SQL Server 7
verzijom ili vie
368

OLE DB snabdevai podataka


Isporuuje se uz .NET Framework
On komunicira sa izvorom
podataka sa specifinim za taj
izvor podataka OLE DB
provajderom

Preporuuje se korienje ovog


snabdevaa podataka za aplikacije
koje komuniciraju sa Accessom
Klase ovog snabdevaa podataka
nalaze se u prostoru imena
System.Data.OleDb

369

ODBC .NET snabdeva podataka


Isporuuje se uz .NET Framework
Drajveri koji su kompatibilni sa
ODBC.NET snabdevaem podataka
su:
Microsoft SQL Server ODBC Driver
Microsoft ODBC Driver for Oracle
Microsoft Access (Jet) ODBC Driver

Klase ovog snabdevaa podataka


nalaze se u prostoru imena
System.Data.Odbc
Ovi snabdevai podataka se koriste
ako ne postoje neki drugi .NET
snabdeva ili OLE DB snabdeva
370

Konekcij
e
Pre bilo kakvog rada sa bazom podataka
potrebno je kreirati a zatim otvoriti
konekciju
U ADO.NET se kreira objekat klase Connection
System.Data.SqlClient.SqlConnection
omoguava kreiranje konekcije na SQL
Server bazu podataka
System.Data.OleDb.OleDbConnection
omoguava kreiranje konekcije na
svaki izvor podataka sa pridruenim
OLE DB provajderom

371

Objekat Connection
Predstavlja konekciju na izvor podataka
U ADO.NETu su raspoloivi sledei
Connection objekti
SqlConnection za uspostavljanje konekcije na
SqlServer bazu podataka poev od verzije
2000
OleDbConnection za uspostavljanje konekcije na OLEDB
izvor podataka kao to je npr. Access
OdbcConnection za uspostavljanje konekcije na ODBC
izvor podataka
OracleConnection za uspostavljanje konekcije
na Oracle bazu podataka poev od verzije 7.3
372

Connection objekat
Svaki Connection objekat ije
izveden iz klase DbConnection
koja se nalazi u prostoru imena
System.Data.Common
Klasa DbConnection predstavlja
konekciju na bazu podataka

373

Svojstva klase DbConnection


ConnectionString svojstvo definie
string koji se koristi za otvaranje
konekcije
Svojstvo DataSource specificira ime
database servera na koji se vri konekcija
Svojstvo Database specificira ime baze na
koju se vri konekcija
Svojstvo State specificira stanje konekcije
Svostvo ConnectionTimeout specificira vreme
dozvoljeno za uspostavljenje konekcije nakon
ega se generie poruka o greci
374

Metode i dogaaji klase DbConnection


Metoda Open otvara konekciju na bazu
podataka koristei vrednosti specificirane
u konekcionom stringu
Metoda Close zatvara konekciju sa bazom
podataka i oslobaa sistemske resurse
BeginTransaction metoda otpoinje
transakciju nad bazom
Dogaaj StateChange se trigeruje kada
se stanje konekcije menja (npr. iz
otvorenog u zatvoreno)

375

Konekcija kod Windows


autentifikac
ije
SqlConnection con = new SqlConnection();
con.ConnectionString = konekcioni string";
SqlConnection con = new SqlConnection("konekcioni string");

Windows autentifikacija:
SqlConnection con = new SqlConnection();
string konekcioniString = @"Data Source=(local)\SqlExpress;
Initial Catalog=Northwind;Integrated Security=true";

Data Source - ime SQL server-a


Initial Catalog ime baze sa kojom se radi

376

Primer konekcije WA
private void button1_Click(object sender, EventArgs e)
{
SqlConnection konekcija = new SqlConnection();
string konekcioniString = @"Data Source=(local)\SqlExpress;
Initial Catalog=Northwind;Integrated Security=true";
konekcija.ConnectionString = konekcioniString;
try
{
konekcija.Open();
}
catch(Exception exc)
{
MessageBox.Show(exc.Message);
}
MessageBox.Show(konekcija.State.ToString(), "Stanje konekcije");
}
}

377

Konekcija kod SQLServer


autentifikac
ije
//SQL Server autentifikacija
string konekcioniString =@"Data Source=(local)\SqlExpress;Initial
Catalog=Northwind;User ID=sa;Password=****";

378

OLE DB konekcija
connectionString=@Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Temp\Northwind.mdb"

using System.Data.OleDb;

379

Test OleDb konekcije


private void button3_Click(object sender, EventArgs e)
{
connectionString=@Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Temp\Northwind.mdb"
OleDbConnection con = new OleDbConnection(konekcioniString);
try
{ con.Open();
}
catch (Exception cp)
{
MessageBox.Show(cp.ToString());
}
MessageBox.Show(con.State.ToString());
}

380

Kreiranje koncije u dizajn modu1


Add New Data Source iz Data menija

381

Kreiranje koncije u dizajn modu2


New Connection

382

Kreiranje koncije u dizajn modu3

383

Kreiranje koncije u dizajn modu4

384

Kreiranje koncije u dizajn modu5

385

Kreiranje koncije u dizajn modu6


Finish

386

itanje konekcionog stringa iz


konfiguracionog fajla aplikacije (app.config)
using System.Configuration;
private void button2_Click(object sender, EventArgs e)
{
string konekcioniString =
ConfigurationManager.ConnectionStrings["KonektovanjeKon.Properties.Settings.
NorthwindConnectionString1"].ConnectionString;
SqlConnection con = new SqlConnection(konekcioniString);
try
{
con.Open();
}
catch (Exception cp)
{
MessageBox.Show(cp.ToString());
}
}
387

Konekcije i obrada izuzetaka


try
{

con.Open();
// (Izvrsavanje ADO.NET komandi)

}
catch (SqlException err)
{
MessageBox.Show(err.ToString());
}
finally
{
con.Close();
}

388

Rad u konektovanom okruenju

389

Objekat Command
Koriste se za izvravanje SQL komandi
i uskladitenih procedura nad bazom
podataka
SqlCommand ili OleDbCommand
Objekat Command omoguava
direktan pristup podacima u bazi u
konektovanom okruenju
Pomou njega mogue je izvravati
SELECT, INSERT, UPDATE i DELETE
naredbe nad elementima baze
podataka
390

Svojstva Command objekta


Svojstvo CommandText predstavlja tekst SQL
komande ili naziv uskladitene procedure
CommandType svojstvo se setuje na vrednost
Text ili na vrednost StoredProcedure
Connection svojstvo odreuje objekat
Connection koji e Commnad objekat koristiti
Parameters svojstvo daje kolekciju
parametara Command objekta koji se koriste
za izvravanje parametarskih upita
391

Metode Command objekta


Metoda ExecuteNonQuery izvrava
izvrava
SQL
komande
ili
uskladitene procedure koje ne
vraaju vrednosti (INSERT, UPDATE,
DELETE)
Metoda ExecuteReader izvrava
komande koje vtaaju tabelarne
podatke (SELECT)
Metoda ExecuteScalar se koristi za
izvravanje
SQL
komandi
ili
uskladitenih procedura koje vraaju
jednu skalarnu vrednost
392

Kreiranje i konfigurisanje
Command objekta
private SqlConnection cnnNorthwind = new SqlConnection(
@"Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated
Security=True");

SqlCommand cmdCustomers= new SqlCommand();


cmdCustomers.Connection = cnnNorthwind;
cmdCustomers.CommandType = CommandType.Text;
cmdCustomers.CommandText = "SELECT CustomerID, CompanyName
FROM Customers";

393

Kreiranje i konfigurisanje
Commanad objekta koji izvrava
uskladitenu proceduru
SqlCommand cmdProcedura = new SqlCommand();
cmdProcedura.Connection = cnnNorthwind;
cmdProcedura.CommandType = CommandType.StoredProcedure;
cmdProcedura.CommandText = "Ten Most Expensive Products";

394

Kreiranje Command objekata koji


izvravaju DDL(Data Definition
Language) komande
SqlCommand cmdKreirajTabelu = new SqlCommand();
cmdKreirajTabelu.Connection = cnnNorthwind;
cmdKreirajTabelu.CommandType = CommandType.Text;
StringBuilder tekstKomande = new StringBuilder();

tekstKomande.Append("CREATE TABLE Prodavac");


tekstKomande.Append("(");
tekstKomande.Append("ProdavacID int IDENTITY(1,1) NOT NULL,");
tekstKomande.Append("Ime nvarchar(50) NOT NULL,");
tekstKomande.Append("Prezime nvarchar(50) NOT NULL");
tekstKomande.Append(")");
cmdKreirajTabelu.CommandText = tekstKomande.ToString();

395

Kreiranje i izvravanje komande


koja vraa sklarnu vrednost
SqlCommand skalarnaKomanda = new SqlCommand();
skalarnaKomanda.Connection = cnnNorthwind;
skalarnaKomanda.CommandType = CommandType.Text;
skalarnaKomanda.CommandText = "SELECT Count(*) FROM Customers";
cnnNorthwind.Open();
int brojKorisnika = (int)skalarnaKomanda.ExecuteScalar();
MessageBox.Show("Postoji ukupno " + brojKorisnika.ToString() + " korisnik");
cnnNorthwind.Close();

396

Auriranje baze podataka 1


SqlCommand updateKomanda = new SqlCommand();
updateKomanda.Connection = cnnNorthwind;
updateKomanda.CommandType = CommandType.Text;
StringBuilder upit = new StringBuilder();
upit.Append(@"UPDATE Categories SET CategoryName='Morski plodovi'");
upit.Append(@"WHERE CategoryID=8");
updateKomanda.CommandText = upit.ToString();

397

Auriranje baze podataka 2


try
{ cnnNorthwind.Open();
updateKomanda.ExecuteNonQuery(); // INSERT, DELETE
MessageBox.Show("Podaci promenjeni");
}
catch (SqlException qex)
{
MessageBox.Show(qex.Message);
}
finally
{
if (cnnNorthwind != null)
cnnNorthwind.Close();
}

398

DataRead
er
DataReader je brz(readonly,forward
only) kursor koji se pomera kroz skup
zapisa
Pristup podacima korienjem objekta
DataReader sastoji se od sledeih koraka:
Kreira se objekat Connection
Kreira se Command objekat sa odgovarajuim SELECT upitom
Otvara se Connection objekat
Izvrava se Command.ExecuteReader( ) metoda
koja vraa objekat DataReader
Koristei DataReader.Read( ) metodu objekta
DataReader prolazi se kroz sve vrste
Kada Read() metoda vrati false zatvara se objekat
DataReader i objekat Connection

399

Svojstva i metode DataReader objekta


Read metoda

uitava zapis
vraa true ako ima jo zapisa, false ukoliko se stiglo do
poslednjeg zapisa

Podrazumevana pozicija SqlDataReadera


je ispred prvog zapisa
Pristup vrednosti u koloni odreenog reda na koga
DataReader pokazuje
Vraene vrednosti su u izvornom formatu i potrebno
je izvriti njihovo kastovanje da bi mogle da se
koriste
aReader[ImeKolone] ili aReader[PozicijaKolone].

GetDateTime, GetDouble,GetInt32 itd.


GetValues metoda vraa niz objekata
koji sadre vrednosti iz tekue vrste
Metoda IsDbNull testira da je vrednost
kolone u tekuem zapis null vrednost.

400

Primer upotrebe DataReader-a


private void buttonCitaj_Click(object sender, EventArgs e)
{
string SelectUpit = "SELECT ContactName FROM Customers";
SqlCommand selectKomanda = new SqlCommand();
selectKomanda.Connection = cnnNorthwind;
selectKomanda.CommandType = CommandType.Text;
selectKomanda.CommandText = SelectUpit;
SqlDataReader reader = null;
try
{
cnnNorthwind.Open();
reader = selectKomanda.ExecuteReader();
while (reader.Read())
{
richTextBox1.AppendText(reader.GetString(0) + "\n");
}
}
catch (Exception xcp)
{
MessageBox.Show(xcp.ToString());
}
}
401

Parametri u SQL komandama


Parametri se mogu shvatiti kao promenljive koje se
koriste za razmenu podataka izmeu aplikacije i
baze podataka
Tipa parametra se definie korienjem standardne
System.Data.SqlDbType enumeracije
Tipian primer korienja parametra je WHERE klauzula u
SQL
upitu

// parametarski SELECT upit


SELECT CustomerID, CompanyName, City
FROM Customers
WHERE City = @City

402

Tipovi parametara
Input ulazni parametri se koriste u
komandnim objektima za slanje podataka
bazi
Output izlazni parametri se koriste za
prihvatanje podataka od baze podataka
nakon izvravanja odreenih upita
InputOutput ulazno/izlazni parametri
opmoguavaju i slanje i prihvatanje
podataka

403

Definisanje parametarskog upita


SqlCommand cmdKorisnikIzGrada = new SqlCommand();
// Postavi svojstva komande
cmdKorisnikIzGrada.Connection = cnnNorthwind;
cmdKorisnikIzGrada.CommandType = CommandType.Text;
StringBuilder upit = new StringBuilder();
upit.Append(@"SELECT CustomerID, CompanyName, City");
upit.Append(@"FROM Customers ");
upit.Append(@"WHERE City = @City");
cmdKorisnikIzGrada.CommandText = upit.ToString();

Blanko mesto -
404

Kreiranje parametara
// Kreiraj @City parametar
SqlParameter CityParameter = new SqlParameter("@City",SqlDbType.NVarChar);
// NULL vrednosti su dozvoljene
CityParameter.IsNullable = true;

cmdKorisnikIzGrada.Parameters.Add(CityParameter);
CityParameter.Value = CityTextBox.Text;

405

Rad sa uskladitenim procedurama

406

Kreiranje uskladitenih
procedu
ra
CREATE PROCEDURE UpdateCategory
(
@CategoryID int,
@CategoryName nvarchar(15)
)
AS
UPDATE Categories SET CategoryName=@CategoryName
WHERE CategoryID=@CategoryID

407

Izvavanje parametarskog upita


korienjem uskladitene procedure
SqlCommand updateKomanda = new SqlCommand();
updateKomanda.Connection = cnnNorthwind;
updateKomanda.CommandType = CommandType.StoredProcedure;
updateKomanda.CommandText = "updateCategory";
SqlParameter CategoryIDParameter = new
SqlParameter("@CategoryID",SqlDbType.Int);
SqlParameter CategoryNameParameter = new
SqlParameter("@CategoryName", SqlDbType.VarChar);
updateKomanda.Parameters.Add(CategoryIDParameter);
updateKomanda.Parameters.Add(CategoryNameParameter);
CategoryIDParameter.Value = 8;
CategoryNameParameter.Value = "Sea Food";
cnnNorthwind.Open();
updateKomanda.ExecuteNonQuery();
MessageBox.Show("Zapis azuriran");
cnnNorthwind.Close();

408

Uskladitene procedure sa
izlaznim
parametri
ma
CREATE Procedure DodajKorisnika
(
@ImePrezime nvarchar(50),
@Email varchar(20),
@Sifra nvarchar(30),
@KorisnikID int OUTPUT
)
AS
INSERT INTO Korisnici ( ImePrezime, Email, Sifra )
VALUES ( @ImePrezime, @Email, @Sifra )
SELECT @KorisnikID = @@Identity
GO

409

Definisanje izlaznih parametara


1
SqlCommand insertKomanda = new SqlCommand();
insertKomanda.Connection = cnnNorthwind;
insertKomanda.CommandType = CommandType.StoredProcedure;
insertKomanda.CommandText = "DodajKorisnika ";
SqlParameter ImePrezimeParameter = new SqlParameter("@ImePrezime
", SqlDbType.VarChar);
SqlParameter EmailParameter = new SqlParameter("@Email ",
SqlDbType.VarChar);
SqlParameter SifraParameter = new SqlParameter("@Sifra ",
SqlDbType.VarChar);
SqlParameter KorisnikIDParameter = new SqlParameter("@KorisnikID ",
SqlDbType.Int);
KorisnikIDParameter.Direction = ParameterDirection.Output;
insertKomanda.Parameters.Add(ImePrezimeParameter);
insertKomanda.Parameters.Add(EmailParameter);
insertKomanda.Parameters.Add(SifraParameter);
insertKomanda.Parameters.Add(KorisnikIDParameter);
410

Definisanje izlaznih parametara


2
ImePrezimeParameter.Value = textIme.Text;
EmailParameter.Value = textEmail.Text;
SifraParameter.Value = textSifra.Text;
cnnNorthwind.Open();
try
{
insertKomanda.ExecuteNonQuery();
MessageBox.Show("ID korisnika je :" +
KorisnikIDParameter.Value);
}
catch (Exception xcp)
{
MessageBox.Show(xcp.Message);
}
cnnNorthwind.Close();

411

Povratna vrednost uskladitene


procedur
e
CREATE Procedure DodajKorisnika
(
@ImePrezime nvarchar(50),
@Email varchar(20),
@Sifra nvarchar(30)
)
AS
INSERT INTO Korisnici ( ImePrezime, Email, Sifra )
VALUES ( @ImePrezime, @Email, @Sifra )
RETURN @@Identity
GO

412

Rad u diskonektovanom okruenju

413

Klasa DataAdapter
Ova klasa predstavlja most izmeu
izvora podataka i objekta DataSet
Objekat DataSet se koristi za uvanje
lokalne kopije podataka iz baze
DataAdapter prima podatke od objekta
Connection i prosleuje ih objektu DataSet
(itanje iz baze)
Promene na podacima iz objekta
DataSet prosleuje nazad do objekta
Connection kako bi se podaci aurirali
u samom izvoru
podataka (upi u bazu auriranje)
414

Funkcionisanje DataAdapter
objekt
a

415

Karakteristike objekta DataAdapter


Koristi Command objekte da
komunicira sa bazom
SelectCommand predstavlja komandu
kojom se itaju podaci iz baze
Insert, Update i Delete komande se
koristi da se promene nad podacima u
DataSetu
iskoriste za auriranje podataka u bazi
Pri kreiranju DataAdapter objekta
mora se specificirati SELECT
komanda

416

Svojstva i metode DataAdapetera


Svojstva:
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand

Metode:
Fill
Upadate

417

Kreiranje objekta DataAdapter


Kreiranje DataAdapter objekta specificiranjem njegove SELECT komande i
konekcionog objekta

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM


Customers",cnnNorthwind);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
dataGridView1.DataSource = ds.Tables["Customers"];

SqlDataAdapter da = new SqlDataAdapter();


SqlCommand selectNaredba = new SqlCommand();
selectNaredba.Connection = cnnNorthwind;
selectNaredba.CommandText = @"SELECT * FROM Customers";
da.SelectCommand = selectNaredba;

418

Definisanje INSERT, UPDATE i DELETE


komande DataAdapter objekta
SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter("SELECT * FROM
Shippers", cnnNorthwind);
SqlCommand InsertCommand = new SqlCommand("Validna SQL Insert komanda",
cnnNorthwind);
// konfigurisi parametre komande ukoliko je potrebno
SqlCommand UpdateCommand = new SqlCommand("Validna SQL Update
komanda", cnnNorthwind);
// konfigurisi parametre komande ukoliko je potrebno
SqlCommand DeleteCommand = new SqlCommand("Validna SQL Delete komanda",
cnnNorthwind);
// konfigurisi parametre komande ukoliko je potrebno
SqlDataAdapter1.InsertCommand = InsertCommand;
Sql1.UpdateCommand = UpdateCommand;
SqlDataAdapter1.DeleteCommand = DeleteCommand;

419

Izvoenje komandi DataAdaptera


SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers",
cnnNorthwind);
SqlCommandBuilder komande = new SqlCommandBuilder(da);
SqlCommand insertKomanda = komande.GetInsertCommand();
SqlCommand updateKomanda = komande.GetUpdateCommand();
SqlCommand deleteKomanda = komande.GetDeleteCommand();
Uslov za izvoenje komandi:
Select komanda je napisana nad jednom tabelom
Select komanda vraa primarni klju tabele

420

DataS
et
DataSet je memorijska predstava
podataka, koja ukljuuje tabele,
relacije izmeu tabela i ogranienja
Konekcija sa bazom podataka
nije neophodna da bi se
manipulisalo sa podacima u
DataSetu
Podaci u DataSetu se uvaju na
slian nain kao to se uvaju u
relacionoj bazi podataka
Podaci iz DataSeta mogu se prikazati u XML
formatu

421

Svojstva objekta DataSet


Tables property daje kolekciju DataTable
objekata koji se nalaze u DataSetu
Relations property predstavlja
kolekciju objekata DataRelation,
objekti
DataRelations se koriste za opis veza
izmeu tabela u DataSetu
Objekat DataTable ima sledee kolekcije

Columns (kolekcija objekata DataColumn)


Rows (kolekcija objekata DataRow)
Constraints (kolekcija objekata Constraint)
ChildRelations (kolekcija objekata DataRelation)

422

Kreiranje objekta DataSet iz koda


DataSet ds = new DataSet(NorthwindDataSet");
DataTable CustomersTable = new DataTable ();
DataTable OrdersDataTable = new DataTable ();
ds.Tables.Add(CustomersTable);
ds.Tables.Add(OrdersDataTable);

423

Struktura objekta DataTable

424

Punjenje objekta DataTable korienjem


DataAdapte
ra
Korienje Fill metode DataAdaptera
Fill metod izvrava SELECT komandu
DataAdaptera

DataSet ds = new DataSet();


da.Fill(ds, "Customers");

U DataSet-u se kreira tabela Customers i puni podacima iz baze.

425

Primer upotrebe DataTable objekta


private void button1_Click(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM
Customers", cnnNorthwind);
DataSet ds = new DataSet();
da.Fill(ds, "Customers");
// pristup DataTable objektu u okviru DataSet-a
DataTable tbl = ds.Tables["Customers"];
// procitaj prvu vrstu
DataRow vrsta = tbl.Rows[0];
foreach (DataColumn kolona in tbl.Columns)
{
listBox1.Items.Add(kolona.ColumnName + ":\t" +
vrsta[kolona].ToString() );
}
}
426

Metoda Find DataRowCollection


kolekcije
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Products",
cnnNorthwind);
DataSet ds = new DataSet();
// DA treba iz baze podataka da preuzme kljueve
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(ds, "Products");
// pristup DataTable objektu u okviru DataSet-a
DataTable tbl = ds.Tables["Products"];
int idVrste = Convert.ToInt32(textID.Text);
DataRow vrsta = tbl.Rows.Find(idVrste);
foreach (DataColumn kolona in tbl.Columns)
{
listBox1.Items.Add(kolona.ColumnName + ":\t" + vrsta[kolona].ToString());
}

427

Pronalaenje vrste u DataTable


objektu po sloenom kljuu

428

SqlCommand komanda1 = new SqlCommand();


komanda1.Connection = cnnNorthwind;
komanda1.CommandText = @"select * from Products";
SqlDataAdapter daProducts = new SqlDataAdapter();
daProducts.SelectCommand = komanda1;
daProducts.MissingSchemaAction =
MissingSchemaAction.AddWithKey;
SqlCommand komanda2 = new SqlCommand();
komanda2.Connection = cnnNorthwind;
komanda2.CommandText = @"select * from [Order Details]";
SqlDataAdapter daOrderDetails = new SqlDataAdapter();
daOrderDetails.SelectCommand = komanda2;
daOrderDetails.MissingSchemaAction =
MissingSchemaAction.AddWithKey;
DataSet ds = new DataSet();
daProducts.Fill(ds, "Products");
daOrderDetails.Fill(ds, "Order Details");
429

int ordrID = Convert.ToInt32(textOrderID.Text);


int productID = Convert.ToInt32(textProductID.Text);
DataTable orderDetailsDataTable = ds.Tables["Order Details"];
object[] orderDetails = new object[] { ordrID, productID };

DataRow orderDetailDataRow =
orderDetailsDataTable.Rows.Find(orderDetails);
foreach (DataColumn kolona in orderDetailsDataTable.Columns)
{
richTextBox1.AppendText(kolona.ColumnName + ": " +
orderDetailDataRow[kolona] + "\n");
}

430

Filtriranje i sortiranje DataRow


objekata u objektu DataTable
public DataRow[ ] Select(
string filterExpression,
string sort
);
filterExpression koje redove prikazati
sort kako sortirati

Select metod objekta DataTable

431

Primer filtriranja i sortiranja 1


SqlCommand komanda1 = new SqlCommand();
komanda1.Connection = cnnNorthwind;
komanda1.CommandText = @"select * from Products";
SqlDataAdapter daProducts = new SqlDataAdapter();
daProducts.SelectCommand = komanda1;
daProducts.MissingSchemaAction = MissingSchemaAction.AddWithKey;
DataSet ds = new DataSet();
daProducts.Fill(ds, "Products");

432

Primer filtriranja i sortiranja 2


DataTable productsDataTable = ds.Tables["Products"];
DataRow[] productDataRows = productsDataTable.Select("ProductID <= 5",
"ProductID DESC");
foreach (DataRow vrsta in productDataRows)
{
foreach (DataColumn kolona in productsDataTable.Columns)
{
richTextBox1.AppendText(kolona.ColumnName + "= " + vrsta[kolona] +
"\n");
}
richTextBox1.AppendText("-------------------------------------\n");
}

433

Modifikovanje podataka u bazi


korienjem DataAdaptera
Potrebno je pored SELECT
komande DataAdaptera (koja
slui za itanje podataka iz baze
i punjenje DataSeta)
, definisati i INSERT, UPDATE i DELETE
komande
Promene u DataSetu se
prosleuju do baze pozivanjem
Update() metode DataAdaptera

434

434

Auriranje podataka u bazi


primenom DataAdapter objekta
SqlDataAdapter da = new SqlDataAdapter(@"select CustomerID,
CompanyName, Address from Customers", cnnNorthwind);
// izvodjenje komandi DataAdapter objekta
SqlCommandBuilder bld = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(ds, "Customers");
DataTable tabela = ds.Tables["Customers"];
DataRow editVrsta = tabela.Rows.Find("ALFKI");
editVrsta["CompanyName"] = "Kompanija";
editVrsta["Address"] = "Adresa";
da.Update(tabela);
MessageBox.Show("Podaci azurirani");
435

Ubacivanje zapisa u bazu


primenom DataAdapter objekta
SqlDataAdapter da = new SqlDataAdapter(@"select CustomerID,
CompanyName, Address from Customers", cnnNorthwind);
// izvodjenje komandi DataAdapter objekta
SqlCommandBuilder bld = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(ds, "Customers");
DataTable tabela = ds.Tables["Customers"];
DataRow insertVrsta = tabela.NewRow();
insertVrsta["CustomerID"] = "ZXXXX";
insertVrsta["CompanyName"] = "Kompanija1";
insertVrsta["Address"] = "Adresa1";
tabela.Rows.Add(insertVrsta);
da.Update(tabela);
MessageBox.Show("Podaci upisani");

436

Brisanje podataka iz baze primenom


DataAdapter objekta
SqlDataAdapter da = new SqlDataAdapter(@"select CustomerID,
CompanyName, Address from Customers", cnnNorthwind);
// izvodjenje komandi DataAdapter objekta
SqlCommandBuilder bld = new SqlCommandBuilder(da);
DataSet ds = new DataSet();
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(ds, "Customers");
DataTable tabela = ds.Tables["Customers"];
DataRow deleteVrsta = tabela.Rows.Find("ZXXXX");
deleteVrsta.Delete();
da.Update(tabela);
MessageBox.Show("Podaci obrisani");
437

You might also like