Avatar billede Slettet bruger
21. juni 2006 - 12:04 Der er 3 kommentarer og
1 løsning

Viewstate, page_Load, subrutine, dynamisk fjernelse af controls

Er der ikke bare én, der har et bud på følgende:

Jeg håber ikke jeg gør noget forkert ved at sætte point så højt, men det er 4. gang jeg oprette dette spm. Jeg har ikke tidligere fået nogen svar og jeg kunne virkelig godt bruge noget hjælp.

Jeg tror det er et spm. om at jeg skal have page_load til at køre efter "Sub FjernHandling". Jeg håber en kan genneskue hvordan jeg kommer igennem med dette.

Her er hvad jeg tidligere har skrevet:

Hej

Jeg har et asp:panel, hvor jeg kan tilføje textboxe ved at trykke på en knap. Det virker fint, men jeg har en anden knap, som skal fjerne den sidste textbox og den virker kun hvis jeg trykke to gange på den. Jeg tror at det er fordi at det er fordi at følgende kode ikke bliver aktiveret:

Sub Page_Load()


        'Opstarter Handlingspanel
        Dim i As Integer
        LblHandling.Text = ""
        If Not IsPostBack Then
            ViewState("HandlingsCount") = 1
        End If
        i = ViewState("HandlingsCount")
        For i = 1 To ViewState("HandlingsCount")
            AddHandling(i)
        Next

        'AfslutPanel ikke synligt
        AfslutPanel.Visible = False
    End Sub

Knapperne:

Sub AddHandlingsCount(ByVal s As Object, ByVal e As EventArgs)
        ViewState("HandlingsCount") += 1
        AddHandling(ViewState("HandlingsCount"))
End Sub

Det er denne knap der ikke virker:
Sub FjernHandling(ByVal s As Object, ByVal e As EventArgs)
        If ViewState("HandlingsCount") > 1 Then
            ViewState("HandlingsCount") -= 1
        Else
            LblHandling.Text = "Den sidste handlng kan ikke fjernes"
        End If
End Sub

Jeg tror at det er fordi at page_load kører før der "sub fjernHandling" og derved bliver viewstate("HandlingsCount") ikke én mindre før page_load kører??
Avatar billede neoman Novice
21. juni 2006 - 18:44 #1
Du kunne evt. prøve at lægge din Opstart af handlingspanel i Prerender - eventet for siden. Den eksekveres vist EFTER at alle event handlers er blevet kaldt, så din HandlingsCount burde være rigtig på det tidspunkt.

Hvis du vil læse lidt om rækkefølgen af hvad der kaldes hvornår, så er her et godt link :-)
http://msdn2.microsoft.com/en-us/library/ms178472.aspx

Som plan B kunne du alternativt gøre den pågældende handling usynling ved textboxX.visible=false :=)
Avatar billede Slettet bruger
22. juni 2006 - 14:33 #2
Jeg har løst det ved at tjekke hvilken knap der blev trykket på:
    If IsPostBack Then

            Dim str As String
            For Each str In Request.Form
                Dim c As Control = Page.FindControl(str)
                If TypeOf c Is Button Then
                    If c.ID.StartsWith("Remove") Then
                        If ViewState("HandlingsCount") > 1 Then
                            ViewState("HandlingsCount") -= 1
                        Else
                            LblHandling.Text = "Den sidste handlng kan ikke fjernes"
                        End If
                    End If
                End If
            Next

            i = ViewState("HandlingsCount")
            For i = 1 To ViewState("HandlingsCount")
                AddHandling(i)
            Next
        End If
Avatar billede Slettet bruger
22. juni 2006 - 14:34 #3
Lukker
Avatar billede Slettet bruger
22. juni 2006 - 14:34 #4
...og takker.
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
Kurser inden for grundlæggende programmering

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