Afficher / masquer boutton dans Datalist d'après item

Signaler
Messages postés
4
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
6 janvier 2011
-
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
-
Bonjour,

j'ai passé toute la nuit et là j'avoue ne pas trouver le bout qui me manque... j'espère que vous pourrez m'aider !

J'utilise donc un datalist pour afficher une liste de produits depuis une table SQL. jusque là tout va bien.
Pour chaque enregistrement, j'ai label qui m'affiche "VENDU" ou "" (vide), venant directement de ma table.
en dessous, j'ai un bouton "commander", qui en fonction du contenu de mon label précédent s'affiche ou ne s'affiche pas.
si VENDU, je n'affiche pas le bouton, si vide, j'affiche le bouton.

donc pour arriver à cela, je pensais accéder dans l'action "ItemDatabound" de mon Datalist... en utilisant une boucle pour chaque ligne / chaque enregistrement afin de controler mon bouton.

ce qui donne en pratique :

Protected

Sub DataList1_ItemDataBound...
For

Each ligne
As DataListItem
In DataList1.Items

Dim etat
As Label =
CType(ligne.FindControl(
"label4"), Label)

Dim ajoute
As HyperLink = ligne.FindControl(
"ajoute")

If etat.Text =
"VENDU"
Then
     ajoute.Visible =
False
End
If

Next

end sub

Le problème qui en ressort, c'est que pour mon dernier enregistrement (toujours sur le dernier quelque soit le nombre d'enregistrements), mon bouton n'est pas controlé : si j'ai "VENDU" dans le label, mon bouton s'affiche quand même.
Par contre tous les autres enregistrements fonctionnent bien

J'ai essayé de multiple méthode pour faire la boucle mais je retombe systématiquement sur le même problême...

une idée ? il manque quelque chose ?

sous visual studio 2005

Merci de vos lumières  !

Jonat

2 réponses

Messages postés
4
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
6 janvier 2011

bon ben il fallait que je poste le message pour trouver à le résoudre.

Au lieu de mettre ma boucle dans ItemDatabound, je l'ai mise dans "Prerender" tel que je viens de le voir dans un autre post...

mais je m'interroge toujours pour savoir pourquoi mon dernier enregistrement n'est pas pris en compte dans ItemDatabound...
Messages postés
417
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
21 juillet 2010
1
Bonsoir,

Sur l'itemdatabound, tu ne dois pas faire une boucle pour atteindre les données de tes contrôles.
En fait, l'itemdatabound opère en quelque sorte lui même la boucle puisqu'il a lieu à chaque fois qu'un item de ta datalist a été lié aux données.
Tu pouvais faire simplement :
Protected Sub DataList1_ItemDataBound...
Dim etat As Label = CType(e.item.FindControl("label4"), Label)
Dim ajoute As HyperLink = ctype(e.item.FindControl("ajoute"), HyperLink)
If etat.Text = "VENDU" Then
     ajoute.Visible = False
EndIf
End Sub

La boucle que tu ajoutais avait donc lieu à chaque itemdatabound, mais sur une liste partielle. Or, lors de l'itemdatabound, l'item bindé n'est pas encore compté parmi les items de ta datalist. Donc, lors du dernier itemdatabound, ta boucle se faisait du premier item à l'item n-1. Lors de l'avant-dernier itemdatabound, elle s'était déjà faite, mais du premier item à l'item n-2, etc. C'est pourquoi ton dernier item ne pouvait jamais être traité. 

GGtry