Avatar billede jaffafo Nybegynder
23. oktober 2004 - 04:42 Der 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.. :(
Avatar billede snepnet Nybegynder
23. oktober 2004 - 11:42 #1
hej jaffafo :o)

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).
Avatar billede jaffafo Nybegynder
23. oktober 2004 - 15:32 #2
Efter 1 tryk så sker der intet. Intet bliver gemt i databasen og intet bliver vist i label'en.

efter 2 tryk så bliver det gemt i databasen og det rigtige tal vises i label'en.

Jeg kan slet ikke se hvad jeg skulle lave anderledes... :(
Avatar billede jaffafo Nybegynder
23. oktober 2004 - 15:43 #3
snepnet

lige et lille spørgsmål:

hvad har du af uddannelse? og hvor gammel er du?

hvis du ikke har lyst til at svare er det fint :), men var bare lidt nysgerrig :)
Avatar billede snepnet Nybegynder
23. oktober 2004 - 16:45 #4
hej igen :o)

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)
Avatar billede jaffafo Nybegynder
23. oktober 2004 - 18:55 #5
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
Avatar billede snepnet Nybegynder
23. oktober 2004 - 19:06 #6
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()

kan du følge det ?

mvh
Avatar billede snepnet Nybegynder
23. oktober 2004 - 19:07 #7
bemærk at din page_load altid bliver kørt før dine eventhandlers.
Avatar billede jaffafo Nybegynder
23. oktober 2004 - 20:11 #8
jeg kan ikke rigtigt se hvad du mener?
Avatar billede snepnet Nybegynder
23. oktober 2004 - 20:23 #9
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.

kunne du følge det ?

mvh
Avatar billede jaffafo Nybegynder
24. oktober 2004 - 00:03 #10
hmm

jeg fik løst problemet nu..  Problemet lå i at textbox'en "txtadminopsaetningAntalViste" havde en autopostback="true" :(

hvordan den er kommet der ved jeg ikke ..

jeg fik den fjernet så virker det fint..  smid et svar for besværet..
Avatar billede snepnet Nybegynder
24. oktober 2004 - 00:32 #11
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).

må jeg se hele din aspx-fil ?

mvh
Avatar billede jaffafo Nybegynder
24. oktober 2004 - 02:16 #12
jeg glemte lige at skrive at den havde Ontextchanged="click_gem".

Hvorfor jeg har skrevet det der ved jeg ikke. :S

men nu funker det så.. :)
Avatar billede snepnet Nybegynder
24. oktober 2004 - 11:52 #13
ok :o)
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