Avatar billede ghost1 Nybegynder
12. juli 2007 - 14:28 Der er 17 kommentarer og
1 løsning

Postback med opdateret indhold

Hej

Jeg har et stort problem  - håber der er en der kan komme med en løsning...

Jeg har en side med en række imagebuttons der bliver lavet via en repeater - når jeg klikker på en af disse knapper sætter den noget speciel style på knappen , so far so good.
Når jeg så gerne vil tilføje en imageknap har jeg lavet et panel som så overlapper på siden hvor man så kan tilføje en ny knap , her gemmer jeg så værdien i min DB og den lukker det panel. det gør den jo i en postback , men problemet er at min liste af elementer (image buttons) ikke bliver opdatetet. Det skal siges at jeg har EnableViewState="true" . Hvis dette er sat til false virker det sådan set udover den så ikke husker hvilken knap jeg havde trykket inden.. Jeg ved godt man kunne løse det ved at gemme et ID i feks querystring - men det andet må da også kunne lade sig gøre
Avatar billede neoman Novice
12. juli 2007 - 14:49 #1
Er dette situationen ?:
1. Du har en repeater (med en knap i hver linje) budnet til noget iDb'en
2. Du har en Insert knap, som sætter en ekstra record ind i DB, når du trykker på den
3. Eftersom repeateren allerede er databundet før Insert-knappens event håndteres, så vises ikke den ekstra linje i repeateren umiddelbart efter tryk på Insert-knappen, men først efter du f.eks. tilføjet endnu en linje ?

Hvornår laver du databinding på repeateren ? kun i PageLoad ? Du kunne rebinde repeateren i din Insert-knaps event handler.
Avatar billede ghost1 Nybegynder
12. juli 2007 - 15:37 #2
Hej

1. min repeater indeholder 1 imagebutton , så der kommer en række med knapper svarede til det antal records i DB der passer til.
2. ja
3. jeg indsætter den nye record på onclick eventen - og nej får aldrig vist den/de ekstra knapper med mindre jeg virkelig reloader siden. ligesom om den gemmer den postback / viewstate med hvordan (hvor mange) knapper der var fra start. men ja databinder repeateren på pageload, men har også prøvet at gøre det både før og efter uden noget resultat..
Avatar billede neoman Novice
12. juli 2007 - 15:44 #3
Det forstår jeg ikke helt. Har du prøvet at lave en databind på din repeater inde i  din minInsertButton.Click event handler lige efter at værdierne er lagt ind i Db'en i den selvsamme handler ? Fordi dette skulle jo gerne opdatere repeateren med nyeste data, inden det hele bliver rendered.
Avatar billede ghost1 Nybegynder
12. juli 2007 - 15:54 #4
ja det har jeg .. virker som sagt fint hvis jeg har sat EnableViewState=false på min repeater
Avatar billede neoman Novice
12. juli 2007 - 16:04 #5
Lige for at checke:

1. Din repeater vises i samme postback med korrekt antal rækker efter din Insert, hvor du rebinder i Insert.CLick, og ViewState=False ?

2. Din repeater vises korrekt først i næste postback, hvis du blot ændrer ViewState for repeateren til False ?


Kunne du vise noget kode ? Din page load og din Insert event handler ? (Og det er vel kun de to steder der sker noget med repeateren? Ellers også de andre handlers plz:)
Avatar billede ghost1 Nybegynder
12. juli 2007 - 16:15 #6
det kan du tro  - men ja , det virker fino hvis jeg sætter den til false

det her fra HTML´en


start------------------------
<asp:Repeater runat="server" ID="repeater1" DataSourceID="SQLLevel1"  OnItemDataBound ="repeater1_ItemDataBound" >
 
  <ItemTemplate>
  <asp:Button runat="server" ID ="knap"  Height="25" Width="22" BorderColor="ActiveBorder" BorderStyle="Solid" BorderWidth="1" OnClick="OnClick_ChooseLevel1" />
  </ItemTemplate>
  </asp:Repeater>
-------------------------------- end
repeater1_ItemDataBound er ikke så vigtig her.. den sætter bare stylen på den valgte knap

codebehind

protected void OnClick_SetAsThumbnail(object sender, EventArgs e)
    {
      ThumbnailExists(1, DropDownList_ColorPattern.SelectedValue.ToString());
        OnClick_CloseAddColorPattern(null, null);
        }

//ThumbnailExists indsætter record hvis den ik allerede ligger der
//OnClick_CloseAddColorPattern lukker blot vinduet


og på onload

  SQLLevel1.SelectCommand = "select * from ColorPatternTree left join ColorPattern on ColorPatternTree.idcolorpattern = ColorPattern.id where ColorPatternLevel = 1 and IDStyle=" + this.StyleID;
            SQLLevel1.DataBind();


håber det gir mening..
Avatar billede neoman Novice
12. juli 2007 - 16:26 #7
1. prøv i stedet at rebinde datasourcen til repeateren :
repeater1.databind
hvis du gør det så bliver datasourcen mig bekendt opdateret. Jeg ved ikke om en databind på en objectdatasource automatisk slår igennem til den kontrol som er bundet til datasourcen. I princippet brude det slet ikke vøre nødvendigteksplicut at rebinde i Onload, i og med at den repeater er dkalrativ i source,n, så det sker af sig selv.



