Avatar billede rasmuzzen Nybegynder
30. november 2010 - 12:57 Der 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.
Avatar billede jokkejensen Novice
30. november 2010 - 17:37 #1
Du skal ligge det i page_load, den afvikles dog også ved postback, så:

if(!Page.IsPostBack)
{
// Dette køres kun en gang for hvert request, altså kode der ikke skal afvikles ved postback's
}
Avatar billede rasmuzzen Nybegynder
30. november 2010 - 17:49 #2
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.
Avatar billede neoman Novice
30. november 2010 - 19:35 #3
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.
Avatar billede rasmuzzen Nybegynder
01. december 2010 - 10:08 #4
Ja præcis, hønen før ægget.

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.

MVH
Avatar billede neoman Novice
01. december 2010 - 10:30 #5
Det er år og dag siden jeg har kodet det, men jeg fandt lige en kodestump som jeg kørte i PageLoad:

If Request.Form.ToString.Contains("btnReqHdn") Or Request.Form("__EVENTTARGET").ToString.Contains("btnReqHdn")Then ...

Der bør du kunne finde din knap. Jeg kan ikke helt huske hvad forskellen var mellem de to - måske kan en anden hjælpe?
Avatar billede neoman Novice
01. december 2010 - 10:35 #6
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")


osv osv.
Avatar billede rasmuzzen Nybegynder
01. december 2010 - 11:12 #7
Tak, jeg prøver dette eventtarget i morgen.
Avatar billede rasmuzzen Nybegynder
23. december 2010 - 11:37 #8
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.

Nogen ider.
Avatar billede rasmuzzen Nybegynder
11. marts 2011 - 10:30 #9
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.
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