1. Imam zahtjev od korisnika da se u datagridview-u ENTER dugme ponasa kao TAB. Dakle, hoce da prelazi iz celije u celiju pritiskom na ENTER.
Nijesam bio lijen, trazio sam po netu, nasao sam jedno rjesenje, koje ne radi bas savrseno:
na keydown dogadjaj grida
if(e.KeyCode = Keys.Enter) e.Handled = true;
pa na keyup dogadjaj grida
if(e.KeyCode = Keys.Enter) SendKeys.Send("{Tab}");
Ovo radi kako treba kad prelazim iz celije u celiju bez editovanja iste. Ali, ako sam promijenio sadrzaj celije, ENTER se ponasa standardno, tj. oce u novi red. Tu sam batalio, mislio da ne moze nikako.
Onda sam nasao na MSDN-u neki clanak koji kaze da se to moze odraditi koriscenjem EDITCONTROLSHOWING dogadjaja grida (ali ne kaze kako), tu mogu da se dohvatim kontrole koju editujem, za vrijeme editovanja, pa mogu da joj dodijelim keydown i keyup handlere (koje inace ne mogu jer datagridviewcolumn objekat ne izlaze te dogadjaje).
Probao sam:
Control c = e.Control;
c.KeyDown += handler1;
c.KeyUp += handler2;
ali opet ne radi.
Sad, cini mi se da je ovo jako rasprostranjem problem, pa se nadam da mozda neko vec ima gotovo rjesenje...
2. Izvrsavam uskladistenu proceduru (radi nivelaciju cijena) u bazi koja generise oko 1000 zapisa i povlacim te zapise iz baze u aplikaciju. U prvom slucaju, dok jos nijesam bio definisao Expression kolone u DataSet-u, sve se zavrsavalo gotovo trenutno, izvrsavanje procedure, fill metod i imam podatke u gridu.
Sad, nakon definisanja nekoliko expressiona, procedura se zavrsi opet gotovo trenutno, ali nakon fill metode treba mu 5-6 sekundi da se podaci pojave u gridu. Kada uklonim expression kolone, sve se vraca na staro, brzo izvrsavanje.
Kada iz aplikacije otvaram vec gotovu nivelaciju (sa sve definisanim expressionima), pozivam fill metod neposredno pred otvaranje forme, forma se opet otvara trenutno, i nema nikakvih problema, tako da zakljucujem da je u pitanju datagridview, jer stvarno ne mogu da vjerujem da mu za sacicu proracuna treba 5-6 sekundi.
Glupo mi je da korisniku kazem, ajd' sad zatvori pa otvori da bi dobio podatke, a i bezveze je da program cuti 5-6 sekundi ako vec ne mora. Mozda bih mogao da pustim fill metod kroz drugu nit, ali to dosta komplikuje stvari i mozda izazvati dosta problema.
A datagridview nema suspendbinding metod koji bi pozvao prije fill i resumebinding posle fill, sto bi, cini mi se, pomoglo. Probao sam sa suspendlayout i resumelayout, ali ne pomaze. Ako uradim dispose neposredno prije fill, pomogne, ali ne mnogo, sekundu dvije.
Any ideas?
Pozdrav.