[ wex-alpha @ 13.05.2010. 09:00 ] @
PRVI DIO

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;


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>


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>


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();
}


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()


Ili u dugme:
Code:

  private void button1_Click(object sender, RoutedEventArgs e)
        {
            PrikaziBazuuLB();
        }




ili odmah ispod konstruktora:
Code:

  public Window1()
        {
            InitializeComponent();
            PrikaziBazuuLB();
        }



ili u load form event:

Code:

 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]
[ wex-alpha @ 13.05.2010. 10:00 ] @
Dodata izmjena u C# kodu.