Afficher / masquer boutton dans Datalist d'après item
jonf
Messages postés4Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention 6 janvier 2011
-
4 févr. 2009 à 12:41
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 2010
-
4 févr. 2009 à 22:15
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
A voir également:
Afficher / masquer boutton dans Datalist d'après item
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 20101 4 févr. 2009 à 22:15
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é.