Avatar billede agertoft Nybegynder
18. november 2004 - 19:51 Der er 17 kommentarer og
1 løsning

Opdater værdi i usercontrol efter redigering af objekt i anden

Jeg har en side, som består af flere usercontrols. Den ene usercontrol er en login-form, som når man er logget ind vil kunne se bestemt info, der er tilknyttet ens profil.

I en main-usercontrol har jeg så en form, hvor det er muligt at redigere ens profil-info. Men når man retter i denne, skal værdierne i login-usercontrolen også opdateres. Men så vidt jeg kan se, laves der kun postback på den usercontrol, man arbejder med.

Hvordan får jeg lavet postback på login usercontrolen, når der fx trykkes på en knap i main-usercontrolen? Eller er der et andet alternativ?
Avatar billede snepnet Nybegynder
18. november 2004 - 21:50 #1
Hej agertoft :o)

Hvad mener du med at der kun laves postback i den ene ? - det hele bliver postet til serveren uanset hvad du eksekverer et postback med.

Er der noget kode du har implementeret i en eller anden handler som du ikke får eksekveret som forventet ?
(Så kan eventuelt lige smide koden herud så vi kan tage en kigger).

Mvh
Avatar billede jaffafo Nybegynder
18. november 2004 - 23:53 #2
Nu ved jeg ikke hvordan du fylder dataen i controllerne i loginusercontrollen, men mit gæt er at du ikke fylder dem direkte fra databasen ved page_load.

Hvis du gør det så vil de nemlig til enhver tid repræsentere det nyeste indhold fra databasen. Og da de nemlig ikke gør det i dette tilfælde så har du lavet det på en anden måde.

Må vi lige se koden fra din login usercontrol?
Avatar billede agertoft Nybegynder
19. november 2004 - 01:13 #3
Nu fik jeg det "nogenlunde" til at virke :)

Nu kan jeg se ændringerne, så snart jeg skifter til en anden side, end den side med formen, som skal udløse, at ændringerne sker. Men jeg kan kun se ændringerne i min login-usercontrol, når jeg skifter væk fra denne side. Ændringerne bliver altså ikke opdateret, når der trykkes på min "update" knap. Hvorfor? :)
Avatar billede jaffafo Nybegynder
19. november 2004 - 01:33 #4
må vi se koden fra din page_load i login usercontrolen og den kode du eksekverer på din form?
Avatar billede agertoft Nybegynder
19. november 2004 - 02:38 #5
Page_load i min usercontrol:

private void Page_Load(object sender, System.EventArgs e)
{
  if (!IsPostBack)
  {
      if (Session["sessionUsername"].ToString() == "default")
      {
        logoutButton.Visible = false;
      }
   
      else
      {
        oDataSet.Clear();
        oDataSet = oBLPlayer.getSinglePlayersScorecard((int)Session["sessionUserId"], oDataSet);
        oDataSet = oBLPlayer.getSinglePlayer(username, password, oDataSet);

    string[] player_hcp = Tools.Tools.generateStringArrayFromColumnInDataTabel(oDataSet.Tables["SinglePlayer"], "handicap");
    string[] player_rounds = Tools.Tools.generateStringArrayFromColumnInDataTabel(oDataSet.Tables["scorecardPlayer"], "scorecardcount");
   
        userLabel.Text = "Du er logget ind som "+Session["sessionUsername"].ToString()+"";
        passLabel.Text = "Handicap: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+player_hcp[0]+ "<br>" + "Antal runder: &nbsp;"+player_rounds[0]+"";
     
      }
  }
}

Det eneste som sker i koden, jeg eksekverer i formen er, at profilen bliver opdateret i databasen med nye værdier. Én af de nye værdier er "handicap", som altså er gemt rigtigt i databasen efter update, men ikke bliver vist i ovenstående usercontrol.
Avatar billede jaffafo Nybegynder
19. november 2004 - 02:57 #6
jeg kan se du henter det fra en session.  Når du redigerer i en profil.. opdaterer du så sessionen?
Avatar billede snepnet Nybegynder
19. november 2004 - 08:04 #7
i den kode du har sendt, opdateres der ikke noget i forbindelse med et postback (så ændringerne vil du ikke kunne se før du forlader siden, og går ind på den igen).... du må enten hente (og vise) værdierne hvergang - eller også skal du have en mekanisme der sikrer kontrollen opdateres fra basen når det er nødvendigt.
mvh
Avatar billede agertoft Nybegynder
19. november 2004 - 19:59 #8
jaffafo, nej jeg opdaterer ikke session, men derimod player_hcp[0], som er forbundet med sessionvariablen.

snepnet, koden giver samme resultat, hvis jeg fjerner if(!IsPostBack) betingelsen. Og det er vel sådan jeg havde forestillet mig at hente og vise værdierne hver gang, men det virker ikke.

Ved du, hvordan jeg får det til at virke, eller hvordan jeg får opdateret denne control?
Avatar billede snepnet Nybegynder
20. november 2004 - 23:31 #9
Hej agertoft :o)

normal databindingsmønster er :

