Hej. Har en testapplikation med en web user control som innehåller en panel. I denna panel skapas kontroller (Literal controls, Text boxar och labels). Under panelen har jag en knapp som aktiverar att de datat som man skriver in i de dynamiskt skapade kontrollerna sätts till en klass och klassen läggs sedan i en kollektion i en For snurra. Allt funkar felfritt och jag hittar alla kontroller och datat sätts till klassen och klassen läggs till kollektionen. Nu till det märkliga..... Har skapat en ny applikation som jag tillämpat detta på men nu går det inte.. Jag hittar inte kontrollerna längre.. Om det tex har skapats 8 textboxar dynamiskt i kontrollen hittas de inte.. endast två Literal controls hittas. Det verkar som om det inte går att hitta panelen ens. Om tex lägger till: Nu har jag inte gått igenom koden i första inlägget, men för att kolla vilka kontroller som finns på en sida så kan ni ju alltid lägga till en kodsnutt som itererar igenom alla och listar dem... Kontroller kan vara child-controls till andra kontroller, t ex panelen. Det går att kolla med propertyn "HasControls" för en kontroll... är den True så är det bara att iterera igenom kontrollerna i Controls-collection för den kontrollen... Ok.. Nu vet jag var problemet ligger. Tidigare ropade jag på en sub som skapade kontrollerna från Page load och då hittade jag kontrollerna när knappen registrera aktiverades (och koden får att hitta kontrollerna kördes). Men nu har jag inte sub anropet, som skapar kontrollerna, i Page load utan bakom en annan knapp (ok) och då hittar jag inte kontrollerna via koden bakom knappen registrera.Märkligt problem
Har någon nån aning om vad det kan vara???
Så här ser koden ut när jag försöker hitta mina kontroller i panelen (pnlAccessories):
<code>
Private Sub btnRegistreraObj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistreraObj.Click
Dim kontroll As Control
Dim i As Integer
Dim accesskollektion As New Collection
Dim accesskontroll As Control
For i = 1 To ddlAntTillb.SelectedItem.Value
Dim objektaccessory As New objectsObj
For Each accesskontroll In pnlAccessories.Controls
If TypeOf accesskontroll Is TextBox Then
If accesskontroll.ID = "accesstype" & CType(i, String) Then
objektaccessory.AccessTyp = CType(pnlAccessories.FindControl("accesstype" & CType(i, String)), TextBox).Text
ElseIf accesskontroll.ID = "accessmodell" & CType(i, String) Then
objektaccessory.AccessModell = CType(pnlAccessories.FindControl("accessmodell" & CType(i, String)), TextBox).Text
ElseIf accesskontroll.ID = "accesssnr" & CType(i, String) Then
objektaccessory.AccessSNR = CType(pnlAccessories.FindControl("accesssnr" & CType(i, String)), TextBox).Text
ElseIf accesskontroll.ID = "accesssnote" & CType(i, String) Then
objektaccessory.AccessAnteckning = CType(pnlAccessories.FindControl("accesssnote" & CType(i, String)), TextBox).Text
End If
End If
Next
accesskollektion.Add(objektaccessory, i)
Next
objekt.accessories = accesskollektion
End Sub
</code>Sv: Märkligt problem
<code>For Each kontroll In Page.Controls
If TypeOf kontroll Is Panel Then
If kontroll.ID = "pnlAccessories" Then
</code>
så hittas inte panelenen! Märkligt!
[Edit]
Ok nu hittar jag panelen om jag skriver For Each kontroll In me.Controls
men panelens kontroller hittas fortfarande inte.Sv:Märkligt problem
Exempel: Lista alla kontroller på aktuellt formulär i en Label 'lblList':
lblList.Text = ""
For Each c As Control In Controls
lblList.Text &= c.GetType.ToString & " - " & c.ID & "<br>"
If c.HasControls Then
For Each d As Control In c.Controls
lblList.Text &= "... " & d.GetType.ToString & " - " & d.ID & "<br>"
If d.HasControls Then
For Each f As Control In d.Controls
lblList.Text &= "...... " & f.GetType.ToString & " - " & f.ID & "<br>"
Next
End If
Next
End If
Next
PS! Detta är givetvis bättre att göra som en rekursiv funktion som fortsätter lista alla sub-kontroller tills inga fler finns... DS!
Lycka till!
Sv: Märkligt problem
Det måste vara nått Postback problem eller liknande.