IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

lien dynamique dans champ gridview [Débutant]


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Par défaut lien dynamique dans champ gridview
    Bonjour à tous,

    Je souhaite mettre un lien vers une page dans un gridview qui s'adapte en fonction de la ligne. Par exemple pour le numéro 42, mon lien sera "page42.html".

    Actuellement, je travaille dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub GVCmd_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
    J'ai mis un buttonfield et donc je voudrais que lorsque l'on clique sur l'image d'une ligne, on exécute le lien.

    j'ai tenté d'utiliser un hyperlink :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim hl As HyperLink = Nothing
    hl.NavigateUrl = "page" & e.Row.DataItem("num") & ".html"
    e.Row.DataItem("lien") = hl
    mais j'ai cette erreur :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Est-ce possible de relier l'hyperlink au buttonfield , si oui comment ? sinon que faire ?

    Pouvez vous m'aider svp, me dire quelles objets utiliser ?


    Merci d'avance.

    [edit : je précise que je n'utilise pas un hyperlinkfield parce que je voudrais avoir une image en lien et je n'ai pas vu que c'était possible avec...]

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Pourquoi utiliser un ButtonField ?

    Je te conseille plutôt d'utiliser un TemplateField, un peu comme ceci :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <asp:GridView ID="myGridview" runat="server" OnRowDataBound="myGridView_RowDataBound">
        <Columns>
            <asp:BoundField HeaderText="Col 1" DataField="value1" />
            <asp:BoundField HeaderText="Col 2" DataField="value2" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lblMyLink" runat="server"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

    Et dans le code behind:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Label myGridViewLabel = e.Row.Cells[2].FindControl("lblMyLink") as Label;
     
            if (myGridViewLabel != null)
            {
                myGridViewLabel.Text = string.Format("<a href='/Page{0}.htm'>{1}</a>", e.Row.Cells[0].Text, "<img src='/Images/lienVersImage.jpg' alt='Cliquez ici' />");
            }
        }
    }

    On insère la valeur de la colonne "Col 1" dans le lien (pour le numéro de la page), et le l'image sur laquelle l'utilisateur pourra cliquer.

    Je n'ai pas testé ce code donc il se peut qu'il y ait quelques ajustements à faire, mais la logique est là ;-)
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Par défaut
    en fait oui, en réfléchissant un peu, je m'étais rabattu sur un template :p

    ton code behind va m'aider

    merci beaucoup !

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Par défaut
    Mon code html est identique, et j'ai une erreur dans mon code behind que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim lbl As Label = e.Row.FindControl("lien")
                Dim s As StringBuilder = New StringBuilder()
                s.Append("<a href='page" & e.Row.DataItem("num") & ".htm'>" & "<img src='img/img001.png' alt='Cliquez ici' /></a>")
                lbl.Text = s.ToString
    J'ai cette erreur à cette ligne : lbl.Text = s.ToString

    La référence d'objet n'est pas définie à une instance d'un objet.
    A mon avis, ça vient de mon label mais comment faire pour résoudre ce problème ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 312
    Par défaut
    J'ai cette erreur à cette ligne : lbl.Text = s.ToString
    Comment est nommé ton lien dans ta page aspx ?

    Dim lbl As Label = e.Row.FindControl("lien")
    Il ne trouve pas "lien", ça ne doit pas être nommé de la même manière.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 35
    Par défaut
    Citation Envoyé par nah666 Voir le message
    Comment est nommé ton lien dans ta page aspx ?
    Il y a une importance ? c'est exactement le meme nom mais je déclare justement un nouveau label qui est censé le trouver, non ?


    Il ne trouve pas "lien", ça ne doit pas être nommé de la même manière.
    si justement... j'ai quand même vérifié !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2007] Ajout des lien dynamique dans une liste déroulante
    Par nouvintou dans le forum SharePoint
    Réponses: 2
    Dernier message: 15/03/2011, 11h31
  2. Réponses: 3
    Dernier message: 07/09/2010, 10h07
  3. Réponses: 9
    Dernier message: 23/03/2010, 17h52
  4. Réponses: 9
    Dernier message: 28/03/2009, 19h31
  5. Un bouton Image dynamique dans un GridView
    Par zooffy dans le forum ASP.NET
    Réponses: 16
    Dernier message: 03/06/2008, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo