Savetovao bih ti da se dodatno pozabavis osnovama baza, jer takav dizajn je daleko od optimalnog.
Ovde bez dileme mozes dodati kolonu DatumUpisa i koristiti je da dalje filtriras prikaz kako ti odgovara (npr po godini/mesecu/danu). Cak bi u tom slucaju verovatno nehotice resio problem koji imas sa DGV-om.
Nije mi bitno da bude optimalno. Rekoh ranije da ovo radim radi treninga. Znam da bi mi mnogo lakse bilo da imam jednu jedinu tabelu i da sve komande ubacim preko wizarda, i da dodam po jednu liniju koda za svaki dogadjaj, ali nije poenta da bude lakse nego da naucim sustinu.
Hteo sam da mi aplikacija automatski pravi tabele na odredjeni datum. Cinilo mi se kao koristan dodatak aplikaciji, pa sam hteo da vidim da li mogu to da uradim (to sam uspeo). Imam i kolonu datum koja mi prikazuje DAN unosa. Znam da mogu da preko sql upita izvucem iz baze prikaze samo za odredjeni mesec, ali ovako mi je delovalo nekako preglednije u SQL managmentu.
Mozda je preglednije, ali napravice ti nocnu moru kad-tad. Evo npr treba ti izvestaj za 2 meseca, sta ces raditi? Meni jedino na pamet pada UNION, pritom zamisli da treba za odredjenog korisnika zadnjih 3 godine, to je mnogo UNION-a.
Druga strana, a jos nidje koda. Hajde postuj nam kako tacno popunjavas(prikazujes) DGV za ordjeni mesec. Posto kazes da je rucno, ti mozes rucno i preko DataSeta i SqlDataAdapter-a, ne mora to bas preko wizarda.
Pitanje je da li ce aplikacija uopste da se koristi za nesto, ali shvatam poentu. Na losim temeljima kuca nece stajati.
Ako bude potrebe da se aplikacija koristi za nesto konkretno, verovatno cu preraditi bazu za samo jednu tabelu.
Ali sta ako mi nekad bas treba vise tabela i ne mogu sve da strpam u jednu? Mislim da ce mi koristiti da znam kako se to moze uraditi, a hocu i da iskoristim ovaj inat sto se probudio u meni da naucim nesto novo :D.
a sto se tice popunjavanja DVG to ide ovako
private void dgUpdate(string table)
{
da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("SELECT * FROM " + table + " ORDER BY dan", con);
ds.Clear();
da.Fill(ds);
dg.DataSource = ds.Tables[0];
dg.Refresh();
}
Samo pozovem funkciju na odgovarajucem mestu i prosledim joj ili mesec iz trenutnog datuma, ili izabrani text iz combobox-a u zavisnosti od toga gde mi sta treba.
Problem je bio u koriscenju metode Clear() tj u njenom mestu pozivanja.
Prepravio sam svoju funkciju i mesta na kojima se poziva i sada radi.
Evo funkcija
private void Prikazi(string tabela)
{
da = new SqlDataAdapter("SELECT * FROM " + tabela + "", con);
cb = new SqlCommandBuilder(da);
con.Open();
ds.Clear();
da.Fill(ds, tabela);
dg.DataSource = ds.Tables[tabela];
con.Close();
}
a evo i konkretnog koda na dugmetu koji cuva izmene u bazi
da.Fill(ds, comboBox1.Text);
da.Update(ds, comboBox1.Text);
Prikazi(comboBox1.Text);
Ove dve funkcije (Fill i Update) su takodje pravile problem dok nisam dodao i source tabelu za table mapping (ranije sam pozivao prosledjujuci samo dataset: da.Update(ds))
Jel bolje da prepravljam kod i da sve stavim u istu tabelu ili da ostavim sve ovako sada kada radi?
Ovako mi deluje preglednije ali ako ce biti previse problema za ubuduce, onda bolje prepraviti sad nego kasnije.
Edit:
Izvinjavam se za trostruki post, ovo sigurno krsi neka forumska pravila :)