Nedavno sam pravio aplikaciju u WPF-u koja koristi MSSQL bazu podataka. U medjuvremenu sam pomislio da napravim istu aplikaciju koja ce biti "laksa" i imati manji memory print, te sam odmah pomislio na SQLite.
WPF je sam po sebi cudna biljka, jer WinForms programer ce brlo brzo izgubiti zivce pokusavajuci nesto da uradi u WPF, a ista stvar radi bez problema u WinForms. Jedan od tih problemcica je i nepostojanje .Text property za label u WPF-u.
Na primjer ovo je normalno u WinForms:
Code:
string nesto = "EliteSecurity";
label1.text = nesto;
string nesto = "EliteSecurity";
label1.text = nesto;
Dok se isti kod u wpf-u Crveni. Naravno, potrebno je googlati i naci rjesenje.
Cilj ovog teksta je "demistificirat" koristenje SQLite u WPF-u.
Ovaj tutorial ce imati nekoliko dijelova, gdje cu postepeno prikazati kako dobiti Full Blown WPF projekat. Taj projekat ce imat dvije forme. Jedna ce biti WinForms, a drug WPF forma. Obadvije forme ce koristiti istu bazu, ali razlika u GUI-u ce biti fantasticna.
Postoje dva osnovna nacina:
1. Na internetu postoji dosta SQLite DLL-ova, koji se jednostavno mogu referencirati u projekat, te im normalno pristupati.
2. Instalirati neki od Providera za NET.
Obadva nacina rade, ali savjetujem nacin broj 2. Dakle instalirati ADO.NET 2.0/3.5 provider za Visual Studio 2008. Potrebno je otici ovdje te skinuti instalacijski fajl.
Instalacija je brza, te je na kraju potrebno odabrati verziju Visual Studia koju koristite. U nasem slucaju 2008.
Provider koji smo instalirali nam omogucuje dizajniranje i manipulaciju SQLite bazom podataka unutar VS 2008 okruzenja. Sto je veoma zgodno. Takodjer podrzan je i SQLite Linq.
Jedna opaska. Ako dizajniram SQLite nazu unutar VS 2008, nisam nasao opciju da se moze podesiti AutoIncrement. Moguce je da nisam dobro gledao :(
Zato koristim drugi alat u kome dizajniram SQLite bazu. Alat je malen, besplatan i lagan za upotrebu. Alat se zove SQL Admin.
Baza
U nasem primjeru imamo bazu koja se zove korisnici, sa jednom tabelom i tri polja unutar nje:
1. ID - AutoIncrement
2. Ime - VarChar (50)
3. Prezime - VarChar (50)
Bazu sami napravite (nije neki trud), te je dodajte u svoj projekat. Ako imate problema sa dodavanjem baze u projekat, mozete pogledati ovaj video, i kojem je prikazano kako se baza dodaje u projekat, te i ostale nap[rednije operacije nad bazom. Video nema zvuka, ali i ne treba.
XAML ListView kontrola.
Napravite novi WPF projekat, te unutar <grid> </grid> tagova stavite sljedeci XAML kod:
Code:
<ListView Margin="8,9,11,0" Name="listView1" ItemsSource="{Binding}" MinWidth="250" MinHeight="100" Height="357.742" VerticalAlignment="Top">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=ID}"></GridViewColumn>
<GridViewColumn Header="Ime" DisplayMemberBinding="{Binding Path=Ime}"></GridViewColumn>
<GridViewColumn Header="Prezime" DisplayMemberBinding="{Binding Path=Prezime}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<ListView Margin="8,9,11,0" Name="listView1" ItemsSource="{Binding}" MinWidth="250" MinHeight="100" Height="357.742" VerticalAlignment="Top">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=ID}"></GridViewColumn>
<GridViewColumn Header="Ime" DisplayMemberBinding="{Binding Path=Ime}"></GridViewColumn>
<GridViewColumn Header="Prezime" DisplayMemberBinding="{Binding Path=Prezime}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Dakle vas kod bi trebao izgledati nesto poput:
Code:
<Window x:Class="sqllajt.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="800" Width="600">
<Grid>
<ListView Margin="8,9,11,0" Name="listView1" ItemsSource="{Binding}" MinWidth="250" MinHeight="100" Height="357.742" VerticalAlignment="Top">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=ID}"></GridViewColumn>
<GridViewColumn Header="Ime" DisplayMemberBinding="{Binding Path=Ime}"></GridViewColumn>
<GridViewColumn Header="Prezime" DisplayMemberBinding="{Binding Path=Prezime}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
<Window x:Class="sqllajt.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="800" Width="600">
<Grid>
<ListView Margin="8,9,11,0" Name="listView1" ItemsSource="{Binding}" MinWidth="250" MinHeight="100" Height="357.742" VerticalAlignment="Top">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=ID}"></GridViewColumn>
<GridViewColumn Header="Ime" DisplayMemberBinding="{Binding Path=Ime}"></GridViewColumn>
<GridViewColumn Header="Prezime" DisplayMemberBinding="{Binding Path=Prezime}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
Naravno, ovaj kod mozete direktno Copy/Paste, i radit ce i kod vas. Sad imamo bazu, XAML. Jos nam nedostaje C# kod koji ce to sve prikazati.
C# KOD
Dole navedeni kod se naranvo moze mnogo bolje upakovati kroz metode i klase. Ali u u ovom primjeru ce biti samo stavljen u formu, da je pregledniji. Drugi dijelovi ovog tutorijala ce imati sav kod primjenjen kroz klase i metode.
Otvorite .cs dokument, te dodajte sljedecu metodu:
Code:
public void PrikaziBazuuLB()
{
SQLiteConnection conn = new SQLiteConnection(@"data source=...\Debug\bazaa.s3db");
conn.Open();
SQLiteCommand cmd = new SQLiteCommand(" Select * from korisnici", conn);
DataSet1 dt = new DataSet1();
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
DataTable tbl = new DataTable();
da.Fill(tbl);
listView1.DataContext = tbl;
da.Fill(dt);
conn.Close();
}
public void PrikaziBazuuLB()
{
SQLiteConnection conn = new SQLiteConnection(@"data source=...\Debug\bazaa.s3db");
conn.Open();
SQLiteCommand cmd = new SQLiteCommand(" Select * from korisnici", conn);
DataSet1 dt = new DataSet1();
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
DataTable tbl = new DataTable();
da.Fill(tbl);
listView1.DataContext = tbl;
da.Fill(dt);
conn.Close();
}
Naravno, sada je potrebno uraditi jos 2 stvari da bi uopste mogli da kompajlirate program:
- morate napraviti referencu ka sql dll fajlu. Tacan naziv je: NET namespace->>System.Data.SQLite;
- Dodajte using deklaraciju: using System.Data.SQLite;
Sada mozete program kompajlirati.
Nakon sto ste stavili metodu, jednostavno je pozovite na vama pozeljan nacin. Stavite
Code:
PrikaziBazuuLB()
PrikaziBazuuLB()
Ili u dugme:
Code:
private void button1_Click(object sender, RoutedEventArgs e)
{
PrikaziBazuuLB();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
PrikaziBazuuLB();
}
ili odmah ispod konstruktora:
Code:
public Window1()
{
InitializeComponent();
PrikaziBazuuLB();
}
public Window1()
{
InitializeComponent();
PrikaziBazuuLB();
}
ili u load form event:
Code:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
PrikaziBazuuLB();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
PrikaziBazuuLB();
}
To bi bilo sve sto trebate uraditi da listview prikaze sadrzaj baze.
U sljedecem dijelu, cu prikazati kako primjeniti ADD, UPDATE and DELETE na vrijednostima prikazanim u listu boxu.
Naravno, ovaj nacin koji sam prikazao je daleko od savrsenog, te postoji dosta mjesta gdje se moze poboljsati. To ostavljam vama da komentarisete :)
Izvinjavam se na potencijalnim greskama navedenim u ovom dokumentu.
[Ovu poruku je menjao wex-alpha dana 13.05.2010. u 10:59 GMT+1]
[Ovu poruku je menjao wex-alpha dana 13.05.2010. u 12:35 GMT+1]
[IMG]http://img233.imageshack.us/img233/5078/thumbnailte1.th.jpg[/IMG]
They say I look like daddy :D