2. jeg ser ikke nogen databind for repeateren i
protected void OnClick_SetAsThumbnail(object sender, EventArgs e)

for ellers skal du rigtigt nok vente til næste postback for at se en ændring.
Avatar billede neoman Novice
12. juli 2007 - 16:27 #8
i din click handler prøv dette :
protected void OnClick_SetAsThumbnail(object sender, EventArgs e)
    {
      ThumbnailExists(1, DropDownList_ColorPattern.SelectedValue.ToString());
        OnClick_CloseAddColorPattern(null, null);
        repeater1.DataBind;
        }
Avatar billede ghost1 Nybegynder
12. juli 2007 - 16:37 #9
you are the man... :) - det var sgu bare det der manglede ... den taber så godt nok viewState på den selectede knap , men skulle jeg nok kunne løse.. tak for hjælpen
smid et svar
Avatar billede ghost1 Nybegynder
12. juli 2007 - 16:38 #10
troede ikke det var nødvendigt at genbinde controllen når jeg rebindede SQL ´en der er knyttet til repeateren ..
Avatar billede neoman Novice
12. juli 2007 - 16:43 #11
Der kan man bare se - jeg anede ikke engang at der var en DataBind metode på en datasource, hehe .) Skulle lieg gogole lidt for at se hva pokker den gør:)

For 200 pts kan du få mig til at svede lidt mere hvis du vil : hvilken knap er det lige som ikke synes at have en viewstate ? Den sidst tilføjede ? hvordan viser det sig ?
Avatar billede neoman Novice
12. juli 2007 - 16:49 #12
Og din forvirring kommer måske ud af page life cycle. Rækkefølgen for ting, når du klikker på en knap er groft sagt følgende:

PageLoad kører (og imens bliver viewstate gift med de kontroller som findes på dette tidspunkt)
Handlers bliver kørt (f.eks. din click handler) - så det er her du skal rebinde, hvis du har lavet ændringer og ønsker at se dem i samme hug
Render - hele molevitten bliver sendt til klienten
Avatar billede ghost1 Nybegynder
12. juli 2007 - 16:57 #13
jeg har en onclick event på knapperne der gør at når jeg trykker en af dem , så får den en tykkere border , og når jeg så klikker rundt på knapper i niveau 1 (har 3 niveauer) , så alt efter hvilken knap jeg vælger i niveau 1 kommer der nogle knapper frem i niveau 2 (lidt a la træstruktur med knapper :P ) og dette husker den , altså lad os sige jeg klikker rundt på knapperne nede i niveau 2 , så kan den stadig huske hvad jeg klikkede på i niveau 1. - men vil tro det smarteste er at gemme den nuværede knaps id eller lign i en viewstate og så hente den lige efter jeg har gemt den nye knap - burde det ik gøre det?
Avatar billede neoman Novice
12. juli 2007 - 17:02 #14
"dette husker den" ? Husk lige jeg ikke aner hvad du laver jo, hehe..

Hvordan ser du "husker" og "husker ikke" ?

Husk lige at hvis du laver noget dynamisk, og derpå en postback, så skal de dynamiske elementer være tilstede (eller genskabes) on page load.  Hvis man genskaber dem senere, så kan frameworket ganske rigtigt ikke finde de elementer som viewstate skulle giftes med.
Avatar billede ghost1 Nybegynder
12. juli 2007 - 17:12 #15
altså hvis jeg bare klikker på en knap bliver den markeret som den aktive (siden laver en postback når jeg klikker på knappen) , men hvis jeg så hopper ind og vil oprette en ny knap (stadig samme side i det panel) og så opretter den dør den , altså markeringen.. og det er underligt nok , for har en dropdown-liste i opret hvor den også laver postback hver gang jeg laver et nyt valg i dropdown , har en selectindexchengd på , fordi den herinde viser et lille billede af det aktuelle valg i dropdown´en - men stadig gemmes værdien i knappen i baggrunden kan jeg se.. - kan godt se det nok er lidt kompliceret at sætte sig ind i når du ikke har set det LIVE..
Det der undrer mig er bare at den først taber den aktive knap når jeg opretter.. men okay jeg rebinder jo også repeateren , er det derfor ? - for mener heller ikke det virkede før jeg satte den rebind på..
Avatar billede ghost1 Nybegynder
12. juli 2007 - 17:15 #16
har lige testet.. det er den rebind der gør det.. og det gir selvfølgelig mening
Avatar billede ghost1 Nybegynder
12. juli 2007 - 17:16 #17
men du skal have mange tak for hjælpen
Avatar billede neoman Novice
12. juli 2007 - 17:24 #18
altid rart når tingene virker :) og jo, det er svært at gennemskue det uden at se det

men så vidt jeg forstår, så har du problemet med at en dropdown ikke husker sin stilling ? Det er rigtigt, en rebind resetter den, men du kunne jo lægge dropdownX.SelectedValue ind i viewstate (dropdownX.SelectedValue=ViewState("myValue"), og fiske den op derfra i din click.handler.. så den sidste linje i den ville vel være (efter databind).. dropdown.selectedvalue=ViewState("myValue") . . og i princippet burde den også typecastes, men den virker nok alligevel med simple ting som numre og strings.
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