06. juni 2006 - 12:48Der 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()
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 ?
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
Synes godt om
Slettet bruger
09. juni 2006 - 11:24#4
ok. Jeg kigger lige lidt mere og vender tilbage....
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()
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
Synes godt om
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??
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.
Synes godt om
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.
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.