Maintenant j'aimerais dans mon code behind changer le style de ma textbox par exemple:
_txt.ReadOnly = true;
Seulement si on utilise cette synthaxe il ne trouve pas _txt et je veux absolument le faire avant qu'il commence à générer des lignes et donc ne pas le faire dans le OnRowDataBound.
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 17 févr. 2009 à 07:06
bonjour,
Je ne suis pas sur d'avoir bien saisi le "je veux absolument le faire avant qu'il commence à générer des lignes". Tu ne peux bien sur pas faire cela avant de générer les lignes car justement les lignes (et donc les controles inside) n'existent pas encore ^^.
Enfin peu importe, et comme l'a dit shogun tu peux très bien utiliser l'event RowCreated (qui de toute facon sera executé avant le rowdatabound si c'est ce que tu souhaite) comme ceci par exemple:
protected void Grv_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
TextBox tb = e.Row.Cells[0].Controls[1] as TextBox;
if (tb != null)
tb.BackColor = System.Drawing.Color.Bisque;
}
}
sspizer
Messages postés38Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention23 février 2009 18 févr. 2009 à 10:20
Je vais essayer d'être plus clair dans ce que je veux faire ^^ :D.
Voila en fait quand je met une textbox dans mon gridview, il va répéter cette textbox pour chaque Objet issu du DataBound.
Par exemple:
Data = 10 Rows.
J'aurai donc 10 fois ma textbox, maintenant imaginons que j'ai envie de changer une propriété de ma textbox dans mon code behind car ça dépend d'un événement qui se passe.
Par exemple quand je reçois en session (Session["mode"] = "ReadOnly"), j'aimerais dans mon code behind changer une propriété de chaque TextBox générée par le gridview, par exemple changer ça propriété ReadOnly = true.
Maintenant deux possibilité s'offrent à moi:
1) Utiliser l'évenement OnRowDataBound récupérer dans chaque ligne ma TextBox et changer sa propriété et donc lancer 10 fois l'évenement.
2)Changer la TextBox original avant génération et affecter sa propriété ReadOnly = true avant génération. (cependant je n'arrive pas à y accéder)
Et ce que je cherche à faire c'est justement le 2) !
Voila ça devrait vous aider =).
En tout cas merci mille fois pour votre aide.
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 18 févr. 2009 à 17:34
euh dans ce cas, je dirai ptet de faire un systeme basé sur les thèmes. en fonction de ce que tu recois dans ta variable de session, tu charges un theme.
Puis dans chaque theme tu definis une textbox avec un skinID (dans un theme Textbox sans ReadOnly et dans l'autre avec) et dans ta gridview tu mets la <:asp:Textbox skinId="GvTextBox" .... />. Je ne sais pas si ca marche comme il le faudrait, mais à essayer et tu me diras.
Vous n’avez pas trouvé la réponse que vous recherchez ?
sspizer
Messages postés38Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention23 février 2009 23 févr. 2009 à 13:31
Pourquoi aller dans la complexité tout ce que je veux c'est accéder au control "_txt" que j'ai dans mon code là et le changer avant que le gridview commence à générer ces lignes.
En gros "_txt" est un modèle et j'aimerais que ce model soit changé avant que le GridView l'utilise.
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 23 févr. 2009 à 20:37
Je dois mal comprendre la question decidement. comment veux-tu modifier un control qui n'existe pas encore a l'instant t?
Pour y avoir acces, il faut obligatoirement qu'il ait été crée non? (ah moins d'utiliser un systeme de theme comme je disais précédemment)
et étant donné qu'il s'agit d'un control dépendant de ta source de données liées a la datasource comment veux-tu en modifier les propriétés dans le pre-init ou autre event precedent le databound?
Franchement je ne vois pas ce qu'il y a de mal a le faire dans le rowdatabound ou rowcreated, c'est 4 lignes de code.
sspizer
Messages postés38Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention23 février 2009 24 févr. 2009 à 10:49
Hum l'objet existe bien puisqu'on le visualise dans la page ascx. Il doit y avoir un moyen d'y avoir accès avant que le gridview commence à l'utiliser. Je pense que ca peut marcher dans le rowdatabound mais en fait mon soucis cest ca:
Si on a :
< asp
:TextBox ID
="_txt" Value
='
<%# Eval("Toto") %>'
runat="server" ReadOnly="true" />
Maintneant on veut pour une raison X qu'il ne bind pas Value!
Si je le faisais dans le RowCreated ou RowDataBound, j'arriverais au moment où il aurait déjà bindé. Alors que si j'y accéde avant génération non seulement j'empeche le binding et en plus ca sera general a toutes les lignes de mon gridview
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 24 févr. 2009 à 21:25
non l'objet n'existe pas. Le template de l'objet existe mais l'objet sera crée uniquement si des données sont liés la grid. S'ils n'y a pas de données liées ton controle n'existera pas. ainsi il faut attendre de savoir s'il y a des données avant de créer le controle. Et cela se passe lors d'un rowdatabound.
D'autre part,la solution de shogun semble tout a fait correcte.