2 questions sur le repeater

Résolu
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007 - 17 juil. 2005 à 14:03
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007 - 22 juil. 2005 à 10:35
Salut

Voilà j'ai deux questions simples sur l'utilisation du repeater :

1- Est il possible de mettre des cases à cocher sur chaque ligne du repeater ? Si oui comment ?

2- Comment utiliser les évènements du repeater comme par exemple le "onmouseover" ?

Je vous remercie pour les réponses

DevilYann,
Programmer c'est mon métier mais pas ma passion...

20 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 juil. 2005 à 09:39
si t'as bien mis un runat=server normalement non

par contre rpti.findcontrol c'est pas possible comment veux tu qu'il te trouve un controle dans ton repeater alors que t'as plusieurs ligne ? donc plusieurs controle ? il faut se placer sur ta ligne !


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
3
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
22 juil. 2005 à 10:35
J'ai trouvé pour le problème des caractères bizarres.
En fait en voulant faire du zèle de présentation dans mon code HTML, je sautais une ligne après les balises <tr> :

<td id = "codorg" runat="server">
<%# DataBinder.Eval(Container.DataItem,"Codorg") %>
</td>

Or il ne faut pas, il faut le laisser sur la même ligne :
<td id = "codorg" runat="server"><%# DataBinder.Eval(Container.DataItem,"Codorg") %></td>

Faut que je me calme dans la présentation, ca me jouera un tour... ;o)

Ce topic est donc définitivement clos
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 juil. 2005 à 15:13
1. Tout simplement.



Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
17 juil. 2005 à 15:32
Merci Cyril pour la première réponse.
Je suppose qu'il daudra faire un "FindControl" pour récupérer la valeur du coche ?

Pour la deuxième question j'aimerai faire un truc du genre :
Quand on passe le curseur de la souris sur une ligne du repeater, pouvoir changer automatiquement la couleur de la ligne survolée pour remettre son ancienne couleur quand on enleve le curseur.
Comme j'ai vu que l'évènement "onmouseover" (et plein d'autres ) existait, je me demandais comment l'utiliser.
Mais s'il y a une autre méthode je suis preneur...

DevilYann,
Programmer c'est mon métier mais pas ma passion...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 juil. 2005 à 15:51
Oui il faudras faire un findcontrol sur e.item dans l'evenement databound du datagrid c'est à dire quand asp.net chargera les données pour chaque ligne

Ce que tu veux faire c'est coté client (va absolument falloir que j'ecrive un truc la dessus) donc pour faire ce que tu veux, il va falloir passer par CSS ou javascript.

Vu que tu as l'air de débuter en HTML j'ai justement fait un article "pour toi" http://blogs.developpeur.org/cyril/articles/9089.aspx ;)

Sinon il suffirait de mettre une classe sur le tableau et de mettre en CSS

table.MaClass tr:hover {background-color:#F0F;}

mais au grand diable IE ne comprend pas le :hover sur autre chose que les a :/ on a bien la solution du csshover.htc (google) mais ca se complique trés vite avec des choses trés complexes. Une autre solution est de passer par du javascript, en gros

tu fais une fonction

function bidule(id)
{
var trs = document.getElementById(id).getElementsByTagName('TR');

for( i = 0; i < trs.lenght ; i ++)
{
trs[i].onmouseover = function(){trover(this);};
trs[i].onmouseover = function(){trout(this);};
}

function trhover(elmt)
{
elmt.style.backgroundColor = '#F0F';
}

function trout(elmt)
{
elmt.style.backgroundColor = '#FFF';
}

Voila rapidement en gros le javascript :) mais tu peux aussi essayer le fichier csshover.htc qui marche bien dans les cas simples (moi j'aime pas car je travaille sur des choses trés complexes en CSS et javascript et c pas bon :p)

le code ci dessus est bien sur fournis avec des bugs ;) (ou alors t'as de la chance :p)

}


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
17 juil. 2005 à 21:47
Ok merci pour ton message.
Je vais essayer ça demain au boulot pour voir ce que je peux en faire.
Je continuerai à poster des messages si j'ai d'autre soucis. Cela pourra toujours servir aux autres.

PS : cela fait un moment que je n'ai pas fait de HTML. Apres 4 ans de C, VB et C#, j'ai du mal à m'y remettre car c'est de l'histoire ancienne.
Merci de me refraichir la mémoire...

DevilYann,
Programmer c'est mon métier mais pas ma passion...
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
18 juil. 2005 à 13:19
Tant que j'y suis (si j'abuse il faut le dire...) comment fait-on pour connaitre le texte d'une colonne du repeater ?
Je parcours tout le repeater et les lignes cochées par l'utilisateur vont être supprimées de la base. Mais pour cela j'ai besoin de connaitre la valeur de la première colonne de la ligne cochée...
J'ai utilisé un databind pour lier les données.

