Formattazione condizionale parte di campo

lunedì 07 luglio 2008 - 10.59

nalfein Profilo | Newbie

Innanzitutto le buone maniere: un saluto a tutto il forum

In secondo luogo, come da oggetto, ho un problema con CR. Avrei bisogno che il testo di un campo abbia una formattazione condizionale a seconda del contenuto. Il problema pero' e' che la formattazione deve essere parziale e non totale.
Mi spiego meglio: diciamo che ho una serie di codici di questo tipo: mario.mangia.la.mela
Il codice che ho inserito funziona

if instr({@miocampo}, "mario") <> 0 then
crRed
else
crBlue

ma cosi' facendo l'intera stringa mi si colora.
A me servirebbe che se ci fosse mario nella stringa supponiamo colori solo mario ottenendo mario(colorato).mangia.la.mela

Spero di essere stato chiaro
Grazie fin d'ora a chi rispondera'

Ciao

freeteo Profilo | Guru

ciao,
io non credo sia possibile parzializzare il colore di un campo di testo, a meno di non usare codice html e dirgli al report che interpreti "html" nella scheda "Paragraph Formatting", anche se non interpreta correttaemnte tutti i tag, in particolare dalle veloci prove che ho fatto io non interpreta il colore.

Non so se specificando in RTF, ci sia qualche miglioramento.

Perciò dovresti pensare a concatenare con 2 (o +) caselle di testo, e formattare la singola casella in base alla formula tua.
Tieni presente che puoi "avvicinare" vari campi non solo allineandoli, ma anche, mettendo una casella di testo libero, e trascinando dentro i campi, viene fatto un'accodamento come se facessi la concatenazione di stringhe tra i diversi campi.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Freeteo scusa ho postato la stessa cosa su piu' forum e in uno mi hanno risposto cosi'

Hi,
The work around is create two formulas.

frm1
left({@test},instr({@test},'.')-1)

which will extract John then format field font tab select x+2 against color and enter

if instr({@test}, "john") <> 0 then
CrRed
else
CrBlue

frm2
Mid({@test},instr({@test},'.')) this will extract the remaining part
.eat.the.apple

then create a TextObject and Place the two formulas in them final result

john.eat.the.apple

Quello che non capisco e':
1) LA sintassi finale sarebbe questa?

{@test},instr({@test},'.')-1

if instr({@test}, "ON") <> 0 then
crRed
else
crBlue

{@test},instr({@test},'.')

2) Anche fosse non capisco il passaggio

then format field font tab select x+2 against color

Che significa? Mi pare sia una specie di formula di controllo (se non ho capito male Cr lavora con forumle diverse da Excel classico e quindi se una formula da 1 fai cosi' altrimenti se da 2 fai cosa'... giusto?)
E se e' una formula di controllo dove la piazzo?

3) Mi ha detto di creare un text obj e poi metterci il tutto... ok creo il text obj ma poi dove metto tutto il codice?

So che e' parecchia carne al fuoco ma spero tu possa aiutarmi

Ciao e grazie fin d'ora

freeteo Profilo | Guru

