Avatar billede jpi Mester
06. januar 2007 - 19:11 Der er 21 kommentarer og
1 løsning

Oprette dynamiske knapper med antal gived ved click-event

Jeg har fået noget til at virke med at oprette et antal knapper dynamisk. Dette skal ske senest i Page_Load for at den tilknyttede funktion skal virke.

Nu er det bare sådan at det endelige antal af knapper der skal laves fremkommer ved button_click på en anden knap på samme side. Den værdi er først "klar til læsning" ved Page_PreRender.

Er der nogen der har et bud på hvordan man kan løse dette ?

Her er koden der laver knapperne:
For i As Integer = 0 To CInt(Label2.Text)
  b = New Button()
  b.ID = "Button " & i
  b.Text = "Knap nr. " & i
AddHandler b.Click, AddressOf DynamicButton_Click
Next i
Avatar billede dr_chaos Nybegynder
10. januar 2007 - 14:02 #1
du generer dine knapper dynamisk i onprerender i stedet for.
Avatar billede jpi Mester
11. januar 2007 - 22:00 #2
Desværre... HVis knapperne bliver lavet i prerender, så virker knappen ikke. funktionen den skal kalde bliver ikke kaldt...
Avatar billede jpi Mester
12. januar 2007 - 15:47 #4
Hvis man laver knappperne i page_load virker knapperne, men antallet af knapper der skal bruges kan jeg ikke aflæse før efter page_load...
Avatar billede dr_chaos Nybegynder
14. januar 2007 - 10:54 #5
hvordan finder du antallet af knapper ?
Avatar billede jpi Mester
15. januar 2007 - 08:41 #6
Det er et tryk på en knap på den samme side der bestemmer antallet af knapper. Der er en tilføj-knap, hvor antallet af knapper bliver en større og en slet-knap (dynamisk oprettet) hvor antallet af knapper bliver en mindre. Det er eventhandlerne på knapperne der ændrer i objektets antalknapper-egenskab. Og den egenskab er ikke ændret ved Page_load.

Jeg har dog fået det til at fungere på følgende måde:
Jeg opretter det sidst brugte antal knapper + 1 (dvs. det maksimale antal jeg skal bruge) i en skjult tabel på et tidligt stadie (page_init eller page_load). På et tidspunkt hvor antallet af knapper så er endelig kendt (fx. page_preprender) flyttes det korrekte antal knapper over på den endelige placering. Derefter slettes tabellen (hvilket nok er overflødigt da den jo alligevel er skjult). På den måde får jeg oprettet enten det præcise antal knapper jeg skal bruge eller også 2 for meget. Som så slettes.
Dette virker da jeg ved hvormange knapper jeg maksimalt skal bruge og at det kun er et par for meget. Hvis man ikke kender antallet af knapper er det straks værre, medmindre man vil oprette rigtig mange knapper for at være sikker, men det bliver ikke pænt.

Jeg synes ikke min metode er særlig pæn, men det virker ;-)
Avatar billede dr_chaos Nybegynder
15. januar 2007 - 08:49 #7
jeg vil give dig ret i din sidste kommentar :)
Jeg kan dog ikke umiddelbart se andre løsninger.

Hvad er formålet med det dynamiske antal knapper ?
Avatar billede dr_chaos Nybegynder
15. januar 2007 - 08:49 #8
Kan du evt ikke bare gemme antallet af knapper i en session eller cache ?
Avatar billede jpi Mester
15. januar 2007 - 08:59 #9
OK, her lidt mere konkret.
Det er en faktura med et antal fakturalinier.
Man opretter en fakturalinie ved at udfylde nogle felter med antal tekst og beløb g tilføjer det til fakturaen ved at trykke på tilføj-knappen.
Alle fakturalinier vises også på siden og der skal være en slet-knap ud for hver linie. Objektet faktura har så en egenskab der hedder antallinier. Når man tilføjer en linie bliver den tilføjet til objektet i event-handleren til tilføj-knappen. Dette sker efter selve fakturaen bliver vist på skærmen og derfor kommer den sidst tilkomne fakturalinie ikke med på skærmen. Omvendt når man trykker på en slet bliver linien slettet i objektet, men på skærmen bliver det sidste antal linier vist, da skærmen "skrives" inden event-handleren til slet af linie udføres.
Hvis man så vælger at "skrive" skærmen senere for at få det rigtige antal liner (og knapper) med, så virker knapperne ikke.

