Search  
Thursday, February 09, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Form-uri si generatoare de form-uri  grid - cu linii...
 grid - cu linii colorate
 
 1/31/2006 4:27:19 PM
User is offlinevladutzu
57 posts


grid - cu linii colorate
 (Romania)
Cum se pot afisa intr-un grid unele linii(de ex.: inreg. care au o anumita valoare pe un camp din tabela din care ia datele gridul) intr-o alta culoare ?
 1/31/2006 4:30:47 PM
User is offlineanonymous
0 posts


Re: grid - cu linii colorate
 (Romania)

Cu ajutorul propietatii DYNAMICBACKCOLOR, care este o propietate a coloanei.

Pe Init-ul gridului:

THIS.SETALL( 'DYNAMICBACKCOLOR', 'IIF( Cursor.Camp = 1000, 123456, 25645)')

Valoarile la culori sunt aiurea, trebuie sa le stabilesti tu.

 1/31/2006 5:00:47 PM
User is offlinevladutzu
57 posts


Re: grid - cu linii colorate
 (Romania)
Da, merge cu DYNAMICBACKCOLOR, merci.
 8/19/2009 1:36:31 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Vreau sa colorez gridul cu liniile intermitent, adica linia impara de o culoare iar cea para de o culoare.Am pus conditia in IIF ca daca    rec/2 # int(rec/2)   atunci pune o culoare. altfel pune alta culoare... Am incercat si cu un for-endfor... degeaba. tot pe toate mi le coloreaza.

Valy Maties - Beginner programmer
 8/19/2009 2:05:23 PM
User is offlineaflorin
838 posts
1st


Re: grid - cu linii colorate
 (N/A)
Daca ti le coloreaza pe toate inseamna ca ai gresit ceva in conditie ... si asa se manifesta, adica iti da ignore :)
Pe de alta parte, folosirea lui RECNO() pentru colorare par/impar nu e o idee buna - daca pui un index pe tabela, s-a dus in balarii. Poti folosi un cimp adaugat in cursor, gen flgPar pe care il completezi tu cu .t./.f. Evident ca daca schimbi ordonarea, refaci acel cimp :(

Florin Aparaschivei - Iasi
 8/19/2009 2:25:41 PM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: grid - cu linii colorate
 (Romania)

Incearca asa:

thisform.Grid.SetAll( "DynamicBackColor", "IIF( RecNo( ) % 2 = 0,  Rgb(255,0,0),  Rgb(0,0,255)")

 8/19/2009 2:42:23 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Nu functioneaza nici asa...

Valy Maties - Beginner programmer
 8/19/2009 3:02:59 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Am incercat in felul urmator si am pus si un set step on sa vad daca trece prin instructiune...
sele denumireretete
GO bott
SET STEP ON
wrec=rec && rec este denumirea campului cu nr crt, care il fac dupa selectul in care creez tabela denumireretete, prin inlocuirea lui cu recno()
FOR i=1 TO wrec
        IF i/2#INT(i/2)
            this.grid1.column1.SetAll("DynamicBackColor",Rgb(204,255,255))
        ELSE
            this.grid1.column1.SetAll("DynamicBackColor",Rgb(153,255,153))
        ENDIF
ENDFOR

Cu toate ca am observat ca trece prin instructiune si nu da nicio eroare gridul meu ramane necolorat.
Nu mai stiu cum sa mai fac.

Valy Maties - Beginner programmer
 8/19/2009 3:33:58 PM
User is offlinePetre Popescu
253 posts
4th


Re: grid - cu linii colorate
 (Romania)
Mai analizeaza codul tau. Chiar nu are cum sa faca ce ti-ai propus. Proprietatea "DynamicBackColor" este evaluata la fiecare refresh al gridului, nu neaaparat atunci cand dai tu comanda setall. Poti sa dai comanda setall cand ai gridul gol si uiti apoi de ea. Mai tarziu populezi cursorul din spatele gridului cu date si o sa apara si liniile colorate distinct in grid (fara a da din nou comanda setall).

Da-i un help pentru DynamicBackColor. Gasesti acolo un exemplu care contine:
frmMyForm.grdGrid1.SetAll("DynamicBackColor", "IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) , RGB(0,255,0))", "Column") && Alternate white and green records

Banuiesc la la fiecare refresh() gridul evalueaza expresia IIF(MOD(Recno(),2)=0.... pentru fiecare linie in parte si stabileste astfel culoare.

Important: valoarea atribuita pentru DynamicBackColor trebuie pusa intre ghilimele.



 8/19/2009 3:58:16 PM
User is offlineaflorin
838 posts
1st


Re: grid - cu linii colorate
 (N/A)
Vrei musai cu RECNO(). Ok.
Ar fi o singura explicatie pentru care nu iti merge: ai pe undeva (prin Init ?) o comanda prin care schimbi zona curenta de lucru (SELECT alta_tabela_decit_recordsourceul_gridului).

Florin Aparaschivei - Iasi
 8/19/2009 5:01:05 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Petre am incercat sa copiez acel cod din help si sa-l rulez, nu te gandi ca nu folosesc help-ul, dar imi da eroare... missing operator.chiar la acel setall.
Florin, nu vreau neaparat cu recno(), dar dupa parerea mea ori ca folosesc un camp pe care il inlocuiesc cu true sau false in functie de tipul de cifra, par sau impar si verific daca acel camp are atribuit .T. sau .F., ori ca folosesc recno(), pe care il scriu intotdeauna inainte de a pune tabela pe recordsource si dupa ce preiau denumirile de retete grupate in tabela denumireretete.dbf si apoi verific daca e impar sau nu prin formula rec/2#int(rec/2) sau cu mod() ori cu semnul %, sunt aceleasi solutii care le pot folosi. E o chestie de cum iti vine pe moment, e bine ca sunt mai multe solutii si nu depinzi de una singura. Dar ce te faci cand nu merge niciuna?! Uite ca raspund tot eu.... Cauti solutii pe PROFOX, ca aici sunt baietii destepti!  Sigur undeva e o scapare...
Apropo de zona in care lucrez, nu schimb cu nimic, folosesc zona implicita, nici macar nu folosesc select 0, sau 1, sau mai stiu eu ce alt select.

Valy Maties - Beginner programmer
 8/20/2009 12:05:00 PM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: grid - cu linii colorate
 (Romania)

Salut!

Am încercat să construiesc un mic exemplu cu un grid cu linii colorate alternativ si cu accesarea valorilor din celulele gridului.

Am scris cod in metoda Init a formularului si în metoda AfterRowColChange a gridului.

Treaba se complică dacă tabela are un index activ sau dacă se schimbă ordinea coloanelor în cadrul gridului.

Pentru începătorii într-ale gridului este un punct de plecare.

TestGrid.rar 
 8/20/2009 12:09:34 PM
User is offlineOvidiu Dobie
90 posts


Re: grid - cu linii colorate
 (N/A)
Am facut download la fisierul atasat *.rar ... dar e de dimensiune 0 bytes ... Am dreptate? Sau browser-ul + antivirus-ul meu e prea evoluat? :)

Ovidiu Dobie
 8/20/2009 12:13:33 PM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: grid - cu linii colorate
 (Romania)
Mai incerc o data.
TestGrid.rar 
 8/20/2009 12:15:03 PM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: grid - cu linii colorate
 (Romania) Modified By oviciandrus  on 8/20/2009 11:16:10 AM)
