OVH Cloud OVH Cloud

Récupérer l'ID d'un control créé dynamiquement lors du chargement du UserControl

1 réponse
Avatar
Thibault
Bonjour à tous,
J'ai créé un UserControl dans lequel je crée dynamiquement différents
controls (un Label myLabel, un dropdownlist myddlLAN_LANGUES, un textbox
myTextbox et un autre dropdownlist myddlLAN_NIVEAU).
le control myddlLAN_LANGUES a la propriété AutoPostBack à True
le control myTextbox a la propriété Visible à False par défaut
Au chargement du UserControl je lui demande qu'il me crée un certain nombre
de fois tout ces controls.
J'aimerais que lorsque je sélectionne la valeur "Autres" dans ma
dropdownlist myddlLAN_LANGUES cela m'affiche mon textbox correspondant en
changeant la valeur de la propriété Visible à True.
Le seul soucis s'est que je ne vois pas comment récupérer l'ID du textbox a
affciher. :-((((

Est ce que quelqu'un aurait une idée sur comment faire ???

Voici mon code :

Public Class UCLangues
Inherits System.Web.UI.UserControl

Dim myLabel As Label
Dim myTextbox As TextBox
Dim myddlLAN_LANGUES As DropDownList
Protected WithEvents PlaceHolderLangue As
System.Web.UI.WebControls.PlaceHolder
Dim myddlLAN_NIVEAU As DropDownList

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Placez ici le code utilisateur pour initialiser la page

PlaceHolderLangue.Controls.Add(New LiteralControl("<table>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("<tr>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("<td width='250px'>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("Langue"))
PlaceHolderLangue.Controls.Add(New LiteralControl("</td>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("<td>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("Niveau"))
PlaceHolderLangue.Controls.Add(New LiteralControl("</td>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("</tr>"))

For i As Integer = 1 To 3

myLabel = New Label
myLabel.ID = "myLabel" & i
myLabel.CssClass = "standard-texte"
myLabel.Text = i & " : "
myddlLAN_LANGUES = New DropDownList
myddlLAN_LANGUES.ID = "myddlLAN_LANGUES" & i
myddlLAN_LANGUES.AutoPostBack = True
myddlLAN_LANGUES.CssClass = "standard-texte"
myddlLAN_LANGUES.Items.Add(New ListItem("...", ""))
myddlLAN_LANGUES.Items.Add(New ListItem("Anglais", "Anglais"))
myddlLAN_LANGUES.Items.Add(New ListItem("Allemand", "Allemand"))
myddlLAN_LANGUES.Items.Add(New ListItem("Espagnol", "Espagnol"))
myddlLAN_LANGUES.Items.Add(New ListItem("Italien", "Italien"))
myddlLAN_LANGUES.Items.Add(New ListItem("Arabe", "Arabe"))
myddlLAN_LANGUES.Items.Add(New ListItem("Français", "Français"))
myddlLAN_LANGUES.Items.Add(New ListItem("Chinois", "Chinois"))
myddlLAN_LANGUES.Items.Add(New ListItem("Japonais", "Japonais"))
myddlLAN_LANGUES.Items.Add(New ListItem("Russe", "Russe"))
myddlLAN_LANGUES.Items.Add(New ListItem("Portugais", "Portugais"))
myddlLAN_LANGUES.Items.Add(New ListItem("Autres", "Autres"))

myTextbox = New TextBox
myTextbox.ID = "mytextbox" & i
myTextbox.CssClass = "standard-texte"
myTextbox.Text = myTextbox.ID
myTextbox.Visible = False

myddlLAN_NIVEAU = New DropDownList
myddlLAN_NIVEAU.ID = "myddlLAN_NIVEAU" & i
myddlLAN_NIVEAU.CssClass = "standard-texte"
myddlLAN_NIVEAU.Items.Add(New ListItem("...", ""))
myddlLAN_NIVEAU.Items.Add(New ListItem("Notions", "Notions"))
myddlLAN_NIVEAU.Items.Add(New ListItem("Scolaire", "Scolaire"))
myddlLAN_NIVEAU.Items.Add(New ListItem("Conversationnel",
"Conversationnel"))
myddlLAN_NIVEAU.Items.Add(New ListItem("Rédactionnel",
"Rédactionnel"))
myddlLAN_NIVEAU.Items.Add(New ListItem("Maternel", "Maternel"))

PlaceHolderLangue.Controls.Add(New LiteralControl("<tr>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("<td>"))
PlaceHolderLangue.Controls.Add(myLabel)
PlaceHolderLangue.Controls.Add(New LiteralControl("&nbsp;"))
PlaceHolderLangue.Controls.Add(myddlLAN_LANGUES)
PlaceHolderLangue.Controls.Add(New LiteralControl("&nbsp;"))
PlaceHolderLangue.Controls.Add(myTextbox)
PlaceHolderLangue.Controls.Add(New LiteralControl("&nbsp;"))
PlaceHolderLangue.Controls.Add(New LiteralControl("</td>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("<td>"))
PlaceHolderLangue.Controls.Add(myddlLAN_NIVEAU)
PlaceHolderLangue.Controls.Add(New LiteralControl("</td>"))
PlaceHolderLangue.Controls.Add(New LiteralControl("</tr>"))

Next

PlaceHolderLangue.Controls.Add(New LiteralControl("</table>"))

myLabel.Dispose()
myddlLAN_LANGUES.Dispose()
myddlLAN_NIVEAU.Dispose()

End Sub

Sub myddlLAN_LANGUES_Changed(ByVal sender As Object, ByVal e As EventArgs)
myTextbox.Visible = True
End Sub
End Class

1 réponse

Avatar
Zazar
Bonjour,

J'ai créé un UserControl dans lequel je crée dynamiquement différents
controls (un Label myLabel, un dropdownlist myddlLAN_LANGUES, un
textbox myTextbox et un autre dropdownlist myddlLAN_NIVEAU).
le control myddlLAN_LANGUES a la propriété AutoPostBack à True
le control myTextbox a la propriété Visible à False par défaut
Au chargement du UserControl je lui demande qu'il me crée un certain
nombre de fois tout ces controls.
J'aimerais que lorsque je sélectionne la valeur "Autres" dans ma
dropdownlist myddlLAN_LANGUES cela m'affiche mon textbox
correspondant en changeant la valeur de la propriété Visible à True.
Le seul soucis s'est que je ne vois pas comment récupérer l'ID du
textbox a affciher. :-((((



Vous n'avez pas à connaître l'ID du contrôle si vous faîtes ça coté serveur,
il vous suffit de conserver une référence vers votre textbox. Sinon, l'ID
est accessible via la propriété du même nom, ou par ClientId si vous voulez
l'ID coté client.

<snip code>

Le problème de votre code est que vous créez plusieurs objets TextBox et que
vous n'avez qu'une seule variable myTextBox. Celle-ci contient donc une
référence vers le dernier TextBox que vous avez créé. Pour contourner ce
problème, vous pouvez utiliser un tableau par exemple.

--
Zazar