23. oktober 2004 - 04:42Der er
12 kommentarer og 1 løsning
Skal trykke 2 gange
Jeg har en lille side med 3 bokse og 1 knap. De 3 bokse fyldes med data fra en database.
Her er koden:
Dim DataOleDB as new DataBaseOleDB() Protected txtadminopsaetningBilledeHojde As System.Web.UI.Webcontrols.textbox Protected txtadminopsaetningBilledeBredde As System.Web.UI.Webcontrols.textbox Protected txtadminopsaetningAntalViste As System.Web.UI.Webcontrols.textbox Protected lnkGemopsaetning As System.Web.UI.Webcontrols.linkbutton Protected lblbesked As System.Web.UI.Webcontrols.label
Public sub Page_Load(Source as Object, E as EventArgs) If not page.ispostback Fyldbokse() end if end sub
Public sub click_gem(Source as Object, E as EventArgs) try DataOleDB.opendb("blabla") 'DataOleDB.SkrivData("UPDATE Setup SET Nyheder_Pager= " & txtadminopsaetningAntalViste.text & ", GemtBilledeHojde = " & txtadminopsaetningBilledeHojde.text & ", GemtBilledeBredde = " & txtadminopsaetningBilledeBredde.text & ";") response.write("UPDATE Setup SET Nyheder_Pager = " & txtadminopsaetningAntalViste.text & ", GemtBilledeHojde = " & txtadminopsaetningBilledeHojde.text & ", GemtBilledeBredde = " & txtadminopsaetningBilledeBredde.text & ";") 'DataOleDb.Data.close() DataOleDB.closedb() 'lblbesked.text = "Der vises nu <b>" & txtadminopsaetningAntalViste.text & "</b> nyheder ad gangen"
catch ex as exception response.write(ex.tostring()) end try end sub
Public sub Fyldbokse() try DataOleDB.opendb("blabla") DataOleDB.DanData("SELECT * from Setup") If Dataoledb.Data.read() then txtadminopsaetningBilledeHojde.text = Dataoledb.Data("GemtBilledeHojde") txtadminopsaetningBilledeBredde.text = Dataoledb.Data("GemtBilledeBredde") txtadminopsaetningAntalViste.text = Dataoledb.Data("Nyheder_Pager") end if DataOleDb.Data.close() DataOleDB.closedb() catch ex as exception response.write(ex.tostring()) end try end sub
Public sub click_annuller(Source as Object, E as EventArgs) response.redirect(request.path & "?sid=4") end sub
___________________________________________
Men jeg skal trykke 2 gange for at den skrive i databasen, ja endda bare for at den skal ændre teksten i label'en.. :(
har du konstateret i basen at der ikke bliver opdateret i den når du klikker på knappen ?
det giver nemlig fin mening at du ikke ser nogle ændringer efter du har klikket, men det giver ikke særlig god mening hvis du ikke får skrevet i basen.
dit mønster med IsPostBack er helt fint, men for at se de ændringer der måtte ske efter der er kørt en eventhandler (som din handler af klikeventet), skal du have kørt din Fyldbokse-rutine igen - eller den rutine der sikrer at det der vises på siden er det der står i din datakilde.
gav det mening ? mvh (du kan finde masser om databinding patterns og den slags på msdn, hvis det er).
må jeg se din komplette kode - fuldstændig som du bruger den lige nu ?
det er mere fordi den eneste linie du har der sætter en tekst i din label er kommenteret ud, så du må køre på noget andet kode end det du har postet.
mvh (jeg blev uddannet som e-ingeniør i år 2001, og jeg er 32.... jeg har lavet nogle andre - og ikke it-relaterede ting inden jeg startede med at læse til ingeniør)
Dim DataOleDB as new DataBaseOleDB() Protected txtadminopsaetningBilledeHojde As System.Web.UI.Webcontrols.textbox Protected txtadminopsaetningBilledeBredde As System.Web.UI.Webcontrols.textbox Protected txtadminopsaetningAntalViste As System.Web.UI.Webcontrols.textbox Protected lnkGemopsaetning As System.Web.UI.Webcontrols.linkbutton Protected lblbesked As System.Web.UI.Webcontrols.label
Public sub Page_Load(Source as Object, E as EventArgs) If not page.ispostback Fyldbokse() end if end sub
Public sub click_gem(Source as Object, E as EventArgs) try DataOleDB.opendb("blabla") DataOleDB.SkrivData("UPDATE Setup SET Nyheder_Pager= " & txtadminopsaetningAntalViste.text & ", GemtBilledeHojde = " & txtadminopsaetningBilledeHojde.text & ", GemtBilledeBredde = " & txtadminopsaetningBilledeBredde.text & ";")
lblbesked.text = "Der vises nu <b>" & txtadminopsaetningAntalViste.text & "</b> nyheder ad gangen"
catch ex as exception response.write(ex.tostring()) end try end sub
Public sub Fyldbokse() try DataOleDB.opendb("blabla") DataOleDB.DanData("SELECT * from Setup") If Dataoledb.Data.read() then txtadminopsaetningBilledeHojde.text = Dataoledb.Data("GemtBilledeHojde") txtadminopsaetningBilledeBredde.text = Dataoledb.Data("GemtBilledeBredde") txtadminopsaetningAntalViste.text = Dataoledb.Data("Nyheder_Pager") end if DataOleDb.Data.close() DataOleDB.closedb() catch ex as exception response.write(ex.tostring()) end try end sub
Public sub click_annuller(Source as Object, E as EventArgs) response.redirect(request.path & "?sid=4") end sub
når du går ind på siden sættes værdierne af dine tekstbokse til noget du henter i basen.
når du trykker første gang på knappen - sættes din tekst til noget der er afhængig af det aktuelle indhold i din tekstboks - som ikke ændrer sig fordi du skriver noget i basen. (det er jo kun første gang brugeren ser siden du henter noget).
når du trykker på annuler - bliver du redirectet til samme side, hvilket vil medføre at IsPostBack er false, hvorfor du får hentet indholdet i basen, og proppet det i dine tekstbokse.
hvis du har databundne sider bør du bygge dem op så de kører som noget i denne stil :
'i pageload If not page.ispostback BindPage() 'bare din egen metode
'i din BindPage ' hent indhold fra basen ' påtryk værdierne på dine tekstbokse mv.
'i din handler af et event - som kan afstedkomme ændringer i datagrundlag ' gem i basen BindPage()
du sætter teksten på din label til noget der er afhængig af hvad der står i et tekstfelt på din side.... og den eneste metode der ændrer værdien af tekstfeltet er Fyldbokse() som kun kaldes første gang brugeren ser siden, eller når du trykker på annuller.
der er ikke noget der sørger for at dit teksfelt viser det der står i basen fordi du trykker på den knap der sørger for at du gemmer dine data.
du får et svar her - men det lyder helt rimelig mærkeligt det du skriver.... umiddelbart er der ikke noget i din kode der burde blive påvirket af at autopostback er true på en tekstboks, hvad enten du retter i den eller ej. (det har en effekt at den er true... hvis du retter i den, og trykker på knappen vil du få kørt page_load 2 gange, men siden den ikke udfører noget på et postback burde det ikke betyder noget).
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.