Avatar billede Slettet bruger
06. juni 2006 - 12:48 Der er 11 kommentarer og
1 løsning

(VB.NET) Dynamisk panel med textbox og dropdownlist til arraylist

Hej

Jeg bruger ASp.NET og VB.NET.

Jeg er ved at lave en funktion, hvor men ved at trykke på en knap kan tilføje en textbox og en dropdownlist. Når der er tilføjet det antal textboxe og dropdownlists der ønskes, skal man ved at trykke på en anden knap kunne tilføje det hele til en arraylist (for at sende det til en database).

Dropdownliste

Jeg har følgende kode i min codebehind. Men som det ses mangler jeg dropdownlisten:


Protected Sub AddHandling_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles AddHandling.Click
        'Tilføjer en Textboks til Handlingspanelet
        Dim i As Integer

        i = Session("AntalHandlinger")
        Session("AntalHandlinger") = i + 1
        Label1.Text = i

        For i = 1 To i
            Dim HandlingsTextBox As TextBox = New TextBox()

            HandlingsTextBox.Text = "TextBox" & i.ToString()
            HandlingsTextBox.ID = "TextBox" + i.ToString()
            HandlingsPanel.Controls.Add(HandlingsTextBox)

            HandlingsPanel.Controls.Add(New LiteralControl("<br>"))
        Next i
    End Sub


Jeg har prøvet at komme det over i en arraylist, men det kan jeg ikke rigtig få til:

'Danner HandlingsArray
        Dim HandlingsArray As New ArrayList

        Dim i = Session("AntalHandlinger")

        For i = 1 To i
            Dim Handling As String
            Handling = "TEST " + i.ToString
            HandlingsArray.Add(Handling)
        Next

Desuden sker der det, at når der er trykket på knappen, der skal få det over i en arraylist, så forsvinder alle textboxene.

Jeg håber der er en der kan hjælpe mig med disse problemer. På forhånd tak.
Avatar billede Slettet bruger
06. juni 2006 - 14:33 #1
Nå - nu fik jeg tilføjet en dropdownlist, men jeg mangler stadig at få data ind i en arraylist???
Avatar billede neoman Novice
06. juni 2006 - 19:43 #2
Tihi - som .NET nybegynder blev jeg også lige overrumplet af et tilsvarende problem med at dynamisk tilføjede elementer forsvandt ved postback. Sagen er den, at applikationen er stateless og husker ingenting (på nær viewstate/sessionstate etc) ved næste kald. Løsningen var at regenerere de tilføjede komponenter i Page_Load (for hver postback - ellers forsvinder de). Pudsigt nok blev deres værdier  bevaret i Viewstate.

Dit andet problem er utydeligt for mig - måske kan en anden hjælpe ?

Jeg er selv begynder i feltet - så hvis du
Avatar billede snepnet Nybegynder
08. juni 2006 - 11:25 #3
I det kode du har vist - skriver du tekst ind i din array, og prøver at betragte det som integers senere.
Hvis du vil have integers ud - må du proppe integers ind (du skrivers TEST + ...)
Mvh
Avatar billede Slettet bruger
09. juni 2006 - 11:24 #4
ok. Jeg kigger lige lidt mere og vender tilbage....
Avatar billede Slettet bruger
09. juni 2006 - 14:11 #5
Nu har jeg lavet det lidt om...

Jeg har en knap og et panel:

<asp:Panel ID="HandlingsPanel" runat="server"></asp:Panel>

        <asp:Button ID="Test" runat="server" onClick="AddHandlingsCount" Text="Testerjolige" />