Håber du kan gennemskue hvad jeg mener ;-)

Mht. Session er det samme problem; antallet i Session-variablen bliver ændret for sent i forhold til hvornår jeg skal bruge oplysningen
Avatar billede dr_chaos Nybegynder
15. januar 2007 - 09:03 #10
hvorfor viser du ikke bare fakturalinierne i et gridview eller datalist som understøtter  knapper på den måde som du ønsker det ?
Avatar billede jpi Mester
15. januar 2007 - 09:08 #11
Det har du ret i, men jeg har ikke kunne få det til at virke som jeg gerne vil have det. Så ved selv at lave det har jeg fuld kontrol med det.
Avatar billede dr_chaos Nybegynder
15. januar 2007 - 09:17 #12
På hvad måde kunne du ikek få det til at virke ?
Avatar billede jpi Mester
15. januar 2007 - 10:29 #13
Jeg kunne ikke få den til at vise objekterne, uden at det skulle være koblet til databasen (som er en MySQL). Bl.a. fakturalinier skal ikke lagres i databasen, før der blivr trykket på en gem-knap.
Avatar billede dr_chaos Nybegynder
15. januar 2007 - 14:04 #14
Hvorfor ligger du ikke faktura linierne i en List<> eller arraylist og så bruger den som datasource ?
Avatar billede dr_chaos Nybegynder
16. januar 2007 - 07:49 #15
Med en List behøver du ikke at smide noget som helst i databasen og den fungerer perfekt som datasource og det bliver nemmere at overskue en den løsning du er igang med nu.
Avatar billede jpi Mester
16. januar 2007 - 07:56 #16
Jeg vil gøre et forsøg når jeg kommer får tid. Det ville unægtelig være nemmere. Er lidt hårdt spændt for, så det kan godt være jeg ikke svarer inden for de nærmeste dage, men jeg har ikke glemt det.
Avatar billede dr_chaos Nybegynder
16. januar 2007 - 08:07 #17
ok helt fint.
Avatar billede jpi Mester
11. juli 2007 - 20:04 #18
Så er jeg igang med projektet igen, og jeg har forsøgt at få det til at virke med datasource, men kan ikke helt få det til at virke efter hensigten.

Mine klasser ser således ud (meget forenklet)

Class Faktura
Private _fakturalinie as List(of Fakturalinie)

Class Fakturalinie
Private _tekst as string
Private _antalEnheder as integer
Private _prisPrEnhed as decimal

Siden hvor listen skal bruges får overført den pågældende faktura via en sessionvariable:

dim fakt as Faktura
fakt = Session("faktura")


Så er spørgsmålet hvordan det skal implementeres...

Skal objektdatasource knyttes til Faktura eller Fakturalinie ? Jeg ville mene til faktura, og så lave en funktion der returnerer en List(of ) med alle fakturalinierne. Men hvordan så med indsæt, opdater og slet af linier ?

Jeg må indrømme at jeg er lidt på bar bund, så jeg vil helst have nogle gode eksempler.
Vi kan sagtens finde ud af noget med nogle flere point... !
Avatar billede dr_chaos Nybegynder
05. august 2007 - 21:08 #19
Den skal knyttes til faktura og en metode som returnerer fakturalinie
Avatar billede jpi Mester
12. december 2007 - 09:42 #20
Tak for hjælpen. Smid et svar så får du point
Avatar billede jpi Mester
13. juni 2008 - 08:19 #21
dr_chaos: Smid et svar så du kan få point :-)
Avatar billede jpi Mester
24. april 2009 - 21:47 #22
Lukker
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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