Nu stiu de ce nu merge!!
NewTestGrid.rar 
 8/20/2009 12:31:57 PM
User is offlineOvidiu Dobie
90 posts


Re: grid - cu linii colorate
 (N/A)
E chiar interesant .. poate incercati sa faceti un zip ... sau nu are de-a face?....

Ovidiu Dobie
 8/20/2009 12:45:56 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Upload-ul nu mai functioneaza pr forum de multisor ... Mai bine zis, fisierele se uploadeaza, dar, la descarcare, au lungime 0.

Un grid cu linii colorate alternativ poate fi realizat cu gridbulder-ul:

In designer:
- click dreapta pe grid
- se alege builder din popup
- in pagina 2 a builder-ului, la style se alege Ledger
Dupa salvare, in DynamicBackColor al fiecarei coloane se va gasi codul necesar.

Atentie, gridbuilder-ul apelat pe un grid deja aranjat uneori strica gridul ... E bine de facut un grid nou, si aplicat builderul.

Daniel Buduru
 8/20/2009 12:55:33 PM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: grid - cu linii colorate
 (Romania)
Cine doreste exemplul pe care l-am făcut să-mi spună adresa de mail.
 8/20/2009 12:57:36 PM
User is offlineOvidiu Dobie
90 posts


Re: grid - cu linii colorate
 (N/A)
 oviciandrus wrote
Cine doreste exemplul pe care l-am făcut să-mi spună adresa de mail.

Adresa mea este:
ovidiudobie@yahoo.com
Multumesc mult!


Ovidiu Dobie
 8/20/2009 1:42:32 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
 oviciandrus wrote
Cine doreste exemplul pe care l-am făcut să-mi spună adresa de mail.

