17. august 2006 - 15:19Der er
33 kommentarer og 1 løsning
Gendanne dataundhold af en brugerkontrol efter kald af anden
Jeg har en .aspx side med en brugerkontrol 1 på. Brugeren kan i brugerkontrol 1 lave søgninger, få en liste i et datagrid og få detailoplysninger om hver enkelt linie.
Jeg har så lavet det sådan, at man baseret på sin selektion i datagriddet fx. kan lave et attachment til denne linie og det gør jeg ved at kalde brugerkontrol 2 som jeg så putter i placeholderen på .aspx siden.
Mit problem er nu hvordan jeg vender tilbage til brugerkontrol 1 siden med de data der var der, da brugerkontrol 2 blev loadet. Jeg har prøvet med Response.ReDirect(.aspx) og så få den til at loade brugerkontrol 1 baseret på querystring, men det får jeg jo kun starttilstanden ud af. Er der en måde at gøre det på?
Visible true/false er en nem løsning.... Så har du sådan set kontrollen i kontroltræet på serveren, den bliver bare kun vist når du sætter den visible. Mvh
Du kan gøre det direkte på kontrollen ... Du behøver ikke en placecholder for det, men som udgangspunkt må du gøre den container usynlig som indeholder det indhold der ikke skal kunne ses. Mvh
Ok - det har jeg gjort i .aspx filen nu, så jeg loader kontrollerne ved page load og kun første gang. Samtidig tænder jeg for den ene kontrol. Men det, jeg gerne vil gøre er, at have en knap på brugerkontrol 1 og en knap på brugerkontrol 2. Knappen på brugerkontrol 1 skal slukke sig selv (kan det overhovedet lade sig gøre) og tænde brugerkontrol 2. Knappen på brugerkontrol 2 skal også slukke sig selv og tænde brugerkontrol 1. Men når jeg går ind på de to knapper på brugerkontrollerne, så kender de ikke c. - er der en måde at gøre dem kendte på?
Hvordan kan man caste til en kontrol? Hvordan skal det bruges?
Jeg kan se, at man faktisk godt kan slukke brugerkontrol 1 fra sig selv, men hvordan man får gjort brugerkontrol 2 synlig, kan jeg stadig ikke finde ud af - kan du mon hjælpe med det?
Det er bestemt ikke fordi det ikke kan lade sig gøre, men som udgangspunkt synes jeg du skal sigte imod at din side står for synkroniseringen mellem de to kontroller - f.eks. ved at kontrol 1 hæver et event når der trykkes (eller hvad der nu sker). Eventet bliver så samlet op af din side, som så gør hvad der skal gøres på kontrol 2. Mvh
Du skal kode det ... Hvis din kontrol bk-1 har noget klogt at berette for den del af omverdenen der gider at lytter - definerer du et event på den. På siden abbonnerer du så på det event, og gør noget ved det der skal gøres noget ved. Ligesom alle de andre kontroller du arbejder med (klik-eventet på en knap f.eks.). Mvh
public class SomeClass { public event EventHandler SomeEvent; }
fra din side kan du så abbonere på evented med:
SomeClass c = new SomeClass(); c.SomeEvent += new EventHandler(SomeHandler);
og så en handler: void SomeHandler(object sender, EventArgs e) { // her kan du så gøre noget. }
I ovenstående bliver eventet aldrig hævet... Men hvis klassen nu havde være din kontrol - hvor du har en knap på, og hvor du i forvejen har en handler der håndterer knaptrykket , kan du i den handler:
Well... Eventet skal du definere på din usercontrol (så ikke rigtig inden for noget af det du har sendt) - og også koden til at hæve det. Du abbonnerer på eventet der hvor du loader kontrollen - som du så bliver nødt til at betragte som en særlig kontrol.
// såhh... det her skal altså være på din side BK-1 bk1 = LoadControl("...") as Bk1; bk1.SomeEvent += new EventHandler(SomeHandler);
// og handleren - ligeså på din side void SomeHandler(object sender, EventArgs e) { // her kan du så gøre ting og sager. }
Kan du give mig en mailadresse jeg kan sende et projekt til.... Så kan du lige se strukturen - godt nok C#, men det skulle nok kunne give dig et billede af det. Mvh
Compileren kan åbenbart ikke se klasserne .... har du måske ikke fået inkluderet de namespaces de ligger i? (post eventuelt dine klasser - og placeringen af dem i projektet). Mvh
Jeg har inkluderet det samme som i dit eksempel. Hvis jeg ser i msdn under SelectionChangedEventHandler, så refererer det til namespacet System.Windows.Controls, men hvis jeg skriver Imports System.Windows.Controls, så sættes grøn bølgestreg under og den giver meldingen:
Namepace or type specified in the Imports 'System.Windows.Controls' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member.
Du skal ikke bruge windows namespaces... Filen DelegatesAndArguments indeholder et eventargument og en delegate. I den løsning jeg har sendt dig ligger filen i folderen App_Code. Har du min messenger konto - så kan du lige skrive til mig dig... Ellers læg din messenger konto herude, så fanger jeg dig. Mvh
Jeg har lavet dette på en anden måde, så jeg vil godt lige sætte denne på 'stand-by' - jeg vender tilbage senere, da jeg gerne vil være lidt klogere på håndtering af events.
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.