[ASP.NET/VB.NET] ImageButton dans un DataGrid...

Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011 - 28 oct. 2005 à 19:41
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011 - 13 nov. 2005 à 23:17
Bonjour,

Voilà en fait je butte sur le problème depuis hier et ça commence à m'énerver, alors je fais appel à vous

Je développe un système de gestion d'articles. Pour cela, j'ai créé un DataGrid qui contient tous les article d'une catégorie au choix. Dans ce DataGrid, pour chaque article, j'ai les informations suivantes :
- Titre
- Auteur
- Date de création
- Etat

C'est la colonne Etat qui me pose un problème... Car selon si, dans la base de données (Access), le champ "IsOnLine" = 0 ou 1, l'image doit être (respectivement) soit rouge soit verte.
Mais je n'arrive pas à définir la propriété ImageUrl du contrôle ImageButton (je l'ai appelé "ibArticleOnOff") via le code behind...

Je vous met le code, vous y verrez peut-être un peu plus clair :






&C ='>
















Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase
.Load
dgChoixArticle.Visible = True

' ImageButton pour afficher l'état de l'article (en ligne ou non)

Dim ibArticleOnOff As ImageButton = Me.Page.FindControl("ibArticleOnOff")

Dim conn As New OleDbConnection(Me
.strConn) 'Dim sSQL As String "SELECT Pages.ID, Pages.Titre, Pages.SousTitre, Pages.AuteurID, Pages.Categorie, Pages.DateCreation, Pages.IsOnLine, Membres.Login, Categorie.Texte FROM Pages, Membres, Categorie WHERE Categorie.ID Pages.Categorie AND Membres.ID = Pages.AuteurID ORDER BY Pages.DateCreation"
Dim ds As New
DataSet
Dim da As New OleDbDataAdapter(Me
.sSQL, conn)
da.Fill(ds, "Pages")

For Each dr As DataRow In ds.Tables("Pages").Rows

If dr("IsOnLine") = 0 Then
CType(ibArticleOnOff, ImageButton).ImageUrl = "../Media/Images/Icones/OnLine.gif"

CType(ibArticleOnOff, ImageButton).CommandName = "SetOffLine"

CType(ibArticleOnOff, ImageButton).CommandArgument = dr("ID")

ElseIf dr("IsOnLine") = 1 Then
CType(ibArticleOnOff, ImageButton).ImageUrl = "../Media/Images/Icones/OffLine.gif"

CType(ibArticleOnOff, ImageButton).CommandName = "SetOnLine"

CType(ibArticleOnOff, ImageButton).CommandArgument = dr("ID")

End If
Next

Me.dgChoixArticle.DataSource = ds.Tables("Pages").DefaultView
Me.dgChoixArticle.DataBind()
End
Sub

' Methode pour passer un article en mode "hors ligne" en cliquant sur le bouton dans le DataGrid...
' La colonne IsOnLine dans la base de données passe à la valeur 0.

Private Sub setArticleOff(ByVal ID As Integer)
Dim conn As New OleDbConnection(Me
.strConn)
Dim strSQL As String
= "UPDATE Pages SET IsOnLine=0 WHERE ID=@ID"
Dim cmd As New
OleDbCommand(strSQL, conn)
cmd.Parameters.Add(New
OleDbParameter("@ID", ID))
conn.Open()
cmd.ExecuteNonQuery()
Me
.dgChoixArticle.DataBind()
End Sub

' Methode pour passer un article en mode "en ligne" en cliquant sur le bouton dans le DataGrid...
' La colonne IsOnLine dans la base de données passe à la valeur 1.
Private Sub setArticleOn(ByVal ID As Integer
)
Dim conn As New OleDbConnection(Me
.strConn)
Dim strSQL As String
= "UPDATE Pages SET IsOnLine=1 WHERE ID=@ID"
Dim cmd As New
OleDbCommand(strSQL, conn)
cmd.Parameters.Add(New
OleDbParameter("@ID", ID))
conn.Open()
cmd.ExecuteNonQuery()
Me
.dgChoixArticle.DataBind()
End Sub
A mon avis, le problème vient du fait que je n'arrive pas à identifier exactement l'ImageButton dans ma page... J'ai pourtant essayé "Me.Page.FindControl("ibArticleOnOff")" mais ça n'a pas l'air de marcher...

Merci d'avance pour votre précieuse aide.

@ bientôt, Mathieu
A voir également:

3 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
29 oct. 2005 à 01:56
Bonjour,

c'est normal : Me.Page.FindControl("ibArticleOnOff") correspond à quelle ligne ? la est le problème.

Pour faire ca, il faut utiliser l'event databound de l'objet datagrid, et ensuite tu peux faire un e.item.findControl("..")

;)


<HR>
Cyril - MVS - MCP ASP
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
2 nov. 2005 à 20:53
Salut Cyril,


Merci pour ta réponse, je viens de rentrer de vacances j'essaye ta solution dans la fin de la semaine ;)

@ bientôt, Mathieu
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
13 nov. 2005 à 23:17
Salut Cyril,
Désolé pour le temps qui s'est écoulé depuis, j'ai eu quelques problèmes de réseau.


Finalement j'ai procédé autrement, n'ayant pas réussi à utiliser correctement ta proposition...


J'ai utilisé un lien plutôt qu'un bouton, et j'ai fait au préalable un test pour définir l'état de l'article (On ou Off) et afficher l'image en conséquence (image rouge si Off, et lien pour le faire passer en On ; image verte si On, et lien pour le faire passer en Off).

@ bientôt, Mathieu
0
Rejoignez-nous