Avatar billede Kim Neesgaard Seniormester
17. august 2006 - 15:19 Der 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å?
Avatar billede Kim Neesgaard Seniormester
17. august 2006 - 15:35 #1
Kan man bruge placeholder.Visible på en eller anden måde?
Avatar billede snepnet Nybegynder
17. august 2006 - 22:57 #2
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
Avatar billede Kim Neesgaard Seniormester
18. august 2006 - 10:27 #3
Det er vel placeholderen med brugerkontrollen i, at man sætter til ikke visible? Skal hver brugerkontrol i så fald have hver sin placeholder?
Avatar billede snepnet Nybegynder
18. august 2006 - 11:08 #4
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
Avatar billede Kim Neesgaard Seniormester
18. august 2006 - 12:53 #5
Jeg bruger en placeholder pt. til at vise de forskellige brugerkontroller i - kan man undvære placeholderen?

Jeg loader brugerkontrollen således:

ph.Controls.Add(LoadControl("Tasks.ascx"))

Hvad ville man skulle skrive for at gøre den usynlig?
Avatar billede snepnet Nybegynder
18. august 2006 - 13:40 #6
Du kan hapse en reference til den:
Control c = LoadControl(...);
c.Visible = ...

Du kan selv caste til din specifikke kontrol - eller til en UserControl hvis du vil.

Mvh
Avatar billede Kim Neesgaard Seniormester
20. august 2006 - 16:08 #7
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?
Avatar billede Kim Neesgaard Seniormester
21. august 2006 - 13:30 #8
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?
Avatar billede snepnet Nybegynder
21. august 2006 - 16:57 #9
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
Avatar billede Kim Neesgaard Seniormester
21. august 2006 - 18:01 #10
Hvordan vil man gøre dette i praksis? Jeg har lavet et test-setup og har på min .aspx side

Dim c1 As Control = LoadControl("BK-1.ascx")
Dim c2 As Control = LoadControl("BK-2.ascx")

og så de to .ascx med et testindhold og en knap til at skifte med.
Avatar billede snepnet Nybegynder
21. august 2006 - 18:39 #11
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
Avatar billede Kim Neesgaard Seniormester
21. august 2006 - 20:05 #12
Kan du mon give et eksempel? Jeg er ikke helt klar på, hvordan dette skal gribes an....!!
Avatar billede snepnet Nybegynder
21. august 2006 - 20:14 #13
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:

if(SomeEvent != null)
{
  SomeEvent(this, EventArgs.Empty);
}

Det er et minimumseksempel, og næppe egnet til produktion, men du kan jo lige se om du kan få det op at køre.

Mvh
Avatar billede Kim Neesgaard Seniormester
21. august 2006 - 20:50 #14
Kan jeg få dig til at skrive, hvor i mit lille eksempel, at de 4 kodestumper skal stå?
Avatar billede snepnet Nybegynder
21. august 2006 - 20:58 #15
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.
}

Mvh
Avatar billede Kim Neesgaard Seniormester
22. august 2006 - 12:14 #16
Det er godt nok indviklet, men jeg prøver!!

Jeg har nu lavet en klasse SomeClass.vb og i den står der:

Public Class SomeClass
Inherits System.ComponentModel.Component
Public Event SomeEvent As EventHandler
End Class

I BK-1.ascx har jeg indsat:

Dim c As New SomeClass()
AddHandler c.SomeEvent, AddressOf SomeHandler

Sub SomeHandler(ByVal sender As Object, ByVal e As EventArgs)

End Sub 'SomeHandler

Den brokker sig over AddHandler: syntax error.

Hvor på BK-1 skal dette stå:

bk1 = LoadControl("BK-1.ascx")
AddHandler bk1.SomeEvent, AddressOf SomeHandler ?
Avatar billede Kim Neesgaard Seniormester
22. august 2006 - 12:31 #17
Håber du har lidt tålmodighed! Det plejer jo at dæmre tilsidst.
Avatar billede snepnet Nybegynder
22. august 2006 - 16:46 #18
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
Avatar billede Kim Neesgaard Seniormester
22. august 2006 - 18:06 #19
Du får min hotmail: sletH551225@hotmail.comslet.
Avatar billede Kim Neesgaard Seniormester
22. august 2006 - 23:17 #20
Mange tak for det! Jeg har set på det og det er lige, hvad jeg skal bruge. Konceptet er helt nyt for mig, så jeg kigger videre i morgen.
Avatar billede snepnet Nybegynder
26. august 2006 - 11:02 #21
Bare iorden :o) - håber du kan få det til at snurre.
Mvh
Avatar billede snepnet Nybegynder
26. august 2006 - 11:03 #22
(Beklager - har ikke været online i nogle dage)
Avatar billede Kim Neesgaard Seniormester
26. august 2006 - 13:21 #23
Jeg er ved at tjekke det på min egen maskine - vender tilbage i denne weekend!
Avatar billede snepnet Nybegynder
26. august 2006 - 19:52 #24
Roger :o)
Mvh
Avatar billede Kim Neesgaard Seniormester
27. august 2006 - 11:40 #25
Nu har jeg forsøgt mig med et 'rent' tilfælde, men selvom jeg synes at have angivet alt som i dit eksempel, så

1/ kender den ikke UC1 (Element UC1 is not a known element)
2/ den sætter bølgestreg under SelectionChangedEventHandler og SelectionChangedEventArgs)

Siger det dig noget om, hvor jeg har lavet fejl?
Avatar billede snepnet Nybegynder
27. august 2006 - 11:51 #26
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
Avatar billede Kim Neesgaard Seniormester
27. august 2006 - 13:34 #27
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.

?
Avatar billede snepnet Nybegynder
27. august 2006 - 14:37 #28
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
Avatar billede Kim Neesgaard Seniormester
27. august 2006 - 19:55 #29
Oups... - den havde jeg da ikke set! Jeg prøver lige selv før jeg forstyrrer dig igen!!
Avatar billede snepnet Nybegynder
27. august 2006 - 20:44 #30
Bare iorden :o)
Mvh
Avatar billede Kim Neesgaard Seniormester
01. september 2006 - 10:30 #31
Jeg vil stadig gerne lære dette, men har ikke tid før i næste uge - jeg vender tilbage!
Avatar billede Kim Neesgaard Seniormester
09. oktober 2006 - 18:07 #32
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.
Avatar billede snepnet Nybegynder
10. oktober 2006 - 14:18 #33
Roger
Avatar billede Kim Neesgaard Seniormester
04. august 2011 - 18:24 #34
Lukkes grundet alder.
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