// i page_load
if(!IsPostBack)
  >>kald til databindingsmetode

og i handlere hvor der laves ændringer i datagrundlaget, afslutter du med
  >>kald til databindingsmetode

og du har så en databindingsmetode
  >>hent data
  >>påtryk data hvor det skal påtrykkes.

du får svært ved at gøre det på en anden måde uden at løbe ind i diverse problemer af den ene eller anden art, så jeg vil foreslå at du prøver at bygge det op sådan.

mvh
Avatar billede snepnet Nybegynder
20. november 2004 - 23:40 #10
jeg forstår ikke helt hvad du skriver med at det var sådan du havde tænkt dig at hente og vise værdierne hver gang... altså det du skriver i forbindelse med IsPostBack.
IsPostBack vil være false når brugeren kommer ind på siden - og true efterfølgende med mindre du laver et redirect - så hvordan hænger det sammen med at hente og vise værdierne hver gang ?

men bortset fra det.... f.eks. denne :
userLabel.Text = "Du er logget ind som "+Session["sessionUsername"].ToString()+"";

er et eksempel på hvad du skal ske i forbindelse med databinding, og hvis du sætter session-variablen i en eventhandler på din form, vil det give det du beskriver.
eventhandleren på formen vil altid eksekvere efter page_load på din kontrol.

hvis du har brug for - fra din form - at opdatere din kontrol, kan du sørge for at lave dig en public medtode (Refresh()), der sørger for at gøre det nødvendige omkring opdatering.
metoden kan du så kalde fra en eventhandler på din form.

mvh
Avatar billede agertoft Nybegynder
22. november 2004 - 13:44 #11
Jeg tror ikke helt jeg er med. Jeg har nok ikke forklaret mig godt nok. Nu er min eksamen godtnok vel overstået, så jeg vil smide eksemplet ud til dig:

http://beta.scorekort.dk/

Her kan du logge ind med brugernavn ss og password ss. Du vil nu se, at handicappet er registreret til 11,7. Går du ind i "Min profil" og retter handicappet til fx 11,8, vil det først bliver opdateret i "Brugeroplysninger", når der skiftes side - og altså ikke allerede ved tryk på "Opdater" knappen.

Hvordan fixer jeg dette? Jeg blev vist tabt i din sidste kommentar :-/
Avatar billede agertoft Nybegynder
13. maj 2005 - 11:53 #12
Hvis der stadig bliver abonneret på dette spørgsmål er det stadig åbent :) Hvis I klikker jer ind på ovenstående side og logger ind og derefter ændrer handicap i "Min profil", så vil I se, at profilen bliver opdateret, men usercontrolen med login-information opdaterer ikke handicap værdien før der bliver lavet postback én gang til. Dvs at det, som sørger for at opdatere handicap-værdien ikke ligger i

if (!IsPostBack)

men så burde den jo opdatere værdien lige efter, at der er trykket på "opdater" og ikke ved det efterfølgende postback. Hvordan kan det være?
Avatar billede snepnet Nybegynder
13. maj 2005 - 23:53 #13
hej agertoft :o)

det er vel stadig bare et spørgsmål om at du ikke opdaterer din menuoplysninger med de nye tal der er gemt.

jeg vil tro at dit scenarie er, at du f.eks. i page_load sørger for at hente de oplysninger du skal bruge for at vise handikappet i menuen.
når page_load er kørt på den form hvor menuen sidder, vil page_load køre i din kontrol, og derefter vil eventhandleren for klikeventet på knappen køre, hvilket gør at oplysnigerne opdateres i din kontrol.
men ... på det tidspunkt er menuen sikkert bygget op, og vil derfor vise gamle oplysninger.

den meste hensigtsmæssige måde at fikse det på er, at du sørger for at din kontrol kan fortælle dig at den er opdateret, og det event samler du så op på din form.
når eventet fyres, sørger du så bare for at optatere værdien i menuen.

giver det mening ?

mvh
Avatar billede agertoft Nybegynder
17. maj 2005 - 09:23 #14
hmm.. altså min opfriskningsfunktion i loginboksen ligger i dens ascx Page_Load()..

Jeg vil lige prøve at eksperimentere med din løsning, når jeg kommer hjem :)
Avatar billede snepnet Nybegynder
17. maj 2005 - 09:51 #15
roger ... du skriver bare hvis der er noget.
hvis du har en messenger-konto, er du også velkommen til at smide den her, så skal jeg nok tilføje dig... så kan det gå lidt hurtigere :o)
mvh
Avatar billede snepnet Nybegynder
07. september 2005 - 18:27 #16
hej agertoft - du får lige et svar her hvis noget skulle have været nyttigt.
mvh
Avatar billede snepnet Nybegynder
10. maj 2006 - 12:20 #17
Damn.... du må have langt hjem :oD (17/05-2005 09:23:08)
Mvh
Avatar billede agertoft Nybegynder
10. maj 2006 - 13:11 #18
Hehe, jeg er kommet væk fra projektet i mellemtiden :)

Ellers ville man jo kunne lave noget i retning af parent.Submit() eller noget i den stil... du skal ihvertfald have dine points ;)
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