Forum Delphi.cz
Delphi => Firemonkey => Téma založeno: 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.
-
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.
-
Nebo pro tento případ můžeš napsat v kodu v obsluze AfterScroll datasetu klasicky
if ... then edit.text := 'ddd' else 'dd'
-
Kukni http://www.malcolmgroves.com/blog/?p=1072 (http://www.malcolmgroves.com/blog/?p=1072)
-
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š.
-
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!!!!
-
// 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.
-
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
-
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.