Autor Téma: LiveBindings XE3 - modifikace výrazu  (Přečteno 4334 krát)

Offline Alnath

  • Příspěvků: 49
  • Karma: 2
LiveBindings XE3 - modifikace výrazu
« kdy: 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.
« Poslední změna: 03-10-2012, 17:48:37 od Alnath »

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #1 kdy: 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.

« Poslední změna: 03-10-2012, 22:36:03 od Radek Červinka »
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #2 kdy: 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'
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2329
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #3 kdy: 03-10-2012, 22:37:01 »
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #4 kdy: 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š.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Alnath

  • Příspěvků: 49
  • Karma: 2
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #5 kdy: 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!!!!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4420
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #6 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Alnath

  • Příspěvků: 49
  • Karma: 2
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #7 kdy: 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

Offline Alnath

  • Příspěvků: 49
  • Karma: 2
Re:LiveBindings XE3 - modifikace výrazu
« Odpověď #8 kdy: 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.