[ FranjoZG @ 27.09.2017. 13:38 ] @
Imam zanimljiv problem...

qry.SqlSelect := 'select a.field1, a.field2, b.field3, b.field3
from a
left join b on a.f = b.f'

podaci se prikazuju u cxgridu

Kada radim append podataka, radim ga na qry-u.
Nakon pos, comitretainig i refresh imam sljedeću situaciju:

vrijdenosti qry fieldova su ok, onako kako su upisani
cxgrid ima tri slučaja:
1. ako nije uključen sort cxgrida-a, podaci se prikazuju ispravno
2. ako je uključen sort cxgrida, po bilo kojoj koloni, podaci iz joinane tablice (b) se ne prikazuju za dodati slog
3. ako napravim qry.close, qry.open - podaci se prikazuju ispravno (ovo mi nije nasretnija varijanta zbog brzine)

iskušao sam i cxgridview.datacontroller.refresh - ista stvar.


[ Rapaic Rajko @ 28.09.2017. 08:23 ] @
Nisam siguran da li sam dosad radio sa cxgridom, ali evo par predloga:

1) Append odradi kroz poseban query (samo na tabeli a), nakon toga refresh osnovnog query-ja; mislim da bi trebalo da bude ok.
2) Ako ne valja (dobijes opet prazne podatke iz tabele b), probaj onda ovako: a) iskljucis sort; b) odradis append na osnovnom query-ju; c) ponovo ukljucis sort. E da, pre a) ako treba uzmes bookmark, pa se posle c) pozicioniras na taj bookmark.

Pozz
[ FranjoZG @ 28.09.2017. 08:52 ] @
1) ovo ne mogu koristiti jer nakon toga treba Locate, a to traje...
2) ne radi, opet su prazni podaci

Za sada jedino kako radi: Close - Open - Locate
[ dejanet @ 28.09.2017. 09:32 ] @
Cini mi se kao scenario za dataset komponentu a ne quey ili table. Ako se dobro secam u DataSet komponenti postoje 3-4 query-ija: select, update, delete i mozda append. Pa nju (DataSet) bindujes na cxGrid. Ja se kroz maglu secam AdoDataSet.
[ Rapaic Rajko @ 28.09.2017. 09:37 ] @
A varijanta 2b):

a) iskljucis sort; b) odradis append na osnovnom query-ju; c) refresh i na kraju d) ponovo ukljucis sort.

Prema tvom prvom postu na temi, koraci od a) do c) bi MORALI da rade. Ako nakon sort-a opet bude 'rupa' u podacima, onda tu nesto ne stima...

Pozz
[ FranjoZG @ 28.09.2017. 10:33 ] @
dejanet: to je sve ispravno postavljeno. qry->dataset->cxgrid

Dakle, u kodu gdje dodajem novi slog, redom imam;

Code:

RjesenjaDBGridDBTableView1.DataController.ClearSorting(false);
q1.append;
q1F1.AsString := Nesto;
...
q1.Post;
q1.Transaction.CommitRetaining;
q1.Refresh;
RjesenjaDBGridDBTableView1.DataController.Refresh;

ShowMessage(q1Field3.AsString);


- q1Field3 je field iz joinane tablice i ShowMessage ga prikaže ispravno, a cxgrid ne. Podatke iz "a" tablice uredno prikaže.
- Maknuo sam sort i nisam ga nakon appenda vraćao.
- cxgrid više nije sortiran
- RefreshSQL je ispravan i qry ga odradi jer da nije ispravan niti ShowMessage ne bi prikazao ispravno podatak.

Ako nakon starta programa ne postavim sort (klik na column title), ostavim grid kako je - nesortiran, podaci se ispravno prikazuju. Sve mi više miriše na bug u cxgridu.

[ savkic @ 28.09.2017. 10:46 ] @
Sa cxGridom nisam nesto posebno radio pa u tom delu ne mogu pomoci, mozda samo savet da pokusas kod njih na forumu ili preko supporta, ako je bug mislim da ispravljalju.

