Atteindre les contrôles d'un UserControl inséré dans un FormView

Résolu
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010 - 27 nov. 2006 à 09:35
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010 - 28 nov. 2006 à 16:22
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

SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
28 nov. 2006 à 16:22
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
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
27 nov. 2006 à 20:27
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
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
28 nov. 2006 à 09:07
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.
0
Rejoignez-nous