Atteintre toutes les textBox d'un FormView

Signaler
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Messages postés
5
Date d'inscription
lundi 27 juillet 2009
Statut
Membre
Dernière intervention
16 avril 2013
-
bonjour,
Je travaille sur VS2005 et asp.net 2.0 (vb)
je veux attribuer à chaque controle d'un formview un petit javascript "onfocus"
Mais ma sub, en asp.net 1.1 sans formview, commencait  par qqchose comme


Sub maSubFocus(ByVal Conteneur As Control)
  Dim conten As Control = Page.FindControl(Conteneur.ClientID)
  Dim Contr As Control
   For Each Contr In conten.Controls ...etc


où le conteneur était le formulaire (Form1) de ma page


Maintenant,  je n'arrive pas à lister toutes les textbox du formView (ici en mode insert).
Quand je mets :
for each Contr In MonFormView.Controls ... je n'obtient que la childTable
Pourtant, l'instruction
Dim maTextBox as textBox = MonFormView.FindControl("maTextBox ") est bien licite.
Que faire ?
merci de vos lumières
Gilles

4 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
la méthode FindControl est recursive, elle va chercher dans les enfants d'un controle et les enfants des enfants, etc...

dans ton cas c'est normal que tu as bien un Table car c'est le conteneur d'un formview il faut ensuite parcourir sa collection de controles et attrapper seulement ceux qui t'interesse.

Mais tu peux peut etre faire ce que tu veux en javascript, ce sera plus propre, plus rapide et plus propre (oui je begaye)

en gros

var fnc = function(tableID){

  var table = document.getElementById(tableID);
  var elements = table.getElementsByTableName('input');
  for (int i = 0; i < table.length; i++){
    if (elements[i].type == 'text'){
         elements[i].onmachin = textboxFormView_machin;
    }
  }

}

var textboxFormView_machin = function(){
   this.value; //obtient la value du textbox
}

il te reste plus qu'a faire appelle à la fonction fnc avec le clientID du tableau ...
<hr />Cyril - MSP - MCTS ASP.net & SQL
Messages postés
12
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
17 juin 2007

Bonjour,

J'ai le même problème, je cherche à modifier tous les labels de mon formview en mode edit au runtime, mais apparement je n'arrive pas à mettre mon code au bon endroit et/ou je ne trouve pas les controls...

Donc où dois-je placer ce code (Page_Load, monFormView_ItemCreated, monFormViewItemDatabound ?) et que dois-je modifier pour que ça marche?

if (monFormView.CurrentMode ==
FormViewMode.Edit)
{

   foreach (
Control ctrl
in monFormView.Controls)
   {

      if (ctrl
is
Label)
      {
         
Label lbl = (Label)ctrl;
         lbl.BackColor =
"#ff0000";

      }
   }
}

Merci d'avance !
Messages postés
237
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
31 août 2009

Apres parcours de l objet formview voila ce que g pu trouver :
        Dim cc As ControlCollection = FormView1.Controls.Item(0).Controls.Item(1).Controls.Item(0).Controls

        For Each ctrl As Control In cc
            If TypeName(ctrl) = "TextBox" Then
                Dim txt As TextBox = CType(ctrl, TextBox)
                If txt.TextMode = TextBoxMode.MultiLine Then
                    txt.Attributes.Add("onfocus", "javascript:toggleEditor('" + txt.ClientID + "');")
                    txt.Attributes.Add("onlostfocus", "javascript:toggleEditor('" + txt.ClientID + "');")
                End If
            End If
        Next

Les attributs sont bien ajoutes cependant cela n est pas pris en compte dans le rendu HTML, je ne comprens pas encore pkoi ....
Messages postés
5
Date d'inscription
lundi 27 juillet 2009
Statut
Membre
Dernière intervention
16 avril 2013

j'ai la solution à ton problème:
il faut le mettre dans la partie PreRender de ton formview