Da li koristis Firebird? Vidim da koristis CommitRetaining, on nije bas najbolje resenje i za vece baze moze izazvati usporenja, bolje je resenje hard Commit. Sam dataset bi preko RefreshaSQLa trebalo da uradi refresh samo izmenjenog sloga, a cak i ako radi cele tabele to nece biti problem ali bi verovatno bilo bolje da koristis posebnu ReadOnly transakciju za pregled i drugu transakciju (i query) za izmene.
[ dejanet @ 28.09.2017. 10:56 ] @
Mozda klikom na sort dx grid komponenta pogresno update-uje sql query sa "order by", pa zato imas "empty" resultset, mada bi onda trebalo da dobijes neki error ili bar warning u debuger-u.
[ FranjoZG @ 28.09.2017. 11:00 ] @
Koristim FireBird.
Ne mogu napraviti Commit jer on closa dataset pa izgubim aktivni slog. Sa commit i open stvar radi samo moram i locate, a vrijeme...
Ako korisim odvojene trans. za pregled i izmjene, opet isti problem sa lociranjem dodatog sloga.

Pisao sam supportu ali nikako da odgovore, na forumima nisam ništa pronašao o tom problemu. Mislio sam da je netko od vas imalo takav problem.
cx kontrole su krasne, ali... da ponovno radim taj projekt sigurno ih ne bih koristio, a sada ih ići mijenjati :( sada koristim svoj dbgrid kojem sam napravio, ima slično incrementalno pretraživanje, filter i sortiranje po koloni kao i cxgrid, a bez milion property-a.
[ kraki @ 28.09.2017. 11:49 ] @
Izvini ako ako si probao a ja sam preskočio... A da probaš da uradiš refresh cxGgrida... na primer cxGridNekoIme.Refresh. Znači ne refresh DataSet-a nego samog grida preko ugrađene funkcije...
[ FranjoZG @ 28.09.2017. 12:17 ] @
Isprobano:
Code:

RjesenjaDBGridDBTableView1.DataController.Refresh;


DevExpres objavio pitanje, a nisu poslati odgovor. To je support? Za 1-2 mjeseca možda dobijem odgovor od koga....
[ FranjoZG @ 29.09.2017. 08:26 ] @
Ovo su mi odgovorili, ništa pametno... ne pada mi na pamet kupovati novu verziju...
Preostaje qry.Close -> Open -> Locate

In your account records, I see that you are using a very old version of our TcxGrid control. I admit that there may be issues in such old builds. However, in this case, I think that the behavior you described is caused by the fact that your data set (query) does not notify listeners about changes. Regular data sets (e.g., TClientDataSet, TADOTable, etc.) should correctly work in this case. I suggest that you check if calling the cxGridDBTableView.DataController.RefreshExternalData method can help you overcome this problem. If populating grid records takes much time, consider enabling the cxGridDBTableView.DataController.DataModeController.GridMode property to speed up the process (see the "Grid Mode" help topic).
[ FranjoZG @ 29.09.2017. 08:57 ] @
Ako će tko imati sličan problem, evo kako sam ga riješio, malo zobilazno ali puno brže od close->open->locate...

Nakon qry.Refresh upišem u cxgrid podatke iz joinane tablice:
Code:

qry.Refresh;
index := cxGridDBTableView1.DataController.GetSelectedRowIndex(0);
rw := cxGridDBTableView1.Datacontroller.GetRowInfo(index);
KeyInd := cxGridDBTableView1.DataController.GetItemByFieldName('FieldName').Index;
cxGridDBTableView1.DataController.SetValue(rw.RecordIndex, KeyInd, qryFieldName.AsString);
...
// i tako za sve field-ove iz join-ane tablice
...

[ savkic @ 29.09.2017. 12:45 ] @
...to bas komplikovano, cudi me da QuantumGrid to nema lepse reseno, cini mi se da klasicni DBGrid lepo radi kad postoji RefreshQuery.