30. november 2010 - 12:57Der er
8 kommentarer og 1 løsning
Dynamiske controller og events
Opgave, skal lave et skema/kalender.
I toppen af denne skal der være 2 knapper (+/- måned frem tilbage).
I en dynamisk tabel/celler... laves ca. 270 dynamiske knapper. Virker fint (eventer) når de initialiseres/skabes i page_init.
Problem, når der trykkes en måned frem køres page_init først, og derefter køres knappen "måned +/-"'s kode.
Koden for at vi skal en måned frem eller tilbage kommer altså for sent. Hvis jeg bruger funktionen i knappen måned +/- til at tegne en ny tabel med alt, virker det perfekt, visuelt, men de 270 knapper eventer så ikke mere, da der skal tildeles events i page_init, for at dynamiske kontroller virker.
Hønen og ægget.
Jeg programmerer som regel windows forms, og her har jeg ikke sådan noget at slås med syntes jeg.
Er du sikker på at man kan tildele eks. et click event,så det virker i page_load, jeg har kun virkende kode ved at sætte opbygningen i page_init. Det er også hvad mange andre sider skriver.
Jeg er efterhånden ovre i at : Lave 31 dage i tabellen, rette dagenes navne ved at løbe kontroller igennem, sætte dage/rows der ikke er i måneden visible=false.
Dynamiske kontroller skal genetableres ved HVER postback, så etableringen skal netop ISÆR køre If Page.IsPostback!
Og jo - det seneste event hvor man kan gifte kontroller med deres handlers er PageLoad. Det er sjælden det ikke fungerer der.
Du skal etablere din kalender i PageLoad på basis af en parameter som enten er gemt på websiden i et usynligt felt, eller i Session eller i Viewstate - denne kan du ændre på basis af hvilken knap der blev trykket på. Men når du kommer til PageLoad, så er koden for knappens EventHandler endnu ikke kørt. Men du kan finde ud af hvilken knap der triggede postback, og så opdatere din kalender i PageLoad.
Alt det her gylle skal du igennem, fordi systemet er et fire-and-forget client-server system: når siden er sendt fra serveren til klienten, så glemmer systemet ALT om den.
Jeg får det ikke til at evente via page_load, kun page_init (måske det er mig der gør et eller andet galt).
Har set på nettet, at hvis man opretter kontrollerne med samme id, så arves eventet, det har jeg ikke prøvet.
neoman, har du et code snip af hvordan jeg allerede i page_init kan checke hvilken knap der blev trykket på, for det vil løse mit problem. Måned +/- er ikke link knapper, så jeg mener ikke jeg kan lave et request.querystring.
Mit projekt kører i øvrigt i DotNetNuke, det er et af en masse moduler jeg sidder og koder om fra std. asp. I std. asp havde jeg ingen problemer med "høns og æg", pga. kodningen, en kodning jeg kan ikke lave på samme måde.
Og jeg havde vist også en kaldenderfunktion: If Not Page.IsPostBack Then If IsNothing(Session("MyVisDate")) Then MyVisDate = Now Session("MyVisDate") = MyVisDate.Date txtVisDate.Text = MyVisDate.ToString("dd/MM/yyyy") End If end if
hvor jeg så gemmer en dato i Session og derpå: If Page.IsPostBack Then Session("MyVisDate") = CDate(txtVisDate.Text) If Request.Form.ToString.Contains("lnkNextPeriod") Then MyVisDate = CType(Session("NextDate"), DateTime) Session("MyVisDate") = MyVisDate txtVisDate.Text = MyVisDate.ToString("dd/MM/yyyy")
Jeg drejer lige spørgsmålet. Hvordan ville du løse opgaven.
Krav. 2xknap <- måned frem tilbage i toppen ->
En hulens masse knapper med perioder, der placeres i en tabel med celler, celle baggrundfarve afhængig af status for om materiellet er ledigt eller ej.
Når der trykkes på en knap skal baggrunden i cellen skifte farve, og data lagres. Alt omkring data lagring kan jeg sagtens finde ud af. Det er flowet der stadig går galt. Kan ikke se mig ud af opbygning af skema ift. flowet og events.
Det støjer sådan hver søndag i min postkasse, så jeg lukker lige.
Jeg har tænkt det ud på en anden måde, med en kalenderfunktion i toppen og knapper med events fra starten når siden laves. Jeg gemmer så de dage (29-30-31) der ikke er i den valgte måned.
Synes godt om
Ny brugerNybegynder
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.