Avatar billede jaffafo Nybegynder
26. november 2008 - 11:45 Der er 8 kommentarer og
2 løsninger

Sende flere værdier til dynamisk oprettet button

Jeg har en button som bliver oprettet dynamisk og så adder jeg en eventhandler.

Så kan jeg bruge button.CommandArgument til at sende en værdi til knappen, men jeg har brug for at kunne sende flere værdier (4 for at være helt præcis) eller endnu bedre kunne sende et object med.

Mit problem er at jeg har brug for at knappen kalder en metode som indsætter data i en database og til det skal jeg bruge de værdi som indgår i primary key.

Nogen idéer til hvordan dette kan gøres?
Avatar billede kalp Novice
26. november 2008 - 12:07 #1
Den string er vel fin nok.. du kan sende XML til den:)

<Parameters>
<Param></Param>
<Param></Param>
<Param></Param>
<Param></Param>
<Param></Param>
</Parameters>


Hvis du har arbejdet med XML før, så lyser pæren nok allerede og jeg behøver ikke uddybe nærmere:)

Ellers spørg.
Avatar billede jaffafo Nybegynder
26. november 2008 - 12:13 #2
Ja det ville virke fint, men jeg har faktisk brug for at kunne tilgå et objekt.. løsningen med de 4 værdier virker ikke alligevel..

Det er en objekt jeg nemt kan tilgå i page_load, men ikke i min button_click metode..
Avatar billede aaberg Nybegynder
26. november 2008 - 12:36 #3
Kan du forklare lidt bedre, hvad du mener med at du kan tilgå objektet i page_load, men ikke i button_click? Er det i samme postback at der er forskel på om du kan loade objektet fra page_load eller button_click? Hvordan har du referencen til objektet liggende?
Avatar billede jaffafo Nybegynder
26. november 2008 - 13:13 #4
I page_load har vi en liste af objekter som vi henter fra databasen.

Vi itererer listen med en foreach og tilføjer nogle buttons osv til en placeholder. Dvs hvis vi har 4 objekter i listen får vi 4 gange de buttons på siden.

Hver af disse buttons får en eventhandler som kalder en metode. Det er i denne metode vi vil have fat i det objekt i listen som de buttons blev lavet udfra.

Vi kan godt hente dette objekt igen fra databasen vha. kalps løsning, men dette betyder så at vi hente det samme data 2 gange fra databasen, hvilket vi vil undgå.
Avatar billede aaberg Nybegynder
26. november 2008 - 13:45 #5
Det kan gøres på 2 måder. ViewState eller Session.

Med ViewState metoden bliver objekterne serialiseret og sendt med til klienten.

Med Session metoden, bliver objekterne husket på i hukkomelsen på serveren.

Begge metoder har ulemper og fordele. Session vil gå hurtigere, da objekterne ikke skal serialiseres og sendes til klienten. Session metoden kan dog give problemer, hvis du har mange brugere, da hukommelsen på serveren bliver fyldt op. ViewState bruger ingen hukommelse på serveren, men bliver tung hvis der skal sendes mange data.

Jeg skal finde et eksempel til dig.
Avatar billede kalp Novice
26. november 2008 - 13:51 #6
Hvordan ser sådan et objekt ud?
Hvis det er et komplekst objekt vil Session være nemmest, som aaberg også nævner.
Avatar billede jaffafo Nybegynder
26. november 2008 - 13:56 #7
hvis i begge smider et svar så bliver der delt points ud :)

Takker for hjælpen
Avatar billede aaberg Nybegynder
26. november 2008 - 13:57 #8
Et eksempel på ViewState:

På din page opretter du følgende property:

protected Dictionary<string,MyClass> MyObjects
{
    get { return ViewState["MyObjects"] as Dictionary<string,string>; }
    set { ViewState["MyObjects"] = value; }
}

Når du dynamisk opretter dine knapper, skal du ikke bruge CommandArgument, men i stedet tilføje det tilhørende objekt til MyObjects. Husk at give knappen en unik ID.

MyObjecys.Add(myNewButton.ID, myObject);

på din button_click event handler, får du fat i knappens tilhørende objekt på følgende måde:

MyClass myObject = MyObjects[((Button)sender).ID];
Avatar billede kalp Novice
26. november 2008 - 13:59 #9
=)
Avatar billede aaberg Nybegynder
26. november 2008 - 14:01 #10
Session gøres på samme måde. Bare skift ViewState ud med Session.

...og et svar :-)

Bare spørg, hvis du får problemer med det.

PS. hvis det er et stort objekt der er snak om, kan det nok betale sig at hente det op fra databasen hver gang det skal bruges.
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