Merci
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
18 juil. 2005 à 13:34
les repeater n'ont pas de colonne !!! juste des lignes ...

Donc j'ai pas trop compris la question :S

pour connaitre le texte d'une texbox d'une ligne, il faut savoir la ligne puis ensuite tu fais un findcontrol sur la ligne ...


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
18 juil. 2005 à 13:48
Voici une partie du code de mon repeater avec la case à cocher et un code qui s'affiche à côté :

--------------------------------------

<tr bgcolor "#ffffff" width "200" >
<td align=center>

</td>
<td align=center>

<%# DataBinder.Eval(Container.DataItem, "Codorg") %>

</td>
</tr>
--------------------------------------

Comment connaitre la valeur de "Codorg" une fois que j'ai détecté que la case est cochée ?...
Sachant que "Codorg" n'est pas un textbox mais une valeur databindée avec un dataset.
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
19 juil. 2005 à 13:20
Personne ne sais comment faire ??... :o(
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 juil. 2005 à 14:48
arf je pensais avoir répondu :(

(re)

Ton code HTML est horrible !!! pourquoi faire un tableau pour des données non tabulaire ? ca tout le monde l'utilise mais surtout pourquoi utiliser des horribles font ??? quand je dis horrible je pese mes mots ...

au lieu de

<td align= center>

<%# DataBinder.Eval(Container.DataItem, "Codorg") %>

</td>
mais ca ...

<td style ="text-font: smaller navy Verdana, Arial; font-weight:bold; text-align:center">
<%# DataBinder.Eval(Container.DataItem, "Codorg") %>
</td>

et encore le normalement on a pas besoin de tableau, regarde ce que j'ai fait sur www.feed247.com/contact.aspx?skinname=route

sinon pour recuperer ton controle, il "suffit" de recuperer ta ligne puis de faire un findcontrol ... mais quand est-ce que tu veux recuperer la ligne ? sur une bouton ? sur quoi ?


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
19 juil. 2005 à 15:11
Je ne regarde pas ton code dans le détail mais je me presse de répondre à ta question. Je m'en occuperrai un peu plus tard pcq j'ai un autre truc sur le feu.

Je veux récupérer mon code quand l'utilisateur cliquera sur un bouton "Ajouter".
Et pour toutes les lignes cochées de mon repeater, je les ajouterai (gràce à "codorg" qui fait partie de la clé primaire) à la table de base de donnée.
Voilà.

re-re-PS : dans ton exemple le findcontrol portera sur quel ID pour récupérer la valeur de "codorg" ?

PS : dsl pour mon code html horrible... mais pkoi le font est si horrible (voir plus) que ça ?...
re-PS : après le code, j'ai une autre "colonne" avec le libellé de code ce qui fait au final :

case à cocher -------- code organisme ------- libellé organisme
[] V810 Libellé V810
[x] V820 Libellé V820
[] V830 Libellé V830
[] V840 Libellé V840
etc...

Au clic sur le bouton "Ajouter", ajout dans la table de ma base du code organisme "V820"
J'espère que j'ai été assez précis cette fois ci :o)
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
19 juil. 2005 à 15:59
Bon ok j'ai vu qu'il vallait mieux utiliser l'option "style" qui marche très bien avec une jolie boite de dialogue qui permet d'appliquer pas mal d'effet.
Encore un bon point pour toi ;o)

quand j'aurai un moyen de récupérer le code organisme , j'aurai fait 80% du boulot souhaité...
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 juil. 2005 à 16:38
non la balise style ne marche pas trés bien :p enfin bon, les standards CSS etc... ca n'a pas l'air ton truc ;) regarde mon article qui parle de ca : http://blogs.developpeur.org/cyril/articles/9089.aspx

pour la balise font c'est horrible car un document html on ne met QUE des données pas de fioritures de présentation, ca c'est le role de CSS ;) pour info c'est ce que j'ai fait avec le menu de ce site, ca m'a permis de faire passer le menu de 120ko à 18ko ...

pour ton problème il faudra je crois iterer sur chaque ligne de ton datagrid, donc en gros sur le bouton, tu vas chercher le datagrid, puis faire une sorte de

for each r as datarow in me.dg1.datagrid.rows()
r.findcontrol("")
next

