Avatar billede sbay Nybegynder
25. november 2003 - 08:22 Der er 11 kommentarer og
1 løsning

At lave en liste

Hejsa

Jeg vil gerne have en "liste" hvor brugeren kan indtaste data.

brugeren skal trykke på en knap ADD, hvorefter en lille form skal komme frem. her skal de indtaste f.eks. et beløb og en beskrivelse. Det vil jeg så gerne have overført til et felt på min almindelige form, som så kommer til at udgøre en liste (ved flere indtastninger).

Derefter skal de kunne trykke på EDIT eller DELETE.

Er det en større omgang?? Jeg kan ikke lige gennemskue det her fra morgenstunden. :-)
Avatar billede jogii Nybegynder
25. november 2003 - 09:09 #1
Det er da gjort før. Hvis du er ligeglad med rækkefølgen, så er ADD nemt.

En grundlæggende idé er måske at vedligeholde listen i ét felt og vise elementerne via CFD-felter. Separér kolonneelementerne med f.eks. "¤".

Når brugeren skal DEL eller EDIT skal du udpege det element som skal slettes/redigeres. Det gør jeg normal med kode der ligner nedenstående. Det er skrevet ud fra hukommelsen og ikke komplet, men jeg håber du kan se idéen med det.


REM { SLET } ;
_list := FeltDerIndeholderListe;
_sep := "¤";
_choicelist := @Left(_list);
_default := @Subset(_choicelist; 1);
_choice := @Prompt([OKCancelList]:[NoSort]; "Slet element"; "Angiv det element som skal slettes"; _default; _choicelist);
_num := @Member(_choice; _choicelist);
_max := @Elements(_list);
_before := @If(_num = 1; ""; @Subset(_list; _num-1));
_after := @If(_num = _max; ""; @Subset(_list; _max-_num));
_newlist := @Trim(_before : _after);
FIELD FeltDerIndeholderListe := _newlist;

//Jörg
Avatar billede sbay Nybegynder
25. november 2003 - 09:18 #2
Ok - jeg kan godt se det smarte i at have det hele i et felt og så vise det i CFD-felter, men du siger at ADD er nemt!

Jeg skal vel lave en lille dialogform, med de værdier jeg ønsker udfyldt. Den skal så composes når jeg trykker ADD. Men hvordan får jeg værdierne med over i mit listefelt på hovedformen??
Avatar billede jogii Nybegynder
25. november 2003 - 09:28 #3
Du skal have et modtagerfelt på formularen, som kommer til at indeholde de redigerede værdier, f.eks. "editFields".
@Dialogbox kan kaldes med en variabel der ikke tillader nye felter på formularen. Dialogboxformularen har f.eks. 3 felter, "f1", "f2", "f3" + computed feltet "editFields". Formlen er skal være:

s := "¤";
F1 +s+ F2 +s+ F3

Formlen i ADD knappen skal være noget i stil med:
@DialogBox( "editDineFelter"; [parametre]);
_list := FeltDerIndeholderListe;
FIELD FeltDerIndeholderListe := @Trim(_list : editFields);


Pas på med brugen af @Trim. Hvis dine felter må indeholde blanke elementer eller flere mellemrum vil de blive fjernet med @Trim.
Avatar billede sbay Nybegynder
25. november 2003 - 09:52 #4
ok - det opklarede vist lidt for mig - kaster mig ud i det!
Avatar billede sbay Nybegynder
25. november 2003 - 12:05 #5
Det virker rimeligt! Jeg kan godt sætte en linie ind - men når vil tilføje en til, overskriver den bare den første linie????

Kode på ADD-knappen:
@DialogBox( ".SETravelSheetDialog1"; [AutoHorzFit] : [AutoVertFit];Kvitton);
_list := FeltDerIndeholderListe;
FIELD FeltDerIndeholderListe := @Trim(_list : editFields);
Avatar billede sbay Nybegynder
25. november 2003 - 12:19 #6
Hov - ændrede lige lidt på koden!
@DialogBox( ".SETravelSheetDialog1"; [AutoHorzFit] : [AutoVertFit];Kvitton);
_list := TList;
FIELD TList := @Trim(_list : editFields);

Nu kan jeg godt sætte flere linier ind, men hver linie bliver sat ind 2 gange!

Hvordan får jeg så vist værdierne i mit felt??
jeg bruger
@left(TList,"¤")ósv, men hvordan får jeg næste linie ind???
Avatar billede sbay Nybegynder
25. november 2003 - 12:26 #7
har nu også fået fjernet dobbeltindsætning, men kan stadig ikke få vist flere værdier i feltet!!! :-(
Avatar billede sbay Nybegynder
25. november 2003 - 16:48 #8
uha så er jeg tæt på mål! Nu virker det stort set.

Lige en ting der stadig driller: Når jeg trykker på ADD anden gang, så er den lille dialogboks udfyldt med det jeg tastede ind første gang - hvordan clearer jeg det???
Avatar billede jogii Nybegynder
25. november 2003 - 19:28 #9
@DialogBox skulle kaldes med [NoNewFields] (eller lignende)
Det var det jeg mente med "variabel der ikke tillader nye felter på formularen", jeg kunne blot ikke huske hvad den hed. En anden go' parameter er [SizeToTable].

Men nu er skaden sket vedr dine indtastningsfelter på dit dokument. Slet evt. felterne med @DeleteField.
Avatar billede sbay Nybegynder
26. november 2003 - 16:55 #10
hhmmmm - hvor præcis skal jeg bruge @DeleteField. Jeg kan ikke rigtig få det til at virke.

Har kigget i hjælpen, men kan ikke lige se hvad NoNEwFields kunne hjælpe. Det er jo fra hoveddokumentet den henter data og viser dem på dialogboxen!!
Avatar billede sbay Nybegynder
26. november 2003 - 17:14 #11
Hvis jeg trykker på Cancel, sætter den sært nok også data ind i listen!

@DialogBox( ".SETravelSheetDialog1"; [AutoHorzFit] : [AutoVertFit]:[SizeToTable];Kvitton);
_list := TList;
FIELD TList := @Trim(_list : editFields);
@Command( [ViewRefreshFields] )
Avatar billede jogii Nybegynder
27. november 2003 - 08:10 #12
Vedr. [NoNewFields], så er dine indtastningsfelter fra dialogboxen blevet overført tilbage til hoveddokumentet. Når du derefter kalder dialogboxen igen, så bliver felterne overført derop igen.

Ved at anvende [NoNewFields] forhindrer du, at midlertidige felter, som indtastningsfelterne eller beregningsfelter, bliveroverført tilbage til hoveddokumentet.

Hvis du ikke anvender [NoNewFields], så kan du simulere dette ved at anvende @DeleteField. Koden nedenfor viser begge metoder

FIELD indtastning1 := @DeleteField;
FIELD indtastning2 := @DeleteField;
FIELD indtastning3 := @DeleteField;
FIELD indtastning4 := @DeleteField;
@DialogBox( ".SETravelSheetDialog1"; [AutoHorzFit] : [AutoVertFit]:[SizeToTable]: [NoNewFields];Kvitton);
_list := TList;
FIELD TList := @Trim(_list : editFields);
@Command( [ViewRefreshFields] )
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester