Probleme de focus sur datagrid

Signaler
Messages postés
16
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
18 octobre 2005
-
Messages postés
16
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
18 octobre 2005
-
Je dispose d un datagrid avec des textbox au niveau du footer.
Mon probleme est que pour acceder a mon footer, je suis obliger de descendre avec la fleche du bas a droite de ma page car j ai beaucoup de ligne dans mon datagrid.
Je voulais savoir si il etait possible par le biais d un click sur un linkbutton, le focus se met directement sur mon premier textbox du footer
Je demande cela car lorque je clique sur le linkbutton, je rends visible mon footer et plein d autres affaires en meme temps.

J ai trouvé sur developpez.com le code suivant :

public void setFocus(System.Web.UI.WebControls.WebControl champ){
//Champ est le webcontrol sur lequel on veut mettre le focus
string s;
s = "<script language= "javascript">document.getElementById('" +
champs.ClientID + "').focus()</script>";
Page.RegisterStartupScript("focus", s);
}

Ca marche bien sur un textbox normal, mais je n arrive pas a l utiliser sur un textbox dans un datagrid.
Merci poour votre aide car je galere dessus depuis plusieurs jours

8 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
Es tu sur que tu recuperes l'id de ton controle ? car si oui il n'y a
pas de raison, mais je pense que lorsque tu ecris ceci tu ne connais
pas encore l'id, regarde dans l'html si tout est correcte, car
normalement ca devrait fonctionner

<hr>Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
100
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
27 janvier 2006
1
Le truc, c'est que getElementById s'est utile pour les calques (div, span ce genre de choses), or toi tu veux atteindre une textbox...



C'est la que la galere commence...



Si tu regardes la sources de ta page, tu va obtenir pour ta textbox un truc du genre:



ta_textbox"



le ctl4 est généré par rapport aux objets sur ta page donc grossomodo aux nombres de lignes de ton datagrid...



Si tu arrives a récupérer ce nombre tu pourra faire ton focus,



et pour trouver ton objet tu fais un :



document.all[tagrille__ctl4_ta_textbox]





Cab
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
document.all :-|

document.getElementById('truc') ! (qui lui est standard)

document.all ca n'existe pas (enfin si mais seulement pour IE donc non ;))

et puis pour ce qui est des calques : un calque n'existe pas ! ce sont des elements, des balises etc... une balise p n'est pas plus un calque qu'un div, je te renvoie vers la page du CCC (comité contre les calque) http://blog.alsacreations.com/2005/05/16/153-humour-comite-contre-les-calques ;)

Sinon, pour ce qui est du problème, il faut réussir à recuperer le clientID du controle qu'il veut donner le focus, le clientID est la propriété ID html cad tagrille__ctl4_ta_textbox


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
100
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
27 janvier 2006
1
lol...



tu craques Cyril avec ton CCC...



Pour le reste, on vire le all, tu fais un



document.ta_form.ta_textbox... ou document.forms["ta_form"].ta_textbox...



ou tu met le fameux getElementById a la Jesus' style...





Cab
Messages postés
16
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
18 octobre 2005

Salut,

Deja merci pour m avoir repondu aussi rapidement.
Pour ce qui est de mon probleme, comme je vous l ai dit, le textbox ce trouve dans le footer de mon datagrid. Et dans l exemple que j avais trouvé, il y avait un moment "System.Web.UI.WebControls.WebControl champ", or comme il se trouve dans le datagrid, je crois que c est de la que viens l erreur....mais c est une hypothese biensure.Je viens de mettre comme vous avez dit "document.forms["ta_form"].ta_textbox" mais rien ne se passe.
Pouvais vous me reecrir la fonction entierement car je ne voix pas trop ou vous voulez en venir.....merci d avance
Messages postés
100
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
27 janvier 2006
1
En fait, ta textbox que tu appelles "ta_textbox" dans ton code et qui
est contenu dans ton datagrid "tagrille" va ensuite s'appeller en fait:



tagrille:_ctlX:ta_textbox



X: étant a peu pres le n° de ligne ou elle se situe

tagrille: c'est le nom de ta grille

ta__textbox c'est le com de ta textbox...



Pour vérifier ce que je dis, tu charges ta page et tu fais un click droit puis afficher la



source et là tu cherche ta Textbox...et tu verra plus clairement ce que je t'explique...



Une fois que tu as compris ça, tu relis mon 1er post...je t'explique tout dedans...



et tu en conclura:



document.getElementById("tagrille:_ctlX:ta_textbox")



et c'est la que tu peux commencer a pleurer pour recupérer le n° de ligne ( le X du début du post :) )



Cab
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
grrrrr (re)

l'attribut name ne sert plus à rien, c'est une complete aberation de l'avoir laissé (j'arrive d'ailleurs pas à comprendre ils met pas la meme valeur à la propriété name que id ...)

mais il faut utiliser l'id de l'element !

sinon pour le pourquoi qu'il fait ca, ca sert à avoir un numéro unique, car on ne peut evidemment pas avoir 2 id identique dans une page ..

pour la facon dont il est généré, c'est simple, le controle implemente l'interface inamingcontainer ... c'est grace à cet interface qu'on pourra avoir des id unique.

l'id unique est construit suivant les controles parents, il va aller chercher le clientID du controle parent qui le contient jusqu'a arriver à l'objet page en cours. dans une datagrid, le textbox, est contenue par la page, le datagrid, et la ligne, comme la ligne n'a pas d'id asp lui en assigne un par défaut : ctl comme la ligne se repete il met un numéro en partant de 0.

dans ton cas, je suis pas sur que tu es de problème pour recuperer le clientID du textbox, car ton controle est dans le footer du datagrid, par contre je ne sais pas du tout comment acceder au footer d'un datagrid ...

ca doit etre possible, mais j'aime absolument pas le datagrid ! (pour ne pas dire que je le deteste) et par conséquent je m'en sert jamais ...


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
16
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
18 octobre 2005

Salut les gas,
Je viens de trouver une solution et je n avais pas vu que vous m aviez repondu....merci quand meme .
Donc dans ma solution, je reprend la fonction public void setFocus decrit en haut.
Puis dans le linkbutton, je mets le code suivant :
//sur -1, c est pour les textoxs du footer, sinon s il y avait eu des numeros de page, on aurait mis -2

System.Web.UI.Control footer = BackdoorUserGrid.Controls[0].Controls[BackdoorUserGrid.Controls[0].Controls.Count-1];



//recuperation du textbox du footer


TxtBox champs= (System.Web.UI.WebControls.TextBox)footer.FindControl("Ajout1");


setFocus(champs);

Dans mon cpde, Ajout1 est le id de mon textbox.
En haut, j ai fait une faute de frappe, c est champs et non champ.....mais je pense que vous l auriez remarquer