bien sur c'est encore du code approximatif ;)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
19 juil. 2005 à 16:59
Pour ce qui est de la boucle des lignes de mon repeater, je l'ai fait depuis longtemps.
Récupérer la valeur cochée de mon checkbox c'est fait aussi (en utilisant un findcontrol).
La seule chose qui me manque actuellement, c'est de récupérer la valeur du code organisme.
Or tu me proposes de le faire avec Findcontrol. Je veux bien mais je n'ai pas d'id sur ce code organisme... Je ne peux pas faire Findcontrol("CodOrg"), c'est pas possible... Doit bien y avoir un moyen quand même... :'(

Je donne le bout de code qui permet de récupérer la valeur cochée d'un repeater appelé "rpt_Organismes" contenant des cases à cocher s'appelant "cb_SupprAffectation", cela pourra toujours servir à qqun :

foreach(RepeaterItem rpti in ((Repeater)FindControl("rpt_Organismes")).Items)
{
CheckBox chk_Sel = (CheckBox)rpti.FindControl("cb_SupprAffectation");
if(chk_Sel != null && chk_Sel.Checked)
{
// C là que je suis sensé récupérer la valeur de Codorg...
}
}

Ce bout de code marche, c'est testé.

PS : promis je vais essayer de me mettre au CSS même si le temps pour réaliser l'applic défile...
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 juil. 2005 à 17:27
oups j'avais mal compris :p

donc comme il n'y a pas d'ID la seule solution c'est d'en rajouté un ;)

<td id="truc" runat="server" style="...">
<%# DataBinder.Eval(Container.DataItem, "Codorg") %>
</td>

la le problème c'est que ca va te balancer un uniqueID sur chaque ligne donc un nom un rallonge donc un agrandissement de la page, mais c'est la solution la plus simple.

perso, moi je ferais de la bidouille ;) et il me resterais seulement le minimum de HTML possible, juste les données, un peu de html quand meme 1 ou 2 id puis c'est tout ;)

CSS faut avoir le temps pour s'y mettre, moi je suis étudiant et donc j'ai le temps, surtout que je viens de me taper une année de fac inutile, alors avec la fac j'ai eu BEAUCOUP de temps libre pour apprendre.

CSS c'est pas compliqué, mais c'est surtout l'habitude :) mais déja si tu oublies les balises font, b etc... et que tu met des styles ce sera deja pas mal ;) prochaines etapes mettre des classes, utilisez les tableaux pour des données tabulaire, utilisez une sémantique correcte etc.... c'est loin d'etre evident, mais tout à fait possible, regarde sur la page d'accueil de CodeS-SourceS, j'ai UN tableau de présentation seulement pour compatibilité avec les vieux dinosaures, et tout le reste et dans un fichier css http://www.aspfr.com/dccs/2.csss normalement :p ca permet de mettre pleins d'infos tout en gardant une page trés légére :)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
20 juil. 2005 à 08:43
J'ai bien rajouté l'ID dans ma balise au bon endroit mais quand je fais de la sorte :

rpti.FindControl("codorg")
la fonction me retourne null contrairement à rpti.FindControl("cb_SupprAffectation")....

Si je comprends bien, on peut faire un "FindControl" seulement sur les contrôles de la ligne... Il manquerait une fonction du type "FindID"...

Grrr..... Je vais criser...

Pendant ce temps je vais préparer ma feuille de style avec mes classes pour alléger le code... :o)
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
20 juil. 2005 à 11:23
Ok c'est moi qui me trompait... J'avais oublié le runat=server... Désolé...

Par contre pas de problème j'étais bien sur une ligne du repeater quand je faisais le FindControl.

J'ai donc mis la syntaxe suivante :

foreach(RepeaterItem rpti in ((Repeater)FindControl("rpt_Organismes")).Items)
{
CheckBox chk_Sel = (CheckBox)rpti.FindControl("cb_SuppAffect");
if(chk_Sel != null && chk_Sel.Checked)
{
string str_Codorg = ((System.Web.UI.HtmlControls.HtmlTableCell)rpti.FindControl("Codorg")).InnerText;
}
}

J'ai encore un tout petit problème... Cela me donne :
str_Codorg = "\r\n          \t\t\t\t\tV790\r\n\t\t\t\t\t\t"...
"V790" est noyé dans les caractères de présentation... C normal ?

PS : promis, une fois que j'ai ce code, je me tais pendant au moins 2 semaines vu que je suis en vacances... ;o)
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 juil. 2005 à 11:29
les \r\n etc... ca vient de ta bdd, c'est en fait des sauts de ligne, donc la faut regarder dans la bdd pour faire ce que tu veux, c'est bizarre comme truc, mais c'est possible, par contre je sais pas comment résoudre ca :p

va faire un tour sur www.vbfrance.com ;)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_DevilYann Messages postés 57 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 12 septembre 2007
20 juil. 2005 à 11:58
Bon ok merci, je t'ai assez embêté comme ça.
Je te remercie de ta patience et de tes conseils.

Je commence bien à me familiariser avec le CSS et les balises de présentation disparaissent comme neige au soleil.

A une prochaine
0
Rejoignez-nous