I min codebehind har jeg følgende:
Sub Page_Load()

    'Opstarter Handlingspanel
        Dim i As Integer

        If Not IsPostBack Then
            ViewState("HandlingsCount") = 1
            i = ViewState("HandlingsCount")
            AddHandling(i)
        ElseIf ViewState("HandlingsCount") > 1 Then
            For i = 1 To ViewState("HandlingsCount")
                AddHandling(i)
            Next
        End If
    End Sub

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

    Sub AddHandling(ByVal HandlingsNr As String)
        Dim HandlingsTextBox As TextBox = New TextBox
        Dim HandlingsAnsvarlig As DropDownList = New DropDownList()
        Dim objBLLPersonale As PersonaleManager = New PersonaleManager
        Dim PersonaleDDLCache As ArrayList = objBLLPersonale.GetAllRSDPersonale()

        HandlingsTextBox.Text = "HandlingsTextBox" & HandlingsNr
        HandlingsTextBox.ID = "HandlingsTextBox" + HandlingsNr
        HandlingsPanel.Controls.Add(HandlingsTextBox)
        HandlingsPanel.Controls.Add(New LiteralControl("&nbsp;"))
        HandlingsAnsvarlig.ID = "HandlingsAnsvarlig" + HandlingsNr
        HandlingsAnsvarlig.DataSource = PersonaleDDLCache
        HandlingsAnsvarlig.DataValueField = "Initialer"
        HandlingsAnsvarlig.DataTextField = "Initialer"
        HandlingsAnsvarlig.DataBind()
        HandlingsPanel.Controls.Add(HandlingsAnsvarlig)
        HandlingsPanel.Controls.Add(New LiteralControl("<br>"))

    End Sub

Problemet her er, at første gang jeg trykker på knappen, er der kun én textbox (der skulle være to) og den har nummer 2.

Jeg har stadig problemet med at putte tekste fra tekstboxene i en arraylist?? Jeg har så absolut ingen ideer. Men måske noget med:

  Dim i As Integer
        i = ViewState("HandlingsCount")
        Dim HandlingsArraylist As New ArrayList

        For i = 1 To i
            Dim Handling As String
            Handling = ??Her skal der vel henvises til texten i den enkelte textbox??

            HandlingsArraylist.Add(Handling)
        Next
Avatar billede neoman Novice
10. juni 2006 - 21:30 #6
Jeg tror AddHandlingsCount bliver først kaldt EFTER postback, så når Handlingscount er lig med lige netop 1 OG Page.IsPostback så eksekverer Page_Load ikke gendannelsen. Prøv med
Sub Page_Load()

    'Opstarter Handlingspanel
        Dim i As Integer

        If Not IsPostBack Then
            ViewState("HandlingsCount") = 1
        End If
            i = ViewState("HandlingsCount")
            For i = 1 To ViewState("HandlingsCount")
                AddHandling(i)
            Next
    End Sub
Avatar billede Slettet bruger
11. juni 2006 - 22:21 #7
Tak.

neoman --> det virker.

Nu mangler jeg bare at få puttet teksten fra textboxene ind i en arraylist??
Avatar billede neoman Novice
12. juni 2006 - 17:58 #8
Jeg går ud fra du har problemer med at få fat i din textbox ? Jeg har ikke prøvet det med en PANEL men du kunne prøve noget i stil med :

Private Sub Button1_Click(sender As Object, MyEventArgs As EventArgs)
      ' Find control on page.
      Dim myControl As Control = Handlingspanel.FindControl("HandlingsTextBoxi")
      Dim myText as String
      myText = myControl.Text
eller måske myText = myControl.Tostring
eller måske myText = CType(myControl, TextBox).Text()
(alt ovenstående forudsat at FindControl faktisk finder den på denne måde:-=)
End Sub

Hvis det ikke virker, så prøv at google lidt efter "How to find a control in a panel" eller noget lign.
Avatar billede Slettet bruger
12. juni 2006 - 20:08 #9
Hej

Jeg løste det ved at oprette endnu et spm her på eksperten. Løsningen blev:

        Dim HandlingsArraylist As New ArrayList
        Dim Handling As String

        Dim ctr As Control
        For Each ctr In HandlingsPanel.Controls
            If TypeOf ctr Is TextBox Then
                Dim ctrTB = CType(ctr, TextBox)
                Handling = ctrTB.Text

                If Handling = "" Then
                    Handling = "Ingen handling angivet"
                End If
                HandlingsArraylist.Add(Handling)
                Handling = Nothing
            End If
        Next

Neoman -> du løste det ene problem, så hvis du sender et svar, så sender jeg point.
Avatar billede Slettet bruger
20. juni 2006 - 11:09 #10
Avatar billede Slettet bruger
21. juni 2006 - 09:29 #11
Kan jeg ikke få en til at kigge på: http://www.eksperten.dk/spm/716686

Jeg er rimelig desperat....
Avatar billede neoman Novice
21. juni 2006 - 18:46 #12
svar
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Er du vores nye IT-supporter til Cyberdivisionens supportteam i Hvidovre?

Capgemini Danmark A/S

Salesforce CTO - Nordics (Denmark)

Netcompany A/S

Network Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Chef til stor applikationstransformation i Forsvaret