Normal ca il dorim... valy.maties@yahoo.com

Valy Maties - Beginner programmer
 8/20/2009 6:14:32 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
 valy.maties wrote
 oviciandrus wrote
Cine doreste exemplul pe care l-am făcut să-mi spună adresa de mail.

Normal ca il dorim... valy.maties@yahoo.com


L-am luat... M-am uitat putin prin el, il facusem aproape la fel ca al tau, l-am incercat pe al meu, am zis sa nu il stric... Nu se intampla nimic. M-am mai uitat putin prin setarile gridului tau dar pana sa imi dau seama ca la recordsourcetype aveai pus 1-Alias, imi dadea toate liniile colorate cu aceeasi culoare sau fel si fel de eroari din cauza lipsei unor obiecte din formul tau (copiasem la un moment dat tot codul formului de la tine).
Acum functioneaza cum trebuie.
Multumesc din suflet! Esti un geniu!  

Valy Maties - Beginner programmer
 8/21/2009 11:28:07 AM
User is offlineoviciandrus
761 posts
www.comptech.ro
1st




Re: grid - cu linii colorate
 (Romania) Modified By oviciandrus  on 8/21/2009 10:28:26 AM)
Multam de apreciere! Da' tu ce aveai pus pe RecordSourceType? Din câte ştiu eu valoarea 1-Alias este implicită.
 8/21/2009 12:18:22 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
 oviciandrus wrote
Multam de apreciere! Da' tu ce aveai pus pe RecordSourceType? Din câte ştiu eu valoarea 1-Alias este implicită.


Aveam pus 0-Table.

In plus acum am intampinat o problema... si stiu si de ce, dar nu stiu cum sa fac sa o remediez. Asta cred ca e din cauza Recno(). Si-anume...
Eu folosesc, ca idee, urmatorul cod pentru a trece din gridul pe care sunt in gridul 2:
Preiau valoarea celulei pe care sunt si o trec in tabela 2 care este recordsource-ul celui de-al doilea grid. Fac refresh pe al doilea grid, si schimb valoarea unui camp logic din tabela 1 in .t. adica a fost mutat, dupa care pe gridul unu in validare am pus un set filter to mutat=.f. Daca randul celulei pe care o iau este altul decat primul sau ultimul rand practic se vor alatura 2 celule cu aceleasi culori, si se vede cam nasol. Care ar fi solutia sa nu se mai intample lucrul asta... cred ca sa sterg inregistrarea care o preiau inainte sa pun tabela ca recordsource, nu?

Valy Maties - Beginner programmer
 8/21/2009 2:04:21 PM
User is offlineaflorin
838 posts
1st


Re: grid - cu linii colorate
 (N/A)
