predavanje12

Download Report

Transcript predavanje12

RP3/predavanje12
 Baze podataka
08/04/2015
---------- Računarski praktikum 3 ---------Maja Starčević
1
Baze podataka
ADO.NET je tehnologija za upravljano pristupanje podacima
(primarna tehnologija u C#-u za povezivanje s bazama
podataka).
Naziv potječe od ActiveX Data Object (ADO) iako se te dvije
tehnologije dosta razlikuju.
Sadrži niz klasa koje se mogu podijeliti u dva osnovna skupa
– one koje pružaju pristup izvoru podataka (bazi) i klase koje
podržavaju DataSet model (lokalni podskup podataka iz
baze).
08/04/2015
Računarski praktikum 3
2
DataSet
Objekt klase DataSet predstavlja podskup čitave baze
podataka pohranjen na lokalni stroj, pri čemu veza s bazom
ima prekide.
DataSet može sadržavati čitavu bazu ili samo neke njezine
dijelove.
Možemo ga shvatiti kao odspojenu bazu podataka
(uspostavljena je veza radi sesije s bazom podataka, učitani
su potrebni podaci u DataSet te je sesija zatvorena
prekidom veze s bazom podataka).
08/04/2015
Računarski praktikum 3
3
DataSet
DataSet se povremeno spaja na bazu, unosimo promjene
koje su se u međuvremenu dogodile, te se DataSet ažurira
promjenama koje su napravili drugi procesi.
Prednost korištenja DataSet modela je u tome što program
ne zadržava resurse potrebne za spajanje te se time
oslobađa mrežna propusnost i povećava učinkovitost baze
podataka.
Model je napravljen prvenstveno za internet aplikacije koje
zahtijevaju skalabilnost.
08/04/2015
Računarski praktikum 3
4
DataTable
DataSet se sastoji od objekata tipa DataTable i
DataRelation.
Svojstvo Tables vraća kolekciju DataTableCollection koja
sadržava sve DataTable objekte.
Može se kreirati programiranjem ili kao rezultat upita bazi.
Sadrži brojna javna svojstva, između ostalog Columns koji
vraća DataColumnCollection koji se sastoji od objekata tipa
DataColumn (predstavlja stupac u tablici).
08/04/2015
Računarski praktikum 3
5
DataTable
DataTable.Rows daje kolekciju koja sadrži retke tablice.
Prvo se pristupa traženoj tablici i onda se može iterirati po
recima (s foreach naredbom).
Kolekcija DataColumnCollection definira shemu po kojoj je
sastavljena tablica, dok DataRowCollection sadrži podatke.
Za dodavanje i brisanje podataka koriste se metode Add i
Remove.
08/04/2015
Računarski praktikum 3
6
DataTable
Primjer: kreirat ćemo u kodu tablicu (DataTable objekt) s dva stupca i dva
retka.
dt = new DataTable("myTable");
dt.Columns.Add("stupac1");
dt.Columns.Add("stupac2");
DataRow row = dt.NewRow();
row["stupac1"] = "11";
row["stupac2"] = "12";
dt.Rows.Add(row);
row = dt.NewRow();
row["stupac1"] = "21";
row["stupac2"] = "22";
dt.Rows.Add(row);
08/04/2015
Računarski praktikum 3
7
DataRelations
DataSet.Relations vraća DataRelationCollection koji se
sastoji od objekata DataRelation.
Objekt DataRelation predstavlja relaciju između dvije tablice
(preko DataColumn objekta).
08/04/2015
Računarski praktikum 3
8
DataAdapter
DataAdapter je most između DataSet objekta i izvora
podataka. Pruža mogućnost upravljanja podacima u
nepovezanom načinu rada.
Sadrži između ostalog Fill metodu za pribavljanje podataka
iz baze podataka kojima se puni DataSet objekt te metodu
Update pomoću koje se ažuriraju podaci u bazi u odnosu na
pripadni DataSet objekt.
08/04/2015
Računarski praktikum 3
9
Imenički prostori
System.Data - prostor se sastoji od klasa koje čine
ADO.NET arhitekturu.
Primjer jednog od potprostora:
System.Data.OleDb – klase koje čine .NET Framework Data
Provider za OleDb-kompatibilne izvore podataka (npr.
Access i Excel). Pružaju podršku za spajanje na OleDb bazu
podataka, izvršavanje naredbi i čitanje rezultata.
Analogno vrijedi za prostore:
System.Data.SqlClient
System.Data.OracleClient
System.Data.Odbc
08/04/2015
Računarski praktikum 3
10
Data Provider
Data Provider (dobavljač podataka) je biblioteka klasa koja
pruža interakciju s bazom podataka, ovisno o protokolu koji
je podržan.
Ovisno o tipu pružatelja podataka, imena klasa mogu
sadržavati tzv. API prefiks (Odbc, OleDb, Sql, Oracle).
Primjer: objekt Connection mora imati prefiks
(SqlConnection, OdbcConnection...), dok je DataSet
neovisan o tipu pružatelja podataka, pa nema prefiks.
08/04/2015
Računarski praktikum 3
11
Primjer baze: Northwind
Free download na
http://www.microsoft.com
(SQL200SampleDb.msi)
08/04/2015
Računarski praktikum 3
12
DBCommand, DBConnection
DBConnection predstavlja vezu s izvorom podataka. Ta
veza se može dijeliti među različitim Command objektima.
DBCommand objekt omogućuje slanje naredbe (npr. SQL
izraza ili spremljene procedure) prema bazi podataka.
Ova dva objekta se obično implicitno stvaraju kad se npr.
kreira DataAdapter objekt, ali može im se i eksplicitno
pristupati.
08/04/2015
Računarski praktikum 3
13
Connection
SqlConnection conn = new SqlConnection(
"Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI“ );
connection string
Data Source - identifikacija za server (lokalni stroj, naziv
domene ili IP adresa).
Initial Catalog – ime baze podataka.
Integrated Security - npr. ako je postavljeno na SSPI
(Security Support Provider Interface), Windows vrši provjeru
korisničkog imena i lozinke
08/04/2015
Računarski praktikum 3
14
Connection
SQL Server autentifikacija:
User ID (uid) – ime korisnika (konfigurirano u SQL Server-u).
Password (pwd) – lozinka koja se slaže s User ID.
SqlConnection conn = new SqlConnection(
"Data Source=DatabaseServer;Initial Catalog=Northwind;
User ID=YourUserID;Password=YourPassword");
zamjenjuju
Integrated Security
parametar
08/04/2015
Računarski praktikum 3
15
Connection
Za neke ključne riječi postoji alternativa:
Data Source=myServerAddress; Initial Catalog=myDataBase;
User Id=myUsername;Password=myPassword;
ili
Server=myServerAddress; Database=myDataBase;
User ID=myUsername;Password=myPassword;Trusted_Connection=False;
08/04/2015
Računarski praktikum 3
16
Connection
Kod stvaranja string-a za SqlConnection bitno je navesti:
 server (Server ili Data Source)
 ime baze podataka (Database ili Initial Catalog)
 autentifikaciju (Integrated Security ili Trusted Connection).
Moguće vrijednosti za Trusted Connection su True, False,
Yes, No, SSPI. True je ekvivalentno sa SSPI. Ukoliko je
postavljeno na false, mora se navesti User ID i Password (u
tom slučaju nije potrebno eksplicitno navoditi Trusted
Connection).
08/04/2015
Računarski praktikum 3
17
Command
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
cmd.CommandText = “select * from Customers";
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
Enumeracija CommandType:
StoredProcedure – ime spremljene procedure
TableDirect – ime tablice
Text – tekst SQL naredbe (default)
08/04/2015
Računarski praktikum 3
18
DataReader
Kreiranje ovog objekta je alternativa stvaranju objekata
DataSet i DataAdapter.
Omogućuje povezani, forward-only, read-only pristup
kolekciji tablica. Koristi se često za punjenje kontrola
podacima.
Dobar je izbor, ukoliko se zahtjeva brzina, ali za
manipulaciju podacima bolji izbor je DataSet.
08/04/2015
Računarski praktikum 3
19
Primjer baze:
Napravit ćemo Access bazu u kojoj se nalaze podaci o
studentima koji slušaju Računarski praktikum 8 i njihovim
rezultatima iz prvog kolokvija.
Baza se sastoji od dvije tablice:
 Studenti (sa stupcima JMBAG (4-znamenkasti broj ključ), Ime, Prezime i Smjer studija)
 Prvi kolokvij (sa stupcima JMBAG, Prvi zadatak, Drugi
zadatak, Ukupno).
Spremimo bazu u RP8.mdb
08/04/2015
Računarski praktikum 3
20
Primjer baze:
U Visual Studiu:
Server Explorer  Data Connections  Add Connection
08/04/2015
Računarski praktikum 3
21
Primjer baze:
Ispisat ćemo imena i prezimena svih studenata u bazi (u kontrolu
tipa Label).
using System;
using System.Data;
using System.Data.OleDb;
U System.Data.dll asembliju
tipa Label).
public partial class Form1 : Form
{
Label label = new Label();
OleDbConnection connection = null;
OleDbDataReader reader = null
08/04/2015
Računarski praktikum 3
22
Primjer baze:
public Form1()
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= D:\baze\RP8.mdb";
connection = new OleDbConnection(connectionString);
label.AutoSize = true;
Controls.Add(label);
InsertTest();
DeleteTest();
UpdateTest();
Ispis();
}
08/04/2015
Računarski praktikum 3
23
Primjer baze:
void Ispis()
{
label.Text = "";
try
{
connection.Open();
OleDbCommand command = new
OleDbCommand("select * from Studenti", connection);
reader = command.ExecuteReader();
while (reader.Read())
label.Text += (reader["Ime"] + " " + reader["Prezime"] + "\n");
// može i label.Text += (reader[1] + " " + reader[2] + "\n");
}
08/04/2015
Računarski praktikum 3
24
Primjer baze:
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
if (reader != null)
reader.Close();
if (connection != null)
connection.Close();
}
}
}
08/04/2015
Računarski praktikum 3
25
Primjer baze:
void InsertTest()
{
try
{
connection.Open();
string insertString =
"insert into Studenti([JMBAG], [Ime], [Prezime], [Smjer studija])
values ( '26789', 'Mara', 'Marić', 'MS')";
OleDbCommand command = new OleDbCommand(insertString, connection);
command.ExecuteNonQuery();
}
08/04/2015
Računarski praktikum 3
26
Primjer baze:
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
if (connection != null)
connection.Close();
}
08/04/2015
Računarski praktikum 3
27
Primjer baze:
void DeleteTest()
{
try
{
connection.Open();
string deleteString = "delete from Studenti where Ime='Petar‘ ";
OleDbCommand command =
new OleDbCommand(deleteString, connection);
command.ExecuteNonQuery();
}
08/04/2015
Računarski praktikum 3
28
Primjer baze:
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
if (connection != null)
connection.Close();
}
08/04/2015
Računarski praktikum 3
29
Primjer baze:
void UpdateTest()
{
try
{
connection.Open();
string updateString =
"update Studenti set Ime='Ivana' where Ime='Andrea‘ ";
OleDbCommand command =
new OleDbCommand(updateString, connection);
command.ExecuteNonQuery();
}
08/04/2015
Računarski praktikum 3
30
Primjer baze:
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
if (connection != null)
connection.Close();
}
08/04/2015
Računarski praktikum 3
31
Primjer baze:
08/04/2015
Računarski praktikum 3
32
ExecuteScalar
Pomoću metode ExecuteScalar( ) dobivamo jednu vrijednost
iz tablice (baza sama vraća vrijednost umjesto da pozivamo
ExecuteReader( ) i računamo rezultat u kodu).
OleDbCommand command=
new OleDbCommand("select count(*) from Studenti", connection);
int count = (int)cmd.ExecuteScalar();
Dodat ćemo još nekoliko metoda u klasu iz prethodnog
primjera.
08/04/2015
Računarski praktikum 3
33
ExecuteScalar
void IspisBodova()
{
label.Text = “Bodovi: \n";
try
{
connection.Open();
OleDbCommand command = new
OleDbCommand("select * from [Prvi kolokvij]", connection);
reader = command.ExecuteReader();
while (reader.Read())
label.Text += (reader[3]+ "\n");
}
// + standardni catch – finally blok
}
08/04/2015
Računarski praktikum 3
34
ExecuteScalar
void IspisiProsjekBodova()
{
try
{
connection.Open();
OleDbCommand command =
new OleDbCommand("select avg(Ukupno) from [Prvi kolokvij]", connection);
label.Text += String.Format("Prosjek bodova je {0}", command.ExecuteScalar());
}
// + catch – finally blok
}
08/04/2015
Računarski praktikum 3
35
Primjer baze:
Pozovemo IspisBodova(); IspisiProsjekBodova();
08/04/2015
Računarski praktikum 3
36
Parametri
String u upitu je moguće stvoriti i dinamički, npr. pomoću
TextBox kontrole.
Sljedeći kod je nesiguran:
string ime=“Ana”;
SqlCommand cmd = new SqlCommand(
"select * from Studenti where Ime =‘”+ ime + “’);
Bolje je koristiti parametre:
08/04/2015
Računarski praktikum 3
37
Parametri
using System;
using System.Data;
using System.Data.OLeDb;
public partial class Form1 : Form
{
Label label=new Label();
OleDbDataReader reader = null;
OleDbConnection connection = null;
TextBox textBox = new TextBox();
public Form1()
{
InitializeComponent();
08/04/2015
Računarski praktikum 3
38
Parametri
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= D:\baze\RP8.mdb";
connection = new OleDbConnection(connectionString);
label.AutoSize = true;
label.Location = new Point(0, 50);
textBox.KeyPress += textBox_KeyPress;
Controls.Add(label);
Controls.Add(textBox);
}
void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
IspisImena();
}
08/04/2015
Računarski praktikum 3
39
Parametri
void IspisImena()
{
label.Text = "Studenti u bazi cije ime je " + textBox.Text + ":\n\n";
try
{
connection.Open();
OleDbCommand command = new
OleDbCommand("select * from Studenti where Ime=@ime", connection);
OleDbParameter parameter = new OleDbParameter();
parameter.ParameterName = "@ime";
parameter.Value = textBox.Text;
command.Parameters.Add(parameter);
08/04/2015
Računarski praktikum 3
40
Parametri
reader = command.ExecuteReader();
while (reader.Read())
label.Text += (reader["Ime"] + " " + reader["Prezime"] + "\n");
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
if (reader != null)
reader.Close();
if (connection != null)
connection.Close();
}
08/04/2015
Računarski praktikum 3
41
DataSet
Objekti tipa DataSet služe za pohranjivanje podataka iz
baze. Ne koriste se za interakciju s bazom, već za to služi
DataAdapter.
DataAdapter otvara vezu te je zatvara čim je obavljena
zadana radnja na podacima.
Primjer:
 otvaranje veze, dobavljanje podataka iz baze u DataSet,
zatvaranje veze
ili
 otvaranje veze, zapisivanje promjene iz DataSet-a u bazu,
zatvaranje veze
08/04/2015
Računarski praktikum 3
42
DataSet
U razdoblju između izvršavanja metoda Fill i Update, veza s
bazom podataka je zatvorena i moguće je slobodno čitanje i
pisanje podataka u DataSet.
Aplikacija ima vezu prema bazi samo kad je to neophodno i
time se povećava njezina skalabilnost.
08/04/2015
Računarski praktikum 3
43
DataSet.Fill
using System;
using System.Data;
using System.Data.OleDb;
class Program
{
static void Main()
{
FillTest();
}
08/04/2015
Računarski praktikum 3
44
DataSet.Fill
void FillTest()
{
try
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= D:\baze\RP8.mdb";
string commandString =
"Select Ime, Prezime from Studenti";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter
(commandString, connectionString);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet, "Studenti");
DataTable dataTable = dataSet.Tables[0];
08/04/2015
Računarski praktikum 3
45
DataSet.Fill
foreach (DataRow dataRow in dataTable.Rows)
{
Console.WriteLine( String.Format("{0} {1}",
dataRow["Ime"], dataRow["Prezime"]);
}
}
catch (Exception e)
{
Console.Write(e.ToString());
}
}
}
08/04/2015
Računarski praktikum 3
46
DataSet.Update
class Program
{
string connectionString;
DataSet dataSet;
OleDbConnection connection=null;
OleDbDataReader reader=null;
static void Main(string[] args)
{
Program p = new Program();
p.connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= D:\baze\RP8.mdb";
p.UpdateTest();
}
08/04/2015
Računarski praktikum 3
47
DataSet.Update
void UpdateTest()
{
try
{
dataSet = new DataSet();
connection = new OleDbConnection(connectionString);
OleDbDataAdapter dataAdapter =
new OleDbDataAdapter("select JMBAG, Ime, Prezime from Studenti", connectionString);
dataAdapter.Fill(dataSet);
OleDbCommandBuilder cmd = new OleDbCommandBuilder(dataAdapter);
08/04/2015
Računarski praktikum 3
48
DataSet.Update
DataTable dataTable = dataSet.Tables[0];
foreach (DataRow dataRow in dataTable.Rows)
if ((dataRow["Ime"]).ToString() == "Hrvoje") dataRow["Ime"] = "Lovro";
//provjeravamo promjene u DataSet-u
foreach (DataRow dataRow in dataTable.Rows)
Console.WriteLine(String.Format("{0} {1}",
dataRow["Ime"], dataRow["Prezime"]));
dataAdapter.Update(dataSet);
08/04/2015
Računarski praktikum 3
49
DataSet.Update
connection.Open();
OleDbCommand command = new
OleDbCommand("select * from Studenti", connection);
reader = command.ExecuteReader();
//provjeravamo promjene u bazi
while (reader.Read())
Console.WriteLine(String.Format("{0} {1}", reader["Ime"], reader["Prezime"]));
}
catch (Exception e) { MessageBox.Show(e.ToString()); }
finally
{
if (reader != null)
reader.Close();
if (connection != null)
connection.Close();
}
}
08/04/2015
Računarski praktikum 3
50
DataGrid
DataGrid je Windows Forms kontrola pomoću koje se mogu
prikazivati podaci u recima i stupcima (nova verzija DataGridView).
Ta kontrola je korisničko sučelje za DataSet. U
najjednostavnijem slučaju DataGrid pokazuje podatke iz
jedne tablice. Kad je kontrola povezana s više relacijski
povezanih tablica, može pružati i navigaciju među tim
tablicama.
Za spajanje na izvor podataka koriste se pri dizajniranju
svojstva DataSource i DataMember, dok se u trenutku
izvršavanja isto postiže metodom SetDataBinding.
08/04/2015
Računarski praktikum 3
51
DataGrid
DataGrid pokazuje rezultate svih promjena na podacima.
Većinom se promjene rade direktno preko te kontrole.
Ako DataGrid ima postavljeno ReadOnly svojstvo na false,
podaci se mogu mijenjati i preko DataGrid kontrole
DataGrid kontrola može odjednom pokazivati samo jednu
tablicu. Pregled ostalih tablica je moguć ako je definirana
relacija roditelj-dijete među tablicama.
08/04/2015
Računarski praktikum 3
52
DataGrid
Kao izvor podataka DataGrid može koristiti sljedeće klase
 DataTable
 DataSet
 DataView
 DataViewManager
08/04/2015
Računarski praktikum 3
53
DataView
Klasa DataView omogućava drugačiji prikaz podataka
spremljenih u DataTable objektu. Omogućava sortiranje i
filtriranje podataka.
Sortiranje i filtriranje podataka vrši se pomoću svojstava
Sort, ApplyDefaultSort, RowFilter, RowStateFilter, metoda
Find, FindRows..
08/04/2015
Računarski praktikum 3
54
DataView
Instanca klase DataView može se kreirati na dva načina:
1. Pomoću konstruktora (može se zadati kriterij za filtriranje,
sortiranje, Rowstate kriterij):
DataView customersDataView =
new DataView(customersDataSet.Tables["Customers"],
"Country = ‘HR'", "ContactName", DataViewRowState.CurrentRows);
2. Pomoću DefaultView svojstva klase DataTable:
DataView customersDataView = customersDataSet.Tables["Customers"].DefaultView;
08/04/2015
Računarski praktikum 3
55
DataGrid
Primjer: kreirat ćemo u kodu jedan DataSet objekt (dtSet) koji se
sastoji od dvije tablice (DataTable objekti ClanoviTable i PosudbeTable)
među kojima ćemo uspostaviti relaciju preko DataRelation objekta
dtRelation. DataSet je vizualno predstavljen preko DataGrid kontrole.
Za povezivanje ta dva objekta ćemo koristiti SetDataBinding metodu.
08/04/2015
Računarski praktikum 3
56
DataGrid
08/04/2015
Računarski praktikum 3
57
DataGrid
public class Form1 : Form
{
private DataGrid dataGrid1;
private DataSet dtSet;
public Form1()
{
this.dataGrid1 = new DataGrid();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
this.SuspendLayout();
this.dataGrid1.DataMember = "";
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid1.Location = new System.Drawing.Point(16, 8);
this.dataGrid1.Size = new System.Drawing.Size(384, 240);
08/04/2015
Računarski praktikum 3
58
DataGrid
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(416, 273);
this.Controls.Add(dataGrid1);
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
this.ResumeLayout(false);
KreirajTablicuClanova();
KreirajTablicuPosudbi();
PoveziTablice();
}
08/04/2015
Računarski praktikum 3
59
DataGrid
private void KreirajTablicuClanova()
{
DataTable clanoviTable = new DataTable("Clanovi");
DataColumn dtColumn;
DataRow myDataRow;
dtColumn = new DataColumn();
dtColumn.DataType = System.Type.GetType("System.Int32");
dtColumn.ColumnName = "ClanID";
dtColumn.Caption = "ClanID";
dtColumn.ReadOnly = true;
dtColumn.Unique = true;
clanoviTable.Columns.Add(dtColumn);
dtColumn = new DataColumn();
dtColumn.DataType = System.Type.GetType("System.String");
dtColumn.ColumnName = "Name";
dtColumn.Caption = "Ime i prezime";
dtColumn.AutoIncrement = false;
dtColumn.ReadOnly = false;
dtColumn.Unique = false;
clanoviTable.Columns.Add(dtColumn);
08/04/2015
Računarski praktikum 3
60
DataGrid
dtColumn = new DataColumn();
dtColumn.DataType = System.Type.GetType("System.String");
dtColumn.ColumnName = "Address";
dtColumn.Caption = "Adresa";
dtColumn.ReadOnly = false;
dtColumn.Unique = false;
clanoviTable.Columns.Add(dtColumn);
DataColumn[] PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = clanoviTable.Columns["id"];
clanoviTable.PrimaryKey = PrimaryKeyColumns;
dtSet = new DataSet("Videoteka");
dtSet.Tables.Add(clanoviTable);
08/04/2015
Računarski praktikum 3
61
DataGrid
myDataRow = clanoviTable.NewRow();
myDataRow["ClanID"] = 101;
myDataRow["Address"] = "Bukovac 1";
myDataRow["Name"] = "Petar Peric";
clanoviTable.Rows.Add(myDataRow);
myDataRow = clanoviTable.NewRow();
myDataRow["ClanID"] = 102;
myDataRow["Name"] = "Marko Maric";
myDataRow["Address"] = "Horvatovac 2";
clanoviTable.Rows.Add(myDataRow);
myDataRow = clanoviTable.NewRow();
myDataRow["ClanID"] = 103;
myDataRow["Name"] = "Petra Perkovic";
myDataRow["Address"] = "Srebrnjak 3";
clanoviTable.Rows.Add(myDataRow);
}
08/04/2015
Računarski praktikum 3
62
DataGrid
private void KreirajTablicuPosudbi()
{
DataTable posudbeTable = new DataTable("Posudbe");
DataColumn dtColumn;
DataRow dtRow;
dtColumn = new DataColumn();
dtColumn.DataType = System.Type.GetType("System.Int32");
dtColumn.ColumnName = "posudbeID";
dtColumn.AutoIncrement = true;
dtColumn.Caption = "PosudbeID";
dtColumn.ReadOnly = true;
dtColumn.Unique = true;
posudbeTable.Columns.Add(dtColumn);
dtColumn = new DataColumn();
dtColumn.DataType = System.Type.GetType("System.String");
dtColumn.ColumnName = "Name";
dtColumn.Caption = "Item Name";
posudbeTable.Columns.Add(dtColumn);
08/04/2015
Računarski praktikum 3
63
DataGrid
dtColumn = new DataColumn();
dtColumn.DataType = System.Type.GetType("System.Int32");
dtColumn.ColumnName = "ClanID";
dtColumn.AutoIncrement = false;
dtColumn.Caption = "ClanID";
dtColumn.ReadOnly = false;
dtColumn.Unique = false;
posudbeTable.Columns.Add(dtColumn);
dtSet.Tables.Add(posudbeTable);
08/04/2015
Računarski praktikum 3
64
DataGrid
dtRow = posudbeTable.NewRow();
dtRow["PosudbeID"] = 0;
dtRow["Name"] = "Avatar";
dtRow["ClanID"] = 101;
posudbeTable.Rows.Add(dtRow);
dtRow = posudbeTable.NewRow();
dtRow["PosudbeID"] = 1;
dtRow["Name"] = "Mission Impossible";
dtRow["ClanID"] = 101;
posudbeTable.Rows.Add(dtRow);
08/04/2015
Računarski praktikum 3
65
DataGrid
dtRow = posudbeTable.NewRow();
dtRow["PosudbeID"] = 3;
dtRow["Name"] = "Matrix 3";
dtRow["ClanID"] = 102;
posudbeTable.Rows.Add(dtRow);
dtRow = posudbeTable.NewRow();
dtRow["PosudbeID"] = 4;
dtRow["Name"] = "My Best Friend's Wedding";
dtRow["ClanID"] = 103;
posudbeTable.Rows.Add(dtRow);
}
08/04/2015
Računarski praktikum 3
66
DataGrid
private void PoveziTablice()
{
DataRelation dtRelation;
DataColumn clanoviColumn = dtSet.Tables["Clanovi"].Columns["ClanID"];
DataColumn posudbeColumn = dtSet.Tables["Posudbe"].Columns["ClanID"];
dtRelation = new DataRelation(
"ClanoviPosudbeRelation", clanoviColumn, posudbeColumn);
dtSet.Tables["Posudbe"].ParentRelations.Add(dtRelation);
dataGrid1.SetDataBinding(dtSet, "Clanovi");
}
}
08/04/2015
Računarski praktikum 3
67