17/18.10. Zadatak: Upis, brisanje, ažuriranje podataka u bazi. + ListBox
Za potrebe auto placa kreirana je baza podataka u kojoj se vodi evidencija o svim vozilima.
Dijagram za postojeću bazu dat je na slici:

SQL Query za kreiranje i popunjavanje baze u MS SQL Serveru: ( LINK->Preuzmi fajl, levi klik- Save Link As...)
ili, ako ste za druge formate, možete preuzeti: Access ACCDB bazu, ili Access MDB bazu ili upit koji pokrećete na MySql-u nakon kreiranja baze B31 (LINK - preuzmi upit, levi klik- Save Link As...)
Zadatak:
Kreirati desktop aplikaciju koja će omogućiti rad sa postojećom bazom.
Unošenje podataka o gorivu obavlja se preko obrasca čiji je izgled dat na slici nastavku:

- U okviru sa listom prikazuju se podaci o gorivu sortirani po šifri u rastući niz.
- Ukoliko gorivo sa unetom šifrom postoji prikazuju se podaci o njemu.
- Obezbediti da korisnik dobije poruku o uspešnom upisu/brisanju/izmeni podataka, kao i o obrađenim greškama.
Uputstvo za rad:
- Prvo postaviti komponente: 3x TextBox, 4x Button, 6x Label, 1x ListBox
- Zatim isprogramirati dugme za izlaz: Application.Exit();
- Dvoklikom na formu, isprogramirati da se prilikom učitavanja forme popuni ListBox1 sa podacima iz tabele.
Savet: Ovo uraditi u posebnoj metodi koja se onda poziva iz Form1.Load().
Prvo treba da se prilikom inicijalizacije komponenti, u konstruktoru, podese tab stopovi za List box.Klik na dugme ispod da vidite primer kako se to može uraditi:
Klikni da vidiš kako podesiti ListBox u Form1() - Nakon InitializeComponent()
listBox1.UseCustomTabOffsets = true;
listBox1.CustomTabOffsets.Clear();
listBox1.CustomTabOffsets.Add(20);
listBox1.CustomTabOffsets.Add(95);
Drugi način:
listBox1.UseCustomTabOffsets = true;
listBox1.CustomTabOffsets.Clear();
int[] razmak = { 80, 180 };
listBox1.CustomTabOffsets.AddRange(razmak);
Objašnjenje:
- postavlja se da su razmaci (tab) Custom - da ih sami podešavamo a da se ne oslanjamo na podrazumevane vrednosti
- Uklanjamo podrazumevane vrednosti za razmake
- uvodimo niz celih brojeva u koji smeštamo koliko piksela je za koji razmak
- taj niz ubacujemo kao CustomTabOffsets !
Zatim napraviti metodu UnesiListu() koja će se pozivati svaki put kada treba uneti listu sa podacima:
Klikni da vidiš primer kako može da se unese lista
void UnesiListu()
{
listBox1.Items.Clear();
***Connection konekcija = new ***Connection(konSTR);
string Upit = "SELECT GorivoID, Naziv, Opis FROM Gorivo ORDER BY GorivoID";
try
{
konekcija.Open();
***Command komanda = new ***Command(Upit, konekcija);
***DataReader rd = komanda.ExecuteReader();
while (rd.Read())
{
listBox1.Items.Add(rd[0] + "\t" + rd[1] + "\t" + rd[2]);
}
}
catch (Exception a)
{
MessageBox.Show("Greška \n " + a.Message);
}
finally
{
konekcija.Close();
}
}
***
- Kada se unese šifra, treba da se označi gorivo sa tom šifrom u ListBox-u, a ako ne postoji, onda se ne označava:
// kako ovo uraditi? - ovo samo ako stignemo na času ....
- Kada se klikne na ListBox i odabere jedna stavka, treba da se popune odgovarajući textBox-ovi podacima iz označenog reda KLIK za prikaz/sakrivanje jednog rešenja
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string ceoRed = listBox1.Text;
string[] nizReci = ceoRed.Split('\t');
tbSifra.Text = nizReci[0];
tbNaziv.Text = nizReci[1];
tbOpis.Text = nizReci[2];
}
- Klikom na dugme "Obriši" treba da se izabrano gorivo obriše iz tabele (i iz baze)
Obratite pažnju da se prilikom brisanja goriva, treba ili obrisati sva vozila koja koriste to gorivo, ili im postaviti da koriste drugo gorivo. Brisanje neće biti moguće ako postoji neko vozilo koje je ostalo da koristi to gorivo. zbog referencijalnog integriteta - GorivoID je strani ključ u tabeli vozilo!
Klikni da vidiš jedno moguće rešenje
***Connection konekcija = new ***Connection(konSTR);
string upit1 = "DELETE FROM Gorivo WHERE GorivoID = @sifra1 ";
string sifra = tb_sifra.Text;
try
{
konekcija.Open();
***Command komanda1 = new ***Command(upit1, konekcija);
komanda1.Parameters.AddWithValue("@sifra1", sifra);
komanda1.ExecuteNonQuery();
MessageBox.Show("Uspesno obrisano");
UnesiListu();
}
catch (Exception a)
{
MessageBox.Show(a.Message);
}
finally
{
konekcija.Close();
}
- Klikom na dugme "Izmeni" treba da se izmene podaci o izabranom gorivu
// kako ovo uraditi? - Slično kao i za brisanje, samo što je upit drugačiji:
UPDATE Gorivo SET Naziv=@ime, Opis=@info WHERE GorivoID=@id
i treba da se komandi proslede tri parametra !
- Klikom na dugme "Upiši" treba da se upiše novi red u tabelu o gorivu
Klikni da vidiš jedan način kako upisati podatke u bazu
***Connection konekcija = new ***Connection(konSTR);
string upit = "insert into gorivo(GorivoID,Naziv,Opis) values(@id,@ime,@info)";
string sifra = tb_sifra.Text;
string naziv = tb_naziv.Text;
string opis = tb_opis.Text;
try
{
konekcija.Open();
***Command komanda = new ***Command(upit, konekcija);
komanda.Parameters.AddWithValue("@id", sifra);
komanda.Parameters.AddWithValue("@ime", naziv);
komanda.Parameters.AddWithValue("@info", opis);
komanda.ExecuteNonQuery();
MessageBox.Show("Uspesno upisano");
UnesiListu();
}
catch (Exception a)
{
MessageBox.Show(a.Message);
}
finally {
konekcija.Close();
}
...