Stergerea nu te ajuta, pentru ca ea ramine acolo. Doar un PACK :( De aia RECNO() nu e o solutie fericita.
Oricum, pentru ce vrei tu sa faci, nu stiu daca "floricele" gen rinduri colorate alternativ merita munca.

Florin Aparaschivei - Iasi
 8/21/2009 9:58:04 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (N/A)
 Florin Aparaschivei wrote
Stergerea nu te ajuta, pentru ca ea ramine acolo. Doar un PACK :( De aia RECNO() nu e o solutie fericita.
Oricum, pentru ce vrei tu sa faci, nu stiu daca "floricele" gen rinduri colorate alternativ merita munca.


Eu zic ca nu e asa Florin in ceea ce priveste look-ul aplicatiei, pentru ca o aplicatie profi intotdeauna are pe langa un cod "strong" si o interfata prietenoasa. De-aia ma chinuiesc sa fac chestia asta cu gridurile si observ asa usor usor ca e un obiect destul de stufos acest grid. In ceea ce priveste delete-ul asa e, am observat ca nu mergea cu delete si am incercat versiunea cu numar par/impar in camp logic. Am reusit sa aduc la un sfarsit cu asta, in sensul ca functioneaza, una la mana ca imi pot trimite dintr-un grid in celalalt si a doua la mana pot recolora intermitent randurile din griduri. Numai ca am sesizat o chestie, si-anume daca ma misc destul de repede cu mouse-ul pe celula activa respectiv click pe butonul(anele) de transfer nu mai preia valoarea celulei bine, ia ala valoare , respectiv alta denumire de reteta si nu am inteles de ce. Folosesc in codul butonului IF-ENDIF pentru verificare daca valoarea celulei nu este cumva goala, sa nu imi introduca in al doilea grid o celula colorata fara valoare, scanez cele doua tabele pentru a verifica daca valoarea celulei din primul grid nu se afla cumva in cel de-al doilea grid. Si aici intervine buba, ca daca ma misc usor, gen jumatate de secunda intre selectarea celulei din grid si butonul de transfer nu se intampla nimic ciudat, adica se preia valoarea corecta dar daca ma misc repede, gen ma pozitionez din tastatura si sunt cu mouse-ul pe buton si dau imediat click se pare ca nu mai apuca sa citeasca valoarea celulei active. De fapt aici cred ca m-am complicat putin prin faptul ca puteam foarte frumos doar sa folosesc datele din prima tabela si in cea de-a doua tabela (ceea ce eu nu fac initial, ci le aduc pe rand cu butonul de transfer doar pe cele de care am nevoie si le pun valoarea campului logic de mutare pe .f.). Cred ca am sa incerc sa stric putin maine codul, ca acum am am ajuns acasa. Abia acum mi-a venit ideea cand scriam!

Valy Maties - Beginner programmer
 8/22/2009 6:13:04 AM
User is offlineCostel
225 posts
www.adrisoft.ro
4th




Re: grid - cu linii colorate
 (N/A)
ma pozitionez din tastatura si sunt cu mouse-ul pe buton si dau imediat click se pare ca nu mai apuca sa citeasca valoarea celulei active
in cadrul celulei la evenimentul LostFocus, myGrid.Column3.Text1.LostFocus pune urmatorul cod:
          replace AliasTabel.CimpCelula with this.Value
sint si eu patit cu acest comportament, cit despre folosirea gridurilor in aplcatie, le folosesc atit pentru prezentarea datelor cit si in machetele de introducere date. Discutia e mai veche si fiecare isi are un stil propriu de a aborda problema






Nu munci atit de mult incit sa nu-ti mai ramina timp ca sa cistigi bani. (proverb evreiesc)
 8/22/2009 1:10:07 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (N/A)
 Costel wrote
...
in cadrul celulei la evenimentul LostFocus, myGrid.Column3.Text1.LostFocus pune urmatorul cod:
          replace AliasTabel.CimpCelula with this.Value
sint si eu patit cu acest comportament, ...

 Sa vad daca am inteles: cumva tu vrei ca dupa fiecare parasire de celula sa schimb valoarea campului din tabela din recordsource cu valoarea celulei parasite? Nu cumva se va intampla sa imi schimbe valoarea cum o face in derularea foarte rapida a comenzilor? Adica sa imi puna o valoare gresita?




[/QUOTE]
Valy Maties - Beginner programmer
 8/22/2009 3:45:34 PM
User is offlineCostel
225 posts
www.adrisoft.ro
4th




Re: grid - cu linii colorate
 (N/A)
tu vrei ca dupa fiecare parasire de celula sa schimb valoarea campului din tabela din recordsource cu valoarea celulei parasite?
Da, asta vreau, de fapt asta si fac. Nu-i tocmai in ordine dar rezolva problema. Se pare ca dureaza un pic pina cind valoarea continuta in textbox ajunge si in cimpul asociat din tabela. Nu faci decit sa fortezi un pic nota. Oricum verifica daca ce iti propun si functioneaza.





Nu munci atit de mult incit sa nu-ti mai ramina timp ca sa cistigi bani. (proverb evreiesc)
 8/22/2009 5:19:08 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A) Modified By Daniel Buduru  on 8/22/2009 4:43:24 PM)
Controalele din grid (textbox, combo si orice alt control pus intr-o coloana) exista, la rulare, doar pe linia activa a gridului. Pe celalalte linii este doar desenat controlul si valoarea lui, dar nu este acelasi lucru ca atunci cind ar exiata cate un control pe fiecare linie dintr-o coloana.
Din acest motiv, se poate ca lostfocus sa nu apuce sa se declanseze daca te misti in grid pe verticala, intrucat e acelasi textbox care se muta de pe o linie pe alta.
Poti ievita asta folosind evenimentele gridului BeforeRowColChange si AfterRowColChange, impreuna cu valoarea proprietatii RowColChange in loc de textbox.lostfocus si textbox.gotfocus.

Poti pune asta in grid.BeforeRowColChange:
IF lastkey()<>7 && nu faci nimic daca s-a apasat Escape
    *!* Codul din Textbox.LostFocus
Endif

Daca folosesti un buton extern gridului pentru a selecta lina curenta, in codul acelui buton nu ai nevoie sa te referi la vreun control din grid, ci numai la cursorul afisat in grid.
Pointerul cursorului din grid.recordsource este intotdeauna pe inregistrarea curenta din grid, cea ale carei valori sunt returnate in grid.columnX.textbox.value.


