Atteindre les contrôles d'un UserControl inséré dans un FormView [Résolu]

Signaler
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Bonjour,
J'ai inséré un userControl "monUserControl" dont l'ID est "monUserControl_1" dans un EditItemTemplate d'un FormView d'ID "MonFormView"
monUserControl contient une textbox "MaTextBox" sur laquelle je compte agir dans le code.

Dans la sub
MonFormView_DataBinding(....)Handles MonFormView.DataBinding
Je fais :
Dim monUserControl_1 As monUserControl
monUserControl_1 = CType(fvActi.FindControl("monUserControl_1"), monUserControl)
Dim MaTextBox As TextBox = CType(monUserControl1.FindControl("MaTextBox "), TextBox)

Eh Bien l'pplication me renvoie "Nothing", et ne trouve pas les contrôles, ni monUserControl, ni MaTextBox !!
J'ai essayé aussi en vain :
Dim MaTextBox As TextBox = CType(MonFormView.FindControl("MaTextBox"), TextBox)
Et aussi
Dim MaTextBox As TextBox = CType(MonFormView.Row.FindControl("MaTextBox"), TextBox)

Comment trouve-t-on une textbox d'un UserControl d'un EditItemTemplate d'un FormView ?
Merci de vos lumières
@+Gilles

3 réponses

Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

Bon, j'ai trouvé une astuce , pas très élégante , mais qui marche. Pour ceux que ça intéresse, la voici :

1. j'ai remarqué en affichant la source, que aucun contrôle de la page ne porte l'ID "monUserControl" ou "monUserControl1" ou même "MonFormView_monUserControl1". d'ou l'échec de la méthode findControl.
2. j'ai remarqué que la textBox avait l'IDClient : "MonFormView:monUserControl1:MaTextBox"
je la trouve donc avec :
Dim MaTextBox As TextBox = CType(Page.FindControl("MonFormView:MonUserControl1:MaTextBox"), TextBox)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??> 3. J'adjoint une textbox invisible "MaTbInvisible" à l'EditItemTemplateet je la lie à la source de données avec u ne propriété Text ='<%# Bind("MonChamp") %>'

4.Enfin , dans le page_load je recopie le contenu de MaTextBox dans MaTbInvisible
 
Dim MaTextBox As TextBox = CType(Page.FindControl("MonFormView:MonUserControl1:MaTextBox"), TextBox)

IfNot IsNothing(MaTextBox) Then
   Dim MaTbInvisible As TextBox = CType(MonFormView.FindControl("MaTbInvisible"), TextBox)
    MaTbInvisible.Text = MaTextBox.Text
EndIf



Pas élégant, ça fait vraiment celui qui maitrise pas, mais quand on trouve pas...
Si quelqu'un peut me dire pourquoi la liaison n'est pas bidirectionnelle, quand même...
@+Gilles
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonsoir,

il doit existe un evenement itemcreating ou created et tu dois trouver dans e ce qu'il te faut, en tout cas je passerais par cet event plutot que le databinding

<hr />Cyril - MVS - MCP
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

je voulais passer par le databinding car mon problème était:



une textbox normale dans l'EditItemTemplate du FormView et qui est liée à un champ de table s'écrit:


' TextMode="MultiLine" ValidationGroup="parten" Width="200px">


  et dans l'user control, sa source est:
asp:TextBox ID="Matextbox" runat="server" Text='<%# Bind("MonChamp") %>'(j'ai BLUFFE)
 et dans le code client, c"est identique, ID mises à part.


or dans la première, il y a liaison bi-directionnelle (affichage ET UPDATE) tandis que dans la seconde il n'y a qu'affichage, l'UPDATE ne s'exécute pas.
d'où mon idée de rétablir la liaison bidirectionnelle dans le databinding, je ne sais pas encore comment !


Au fait, j'ai bien essayé, le e  de MonFormView.itemCreated ne me propose pas grand chose d'intéressant. le problème reste entier.