Forum Delphi.cz

Delphi => Firemonkey => Téma založeno: Alnath 03-10-2012, 17:44:44

Název: LiveBindings XE3 - modifikace výrazu
Přispěvatel: Alnath 03-10-2012, 17:44:44
Mám trochu problém s přesným pojmenováním co přesně potřebuji, ale zkusím to vysvětlit.

Vytvořím klasickou MetropolisUI aplikaci - Grid. Přidám si datamodul, nasypu na něj data a přes LiveBindings Designer napojím do Listboxu data (na Item.Title, .SubTitle a .Description). Potud žádný problém, vše funguje jak má.

Jedno z polí však vrací hodnotu 0 nebo 1 a já bych rád, aby se v cíli (konkrétně Item.Desccription, ale to je jedno) místo těchto čísel objevily nějaké (mnou definované) texty.

Ideální by samozřejmě bylo si do DB přidat tabulku a pověsit ji k tomuto dotazu, ale bohužel nejsem autorem databáze - jde o jiné pohledy na data, ke kterým už existuje aplikace. Navíc je bohužel DB napsaná v Access, takže mi to samozřejmě nevezme v SQL příkazu ani CASE, abych si to ošetřil tam (nebo jestli někdo víte, jak při připojení na access použít v SQL SELECT příkazu CASE, tak sem s tím :) ).

V TBindingList je jediná komponenta - LinkFillControlToField, kterou když rozkliknu, dostanu collection se všemi linkovanými sloupci z DB a připojení na controls.
Dole vidím tlačítka Eval Control a Eval Source - přes to se pravděpodobně lze dostat k modifikaci cíle, ale nějak nejsem schopen "vygooglit", jak do toho zadat něco jako if Pole=0 then result="nula" else result="jedna".

EDIT: hmm, takže ani Eval Control ani Eval Source k cíli nevedou - nelze je editovat. Stejně tak pole Control expression for ListBox1 a Source expression for BindSourceDB1 jsou disabled.

Nepotkal jste se s tím někdo?

Díky.
Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Radek Červinka 03-10-2012, 22:33:43
No nejsem si jistý, ale tipl bych že přes visual designer toho dosáhneš poklikáním na tu spojovací čáru (spojující field s controlem) a se dá specifikovat lookup, případně CustomFormat a CustomParse - ale co přesně to nevím.

Nebo pravým tlačítkem na BindingList a vybrat New Live binding component a tam asi přes Binding Expression - tam se dají zadávat výrazy, ale přesně ti taky neporadím - je to fakt zoufale dokumentovane.

Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Radek Červinka 03-10-2012, 22:36:16
Nebo pro tento případ můžeš napsat v kodu v obsluze AfterScroll datasetu klasicky
if ... then edit.text := 'ddd' else 'dd'
Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Radek Červinka 03-10-2012, 22:37:01
Kukni http://www.malcolmgroves.com/blog/?p=1072 (http://www.malcolmgroves.com/blog/?p=1072)
Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Stanislav Hruška 04-10-2012, 08:06:06
Pre Access používam v SQL konštrukciu

Select iif(mojepole = 0; "je to nula"; "nie je to nula") as cosi...

Pozor, ";" a samotné " musíš zameniť podľa toho kde to píšeš.
Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Alnath 04-10-2012, 11:23:00
Radek: Díky moc za pokus o pomoc - je to přesně tak, jak říkáš - ta dokumentace je prakticky nulová a ani se zatím neobjevují nějaké návody od lidí z EMBT (jako je třeba Groves - ten článek a další od něj jsem samozřejmě četl), které by ukázaly některé tyto pokročilejší techniky. Všechna videa ukazují jen jak to prodrátovat přes LiveBindings, ale pokud chce člověk cokoliv změnit/modifikovat, tak už je ticho po pěšině  >:( Na ten Afterscroll se kouknu, to mě nenapadlo.

Stanislav: díky moc, dneska nám tu nešel proud, tak jsem po dlouhé době listoval nějakou SQL příručkou a ten IIF a SWITCH našel taky. Včetně té blbé poznámky o tom, jak oddělovat parametry v závislosti na tom, jaké mám národní prostředí - kterej blbec to takhle vymyslel, to by mě fakt zajímalo :(

Každopádně díky všem za pomoc!!!!
Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Stanislav Hruška 04-10-2012, 11:59:22
// jaké mám národní prostředí
V Access-e to nezávisí na národnom prostredí ale či to robíš priamo v ňom, alebo píšeš/skladáš SQL. A ešte čo máš nastavené - myslím tým Ansi92

Ukážka priamo v Access-e
Select iif(mojepole = 0; "je to nula"; "nie je to nula") as cosi...
SQL
Select iif(mojepole = 0, "je to nula", "nie je to nula") as cosi...

Extra kapitolka je zapísanie medzery a uvodzovky v prostredí delphi.
Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Alnath 09-10-2012, 14:11:52
Takže abych shrnul řešení mého původního problému, pokud by to zajímalo někoho dalšího v budoucnu:

Odpovědi se nacházejí v adresáři Samples (C:\Users\Public\Documents\RAD Studio\10.0\Samples\LiveBindings\bindexpression\fmx), kde jsou 4 projekty pro různé použití Expressions v Live Bindings, které to pěkně ilustrují.

Díky všem za ochotu
Název: Re:LiveBindings XE3 - modifikace výrazu
Přispěvatel: Alnath 31-10-2012, 11:03:04
Takže abych shrnul řešení mého původního problému, pokud by to zajímalo někoho dalšího v budoucnu:

Ještě teď vyšlo krátké video od Davida I o použití CustomFormat v LiveBindings - což je přesně to, co jsem původně potřeboval: http://cc.embarcadero.com/item/29131

Třeba to někomu pomůže.