Daniel Buduru
 8/24/2009 11:43:42 AM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Am incercat ce mi-ati spus voi, Costel si Daniel. Din pacate nu face altceva decat sa-mi inlocuiasca prima valoare din tabela cu valoarea celulei pe care sunt pozitionat 

Valy Maties - Beginner programmer
 8/24/2009 12:48:00 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Cred ca pe undeva nu m-am facut inteles ....
Ca sa selectezi inregistrarea curenta din grid, pui in metoda click a textbox-ului din coloana respectiva (sau din toate coloanele, daca pui AllowCellSelection=.F. si vrei sa raspunda la click in orice coloana) :

REPLACE  mutat WITH ! mutat IN (This.Parent.Parent.Recordsource) &&Acest mod de referire la cursorul din RecordSource face codul independent de alias-ul cursorului.

In metoda Click a butonului care transfera o singura linie:
Local lcSource, lcDest
lcSource=This.Parent.GridLeft.Recordsource && Unde GridLeft e gridul din stanga
lcDest=This.Parent.GridRight.Recordsource && Unde GridRight e gridul din dreapla
REPLACE mutat WITH .T. IN (lcSource) &&Poti da click pe buton fara ca inregistrarea sa fi fost marcata in prealabil


INSERT INTO (lcDest) (camp1, camp2, ... mutat ) SELECT camp1, camp2, ... .F. as mutat FROM (lcSource) ;
     WHERE mutat=.T. and campul_cheie NOT IN (SELECT campul_cheie FROM (lcDest))

Mai sunt si alte variante, cu SACTTER/ GATHER, INSERT, APPEND ...  Varianta cu SQL e independenta de selectarea cursoarelor.

Pe scurt, asta ar fi. Nu e nevoie sa te referi la textbox.value.





Daniel Buduru
 8/24/2009 12:53:59 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Cred ca pe undeva nu m-am facut inteles ....
Ca sa selectezi inregistrarea curenta din grid, pui in metoda click a textbox-ului din coloana respectiva (sau din toate coloanele, daca pui AllowCellSelection=.F. si vrei sa raspunda la click in orice coloana) :

REPLACE  mutat WITH ! mutat IN (This.Parent.Parent.Recordsource) &&Acest mod de referire la cursorul din RecordSource face codul independent de alias-ul cursorului.

In metoda Click a butonului care transfera o singura linie:
Local lcSource, lcDest
lcSource=This.Parent.GridLeft.Recordsource && Unde GridLeft e gridul din stanga
lcDest=This.Parent.GridRight.Recordsource && Unde GridRight e gridul din dreapla
REPLACE mutat WITH .T. IN (lcSource) &&Poti da click pe buton fara ca inregistrarea sa fi fost marcata in prealabil


INSERT INTO (lcDest) (camp1, camp2, ... mutat ) SELECT camp1, camp2, ... .F. as mutat FROM (lcSource) ;
     WHERE mutat=.T. and campul_cheie NOT IN (SELECT campul_cheie FROM (lcDest))

Mai sunt si alte variante, cu SCATTER/ GATHER, INSERT, APPEND ...  Varianta cu SQL e independenta de selectarea cursoarelor.

Pe scurt, asta ar fi. Nu e nevoie sa te referi la textbox.value.


Daniel Buduru
 8/24/2009 4:19:43 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Daniel, nu stiu daca functioneaza (e posibil sa fi gresit eu ceva), ia incearca la tine , trimite in stanga apoi inapoi in dreapta, joaca-te putin cu acest cod cu cateva inregistrari intre cele 2 griduri apoi cu toate inregistrarile intre cele 2 griduri. La un moment dat a inceput sa-mi "manance" serios din inregistrari.

Valy Maties - Beginner programmer
 8/24/2009 5:27:37 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Daca iti "mananca" din inregistrari e ceva incorect in algoritm, nu in modul de adresare.
