[ GMC @ 27.10.2012. 21:43 ] @
Pokusavam u VB.net-u da napravim jedan mali program koji izmedju ostalog koristi Access bazu podataka i list box za prikaz.

Ako u jednoj tabeli u bazi imam polja kao sto su: Ime, prezime, JMBG, adresa, tel.... i ako zelim da u formi koju sam napravio u VB.net imam listbox u kojem ce biti prikazani samo Ime i Prezime a klikom na neko od ponudjenih imena bi se ostali podaci prikazali u za to predvidjenim poljima.

Ja sam uspio stvoriti konekciju sa bazom, pozvati query koji sam u accessu prethodno pripremio i uspijem u listboxu prikazati (postavim datasource i Display Member) imena i prezimena ljudi iz baze ali ne znam kako da nakon klika na neko ime i prezime prikazem i ostale podatke?

Vjerovatno je ovo vrlo jednostavno za rijesiti ali sam totalni pocetnik pa mi ovaj problem zadaje muke vec cijeli dan.
[ popmilan76 @ 28.10.2012. 12:27 ] @
Pa mozes napraviti relaciju sa dve tabele jedna sa imenom i prezimenom a druga sa ostalim podacima,ili mozes preko query,tako sto ces koristiti upit where in...Imam nesto slicno,ako nadjem napisacu ti

recimo ovako nesto


query1.SQL.Clear ;
query1.Close;
query1.SQL.Add ('SELECT SUM( ukupno ) FROM statistika');
query1.SQL.Add (' WHERE sifra IN('+ sifre +')');
Query1.Open;


ili relacija....

Query1.SQL.Clear;
Query1.SQL.Add('select * from Table1, Table2');
Query1.SQL.Add('where Table1.Id=Table2.Id2');
Query1.Open;



[Ovu poruku je menjao popmilan76 dana 29.10.2012. u 17:19 GMT+1]
[ Mare_TS @ 31.10.2012. 13:53 ] @
Znam da si postavio pitanje za VB, ali ja ću da probam da ti objasnim u C#, a verujem da ćeš se snaći pošto su razlike uglavnom sintaksne. :)

Prvo par stvari o ListBox kontroli.

Listbox kao kontrola ima kolekciju objekata u propertiju Items. Ti objekti se prikazuju u vidu liste koja može imati SingleSelect ili MultiSelect metod odabira. Redovi koji se vide na listi se popunjavaju tako što se za svaki objekat iz kolekcije "Items" pozove ToString() metoda (predstavlja tekstualnu reprezentaciju tog objekta) i upiše se string u jedan red. Kontrola ima properti koji predstavlja koji selektovani objekat iz kolekcije "Items" i zove se "SelectedItem", a "Text" properti prestavlja ToString() od selektovanog objekta.
Još jedna stvar koja tebi treba je događaj pod nazivom SelectedIndexChanged i koji se okida kada se promeni odabrana stavka u listi.

E sad ti možeš da napraviš jednu klasu koja će da predstavlja tabelu iz baze i da uradiš override metode ToString() da ti prikazuje samo 'Ime Prezime' kada ti treba tekstualna reprezentacija tog objekta, odnosno da bi se samo to prikazivalo na listi.

Evo primer:
Code:

    public class MojaOsobaIzBaze
    {
        public string ime;
        public string prezime;
        public int JMBG;
        public string adresa;
        public string telefon;
        .
        .
        .
        public override string ToString()
        {
            return this.ime + " " + this.prezime;
        }
    }
Sad kada se startuje aplikacija učitaš sve podatke iz baze (ili postaviš na klik na dugme ili neki drugi event) uz pomoć:
Code:
SELECT * FROM MojaTabelaUBaziSaOsobama
u DataSet ili DataTabelu.Onda iteriraš kroz sve vraćene redove i za svaki napraviš novi objekat tipa MojaOsobaIzBaze, sa podacima u tom redu, i taj objekat dodaš u kolekciju "Items" u "ListBox"
Code:
listBox.Items.Add(mojaOsobaIzBaze1);
Kada se završi iteracija imaćeš u vidljivoj listi spisak svih objekata predstavljenih samo sa njihovim Imenom i Prezimenom. Kada odabereš neki red u listi okinuće se SelectedIndexChanged događaj a u SelectedItem će se upisati ceo MojaOsobaIzBaze objekat.
Evo primera koda kako bi trebalo da izgleda događaj SelectedIndexChanged za listBox:
Code:
        private void listBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListBox lista = sender as ListBox;
            if (lista != null)
            {
                imeLabel.Text = (lista.SelectedItem as MojiListBoxItemi).ime;
                prezimeLabel.Text = (lista.SelectedItem as MojiListBoxItemi).prezime;
                jmbgLabel.Text = (lista.SelectedItem as MojiListBoxItemi).JMBG.ToString();
                adresaLabel.Text = (lista.SelectedItem as MojiListBoxItemi).adresa;
                telefonLabel.Text = (lista.SelectedItem as MojiListBoxItemi).telefon;
                .
                .
                .
            }
        }
Preptpostavimo da imaš na formi labele (imeLabel, prezimeLabel, jmbgLabel, adresaLabel, telefonLabel..) u koje će da se upisuju vrednosti selektovanog objekta iz liste.

Evo pokušao sam :) ako ti nešto ne bude jasno ti viči.
[ GMC @ 06.11.2012. 20:25 ] @
Hvala na iscrpnim odgovorima, puno je jasnije ;)