il codice che ti hanno postato è praticamente quello che ti dicevo io, ovvero fai un campo "formula" che è composto solo dal testo che vuoi estrarre (ad esempio "mario") e lo ricavi da quella formula che ti hanno dato.Ma cmq era corretta anche la tua di prima, a quanto avevo visto, ovvero fai farti dare il substring ( left(.. ) a fino ad un indice ( inst(.. ) ma il concetto non cambia, è cmq da separare il nome che vuoi evidenziare dentro ad un altro campo e poi metti la formattazione ( quando dice "X+2" è il pulsante formula) del colore.

Siamo allineati come soluzione

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Ok cominciano a diradarsi le nubi hehe

Solo qualche chiarimento ancora

fai un campo "formula" che è composto solo dal testo che vuoi estrarre
e lo ricavi da quella formula che ti hanno dato

Quale formula? Questa?
{@test},instr({@test},'.')-1

E come creo il campo formula? (Sono un bel disastro eh? )

Per la seconda parte della formattazione colore ok dato che formattero' quel campo li

La seconda parte della formula va a riprendere il resto del codice immagino ma

then create a TextObject and Place the two formulas in them final result

Questo non so come farlo (cioe' creare l'oggetto testo si ma dove metto tutto il pappardellone di codice ecc ecc?) o, seguendo la tua versione, come concateno le due celle?

Altra ultima cosa poi dovrei, credo, trovare l'uscita

Alcuni codici per es non hanno Mario cioe' solo mangia.la.mela sulla prima casella posso dirgli che se c'e' mario colora altrimenti non mettere nulla?

E' possibile?
Ciao e grazie

freeteo Profilo | Guru

>Ok cominciano a diradarsi le nubi hehe
bene!


>Quale formula? Questa?
>{@test},instr({@test},'.')-1
>
>E come creo il campo formula? (Sono un bel disastro eh? )
nella lista dei campi, ovvero nella tab outline, c'è il nodo "Formula Fields" sotto ai campi veri e propri che hai usato per fare il report.
Tasto Dx->new e li si apre.

la formula che ti serve è estrarre la prima stringa fino al primo punto giusto?


>Per la seconda parte della formattazione colore ok dato che formattero'
>quel campo li
ok


>La seconda parte della formula va a riprendere il resto del codice
>immagino ma
>then create a TextObject and Place the two formulas in them final
>result
>Questo non so come farlo (cioe' creare l'oggetto testo si ma
>dove metto tutto il pappardellone di codice ecc ecc?) o, seguendo
>la tua versione, come concateno le due celle?
questo è come ti dicevo io, metti un campo "testo libero" (textObject) e trascini letteralmente dentro i 2 campi formula, e poi formatti il primo dei campi, ovvero quello del nome selezionandolo:

446x496 10Kb



>Altra ultima cosa poi dovrei, credo, trovare l'uscita
>Alcuni codici per es non hanno Mario cioe' solo mangia.la.mela
>sulla prima casella posso dirgli che se c'e' mario colora altrimenti
>non mettere nulla?
si imposti il valore della proprietà "font-color" da dentro al report, mettendo la tua vecchia formula


>E' possibile?
>Ciao e grazie
certo, spero di averti aiutato.


Cmq ti ho allegato un report vuoto con dentro 3 formule e un campo testo
La prima simula il valore di un campo,quindi non deve interessarti, e nelle altre metterai il nome del campo e non la formula,ma il concetto è lo stesso.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Ok venutio a capo!!!

Senti ora ti complico la vita

Se volessi mettere anche "mela" con la frmattazione condizionale?

Ho provato a mettere un terzo campo mettendo "Right" al posto di Left e mid e in effetti funziona
Il vero problema e' che mi appare
Mario (colorato).mangia.la.mela (non colorato).mela (colorato)

Praticamente riporta mela 2 volte
Dovrei togliere dal centro la prima mela (ricordi musicali? )

Spero di essere stato chiaro

Intanto ti ringrazio per l'aiuto

Ciao

freeteo Profilo | Guru

ciao,
ti basta fare il centro come mid tra i 2 punti:
mid({@CampoDelDatabase}, instrrev({@CampoDelDatabase},".") + 1)

con "instr" vai da sinistra a destra, mentre "instrrev" vai da destra a sinistra, quindi parti dalla fine...quindi ti bastano 2 di questi e fai 2 campi, poi li combini come prima con colori diversi...dovremmo esserci!

ps: se hai risolto accetta una risposta così chiudiamo il thread.Grazie.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Purtroppo no Freeteo

dopo aver letto mi sono detto "Ottimo, a posto" e invece il mio CR si comporta in modo strano

Ponendo giusto (se ho capito bene) che le formule siano 3 (left, mid, right) sono andato a cambiare la mid come mi hai detto ma, sorpresa, mi ritrovo con:

Mario(colorato, ok).la(non l'articolo ma il "la" finale di mela e scritto in nero; in pratica la parte finale della stringa che invece desideravo togliere).mela (colorato, ok quello che ho ottenuto con right ecc... ecc...)

Ho provato a togliere il "+1" dalla formula ma il risultato e':

Mario (colorato,ok).ela(la parte finale di mela).mela (colorato, ok)

In pratica con inst leva da sin a dx ma tenendo come base l'ultima lettera di dx se fai insrrev leva si da dx a sin ma sempre partendo dall'ultima lettera a dx

Ho provato a mettere nella formula in centro left per vedere se fossi riuscito a dare come punto di partenza sin e togliere dall'ultima lettera a dx ma ovviamente non funziona cosi' e mi sono ritrovato con: mario.mario

Non capisco se e' il mio CR che non va o davvero non c'e' modo di togliere le lettere a dx tenendo fisse quelle di sx

Ti sto tirando scemo sorry

Grazie ancora delle risposte

Ciao

freeteo Profilo | Guru

ciao,
forse c'è qualche errore nella formula, ti riallego il report con quello che ti dicevo io, ovvero il mid tra i punti e il concatenare con colori diversi di "mario" e della "mela".

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Hmm mi sa che c'e' un problema perche' quando apro il tuo report si verifica il mio stesso problema

Ti allego l'immagine cosi' ti e' piu' chiara

Cavolo so che manca un niente per risolvere il tutto ma...

Grazie mille davvero per l'aiuto

615x374 21Kb

freeteo Profilo | Guru

>Hmm mi sa che c'e' un problema perche' quando apro il tuo report
>si verifica il mio stesso problema
si scusami, ti ho allegato un report di prova, e non corretto, adesso ti ho allegato quello che estrapola le varie parti della stringa.
Perdonami per l'imprecisione nell'allegare il file.


>Grazie mille davvero per l'aiuto
di niente figurati, adesso dovrebbe essere a posto.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Yeah!!! Grande
Ti ringrazio tantissimo (anche per la pazienza)

Flaggo come risolto

Solo una cosa se metto codici corti (tipo Mario.mangia, che in effetti ci sono) mi da un errore dicendo che il numero non e' positivo o non e' integer e non i visualizza il report

Ci sarebbe un modo per ovviare a questo?

Ciao e grazie ancora sei stato gentilissimo

freeteo Profilo | Guru

Ciao,
si controlla dentro alla formula se le variabili temporanee (numbervar "start" e "stop") magari mettendo un "if stop <=0 " e torni qualcos'altro:

...numbervar... if stop < 0 then {campo} else mid(....quello di prima

fai qualche prova con la sinstassi di crystal, ma lo schema è questo.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Freeteo ho provato cosi' ma sempre messaggio di errore

numbervar start := instr({@miocampo}, {@Form1}) + len({@Form1});
numbervar stop := instr({@micampo},{@Form3}) +2;

if start <=0 or stop <=0 then (ho provato anche con and e < stretto)

{@miocampo}

else

Mid ({@miocampo}, start,stop - start - 2)

Sbalgio qualcosa?

Ciao e grazie ancora dell'aiuto

freeteo Profilo | Guru

ciao,
facciamo prima se mi dai un report fatto da te, con i soli campi che servono e collegato ad un db temporaneo, e mi dici il campo e io te lo sistemo
Allegalo qui, o mandalo via email e vedrò di darti una mano in maniera più precisa...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

nalfein Profilo | Newbie

Ciao Freeteo

ho inviato via mail il report con inserito un text obj in cui ti ho dato le spiegazioni che ti servono (spero)

L'indirizzo ha il mio nome sul forum (non e' uno spam di qualche buontempone hehe)

Ancora mille grazie per l'aiuto

Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5