Cum faci trecerea din dreapta in stanga?
Trecera din stanga in dreapta, cu inserare in cursorul din dreapta, e simpla, prin orice procedeu o faci, dar algoritmul nu e reversibil. Ca sa treci inapoi, din dreapta in stanga, nu mai poti folosi acelasi algoritm.
Daca ai folosi liste in loc de griduri, lucrurule ar fi mult mai simple, si e solutia preferabila in cazul unui numar mic de linii, cum ar fi selectarea unor campuri pentru export. Inregistrarile se trec dintr-o lista in alta cu List.AddItem si List.RemoveItem. Asta insa functioneaza doar in cazul listeli populate cu AddItem, nu si in cazul in care lista este populata dintr-un cursor.
Lista nu se poate colora alternativ, dar are suport pentru selectie multipla si pentru reordonarea liniilor.
In cazul in care lucrezi cu griduri, ai doua alternative:
- filtru pe inregistrari
- popularea gridului cu o comanda select, care pune inregistrarile in ordine.
Prima varianta e relativ mai simplu de implementat, dar cu probleme majore la selectia multipla, a doua arata mai bine, implementarea selectiei multiple e mai simpla, dar e ceva mai complicat de coordonat.
Si la prima varianta sunt cateva alternative, dar ma opresc la cea pe care ai adoptat-o
Ai doua cursoare, crsSursa si crsDest, care au un camp_cheie si un camp de filtru, selectat.
In cursorul crsSursa pui filtru pe selectat=.f., iar in crsDest pe selectat=.t.
Nu ma opresc la selectia multipla, o vei implementa daca doresti.
Mai ai 4 butoane intre griduri, am sa le numesc cmdMoveAll, cmdMoveOne - aceste butoane muta din stanga in dreapta, cmdRemoveAll, cmdRemoveOne - muta din dreapta in stanga.
La click pe o linie din grid, fie cel din stanga, fie cel din dreapta, schimbi starea campului selectat.
Aici apare o problema: inregistrarea selectata nu mai corespunde filtrului. Daca muti pointerul in cursor, inregistrarea dispare. Asta se intampla in cazul selectiei multiple, sau, daca mai faci click pe alta linie din grid inainte de a apasa butonul corespunzator.
Ca sa eviti asta, fie renunti la selectia multipla, fie renunti la filtru si doar schimbi culoarea liniilor selectate...
E mai simplu sa renunti la selectia multipla, cel putin ain faza asta.
Asta inseamna ca nu mai schimbi starea cmpului de filtru la click pe linia din grid.
In schimb, la dublu click, executi codul de la butonul MoveOne:
Deci, in grid.Column1,textbox.Dblclick pui:
this.parent.parent.parent.cmdMoveOne.Click
Daca ai mai multe coloane in grid si vrei sa raspunda la dublu click in oricare din ele, pui codul in metoda DblClick a controlului curect din fiecare coloana.
La fel si in gridul din dreapta, doar ca acolo apelezi metoda cmdRemoveOne.

Ce pui acum in cmdMoveOne.Click
   LOCAL lcID, lnArea
   lnArea=SELECT()
   lcID=crsSursa.camp_cheie
   UPDATE crsDest SET selectat=.T. WHERE camp_cheie=lcID
   INSERT INTO crsDest (camp_cheie, selectat) SELECT camp_cheie, .T. ;
       FROM crsSursa WHERE crsSursa.camp_cheie=lcID and crsSursa.camp_cheie NOT IN (SELECT camp_cheie from crsDest)
  UPDATE crsSursa SET selectat=.T. WHERE camp_cheie=lcID
  SELECT crsSursa
  LOCATE    &&LOCATE fara argument muta pointerul daca inregistrarea curenta nu satisface conditia de filtru
 SELECT crsDest
 LOCATE
This.Parent.grdSursa.Refresh
This.Parent.grdDest.Refresh
SELECT (lnArea)
 
Acelasi lucru in cmdRemoveOne.click, dar schimband sensul:

   LOCAL lcID, lnArea
   lnArea=SELECT()
   UPDATE crsDest SET selectat=.T.
   INSERT INTO crssa (camp_cheie, selectat) SELECT camp_cheie, .T. ;
       FROM crsDest WHERE crsDest.camp_cheie=lcID and crsDest.camp_cheie NOT IN (SELECT camp_cheie from crsSursa)
  UPDATE crsDest SET selectat=.F. WHERE camp_cheie=lcID
  SELECT crsSursa
  LOCATE    &&LOCATE fara argument muta pointerul daca inregistrarea curenta nu satisface conditia de filtru
 SELECT crsDest
 LOCATE
This.Parent.grdSursa.Refresh
This.Parent.grdDest.Refresh
SELECT (lnArea)

Pentru MoveAll:
  LOCAL lnArea
   lnArea=SELECT()
    UPDATE crsDest SET selectat=.t.
   INSERT INTO crsDest (camp_cheie, selectat) SELECT camp_cheie, .T. ;
       FROM crsSursa WHERE crsSursa.camp_cheie NOT IN (SELECT camp_cheie from crsDest)
  UPDATE crsSursa SET selectat=.T.
  SELECT crsSursa
  LOCATE    &&LOCATE fara argument muta pointerul daca inregistrarea curenta nu satisface conditia de filtru
 SELECT crsDest
 LOCATE
This.Parent.grdSursa.Refresh
This.Parent.grdDest.Refresh
SELECT (lnArea)

Pentru RemoveAll:
  LOCAL lnArea
   lnArea=SELECT()
    UPDATE crsDest SET selectat=.F.
    INSERT INTO crsSursa (camp_cheie, selectat) SELECT camp_cheie, .F. ;
       FROM crsDest WHERE crsDest.camp_cheie NOT IN (SELECT camp_cheie from crsSursa)
  UPDATE crsSursa SET selectat=.F.
  SELECT crsSursa
  LOCATE    &&LOCATE fara argument muta pointerul daca inregistrarea curenta nu satisface conditia de filtru
 SELECT crsDest
 LOCATE
This.Parent.grdSursa.Refresh
This.Parent.grdDest.Refresh
SELECT (lnArea)

Cam asta ar fi codul, care s-ar putea sa contina si erori de tastare :)


Daniel Buduru
 8/24/2009 6:07:31 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
O sa incerc... Pare destul de interesant, si e facut mai mult in comenzi sql din cate se vede! Merci mult!

Valy Maties - Beginner programmer
 8/25/2009 11:40:33 AM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Sorry Daniel,am incercat si se pare ca dupa mai multe transferuri din stanga in dreapta si invers crapa, in sensul ca mut reteta din dreapta in stanga, imi dispare din gridul doi dar nu apare in gridul unu. Undeva "se pierde in spatiu" si n-am sa inteleg de ce si nu mai pot spune ca e din cauza vitezei de executie ca nu e asa, se intampla si daca se executa lent tranzactiile.

Valy Maties - Beginner programmer
 8/25/2009 12:11:55 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Ai dreptate. Codul l-am scris direct pe forum, si m-am intrerupt de nenumarate ori inainte de a-l termina, asa ca erau mari sansse sa aiba ceva scapari.
Codul este acelasi la miscarea in ambele sensuri, schimbandu-se doar numele cursoarelor si starea campului "selectat".

Uita aici codul corect pentru cmdRemoveOne.Click (l-am scris in aceleasi conditii, deci ...) :

   LOCAL lcID, lnArea
   lnArea=SELECT()
   lcID=crsDest.camp_cheie
   UPDATE crsSursa SET selectat=.F. WHERE camp_cheie=lcID
   INSERT INTO crsSursa (camp_cheie, selectat) SELECT camp_cheie, .F. ;
       FROM crsDest WHERE crsDest.camp_cheie=lcID and crsDest.camp_cheie NOT IN (SELECT camp_cheie from crsSursa)
  UPDATE crsDest SET selectat=.F. WHERE camp_cheie=lcID
  SELECT crsSursa
  LOCATE    &&LOCATE fara argument muta pointerul daca inregistrarea curenta nu satisface conditia de filtru
 SELECT crsDest
 LOCATE
This.Parent.grdSursa.Refresh
This.Parent.grdDest.Refresh
SELECT (lnArea)


Daniel Buduru
 8/25/2009 12:16:58 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Mi-am dat seama de "lipsa de cod" si de schimbarea de filtru in schimb ti-am spus ce se intampla... Incearca si tu , fa o proba si muta inregistrarile intre tabele, joaca-te putin cu acest cod. Daca nu ti se intampla ce mi se intampla mie inseamna ca problema e de la mine. Ideea e ca nu intotdeauna se intampla sa-si piarda "memoria" si ti-am spus ca nu gasesc cauza.

Valy Maties - Beginner programmer
 8/25/2009 12:25:31 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Desi nu la mover, folosesc frecvent un  astfel de cod.
Daca as avea mai mult timp, l-as testa chiar pe acesta. Din pacate, nu am acest timp, cel putin nu acum.
Ai incercat si codul din postul precedent si tot nu merge?


Daniel Buduru
 8/25/2009 2:36:40 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Daniel, am scris mai sus ca imi dadusem seama de lipsa de cod... Ce sa zic?! El functioneaza partial, adica , trimiti dinstr-un grid intr-altul dar cateodata isi "pierde memoria", sa zic asa, in sensul ca la trecerea dintr-un grid in celalalt dispare campul sin gridul sursa dar nu mai apare in gridul destinatie. Si nu inteleg de ce se intampla asa, pentru ca ma uit in tabela si vad ca acel camp logic este completat ok pentru vizualizare. E ca si cum ar sari peste refresh.

Valy Maties - Beginner programmer
 8/25/2009 2:43:38 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Daca e ok in tabela dar nu este afisat poate fi vorba de refresh. Totusi, fara codul tau complet, mi-e greu sa zic unde este.
1. Ce se intampla la mutarea completa? Functioneaza?
2. introdu un cod de pozitionare pe inregistrarea transferata:
Ex:
Select crsSursa
Locate For camp_cheie=lcID
grdSursa.refresh




Daniel Buduru
 8/25/2009 3:52:59 PM
User is offlineaflorin
838 posts
1st


Re: grid - cu linii colorate
 (N/A)
Daca folosesti filtre pe cele doua tabele, vezi sa nu fie de la filtre. Stiu ca VFP se comporta ciudat cu comanda SET FILTER, mai ales cind adaugi noi inregistrari.

Florin Aparaschivei - Iasi
 8/25/2009 4:19:40 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (United Kingdom)
Florin sa stii ca mi-au mai spus cativa de comportamentul asta ciudat al comenzii "SET FILTER". Am incercat sa iau filtrul in fel si fel de situatii, adica am incercat odata in refreshul gridului inainte de a pune filtru (ca de pus trebuie sa pun, asta e) am incercat apoi pe butonul de transfer si l-am luat din refresh - in cazul asta nu mai facea deloc filtru, vedeam toate inregistrarile...

Valy Maties - Beginner programmer
 8/25/2009 4:24:10 PM
User is offlineaflorin
838 posts
1st


Re: grid - cu linii colorate
 (N/A)
Incearca atunci secventa asta de pasi atunci cind vrei sa transferi un item:
1. ridici filtrul
2. adaugi noul item
3. pui filtrul
4. bagi un GO TOP
5. te pozitionezi pe inregistrarea nou adaugata (ultima, daca nu ai index, sau folosesti un LOCATE, sau ce alta metoda vrei)
6. grid.refresh()

Florin Aparaschivei - Iasi
 8/25/2009 5:41:39 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
Mi-am facut timp sa fac un sample. Ti l-am trimis pe mail.
Nu apare problema semnalata, oricate transferuri am facut.

Daniel Buduru
 8/25/2009 9:59:37 PM
User is offlinevaly.m
220 posts
4th


Re: grid - cu linii colorate
 (N/A)
Mersi mult Daniel, dar cred ca ai uitat sa dai atach

Valy Maties - Beginner programmer
 8/27/2009 2:46:43 PM
User is offlineOvidiu Dobie
90 posts


Re: grid - cu linii colorate
 (N/A)
 aflorin wrote
Incearca atunci secventa asta de pasi atunci cind vrei sa transferi un item:
1. ridici filtrul
2. adaugi noul item
3. pui filtrul
4. bagi un GO TOP
5. te pozitionezi pe inregistrarea nou adaugata (ultima, daca nu ai index, sau folosesti un LOCATE, sau ce alta metoda vrei)
6. grid.refresh()

si eu am lucrat in acest stil si cand faceam pct.4 si 5 ma simteam aiurea, pentru ca credeam ca nu e elegant asa... :) dar se pare ca chiar nu exista alta alternativa.. sau?

Ovidiu Dobie
 8/27/2009 4:15:27 PM
User is offlineDaniel Buduru
2133 posts
1st




Re: grid - cu linii colorate
 (N/A)
E nu m-am lovit de asta, si am pus intotdeauna filtrele ca codul pe care l-am postat mai sus.
Nu e nevoie sa ridici filtrul daca nu cauti o inregistrare care nu e cuprinsa in filtru.
Dupa actualizarea cursorului (insert, delete, update care afecteaza campurile incluse in filtru) e nevoie de mutarea pointerului in cursor pentru activarea filtrului.
Se poate face cu GO, LOCATE FOR sau LOCATE fara argument.

Uneori insa, gridul in care se afiseaza un cursor filtrat are probleme. Am intalnit situatii repetabile, in care gridul ramane gol dupa o modificare a cursorului.
In acest caz, a functionat asta:
grid.recordsource=grid.recordsource




Daniel Buduru
 8/27/2009 4:27:35 PM
User is offlineOvidiu Dobie
90 posts


Re: grid - cu linii colorate
 (N/A)
 Daniel Buduru wrote
Am intalnit situatii repetabile, in care gridul ramane gol dupa o modificare a cursorului.
In acest caz, a functionat asta:
grid.recordsource=grid.recordsource

asta trebuie sa testez si eu .. ca am avut si eu parte de "golirea gridului" :)

Ovidiu Dobie
  Visual FoxPro  Form-uri si generatoare de form-uri  grid - cu linii...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement