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

Visual Studio Discussion :

Rendre le HeaderTemplate dynamique


Sujet :

Visual Studio

  1. #1
    Mvu
    Mvu est déconnecté
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Points : 105
    Points
    105
    Par défaut Rendre le HeaderTemplate dynamique
    Bonjour,
    Les composants Data come Gridview, DetailsView etc sont super efficaces mais j'ai une grosse frustration qui est la suivante: pouvoir modifier dynamiquement le HeaderTemplate.
    Je m'explique: lorsqu'on transforme un BoundField en TemplateField, c'est très bien mais c'est statique.
    Comme mon site est bilingue, français/néerlandais, j'utilise une fonction appellée getMsg() qui ravaille sur un pLang = request.querystring("Lang"). Si pLang = "Fr" il me renvoie le message en français. Si pLang = "Nl" en néerlandais.
    Et j'aimerais profiter de cette fonction dans mon Gridview par exemple.

    Donc si j'utilise le TemplateField j'obtiens ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <HeaderTemplate>
        <asp:Label ID="Label2" runat="server" Text="Blabla"></asp:Label>
    </HeaderTemplate>
    et j'aimerais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <HeaderTemplate>
              <asp:Label ID="Label2" runat="server" Text='<%=getMsg(753, "Zip", pLang)%>'></asp:Label>
    </HeaderTemplate>
    Malheureusement il ne se passe rien.
    Comment pourrait-on faire ?
    Marc Van Uytvanck
    Bruxelles

  2. #2
    Membre éclairé Avatar de Pilru
    Homme Profil pro
    Dev ASP.NET/jQuery ; Admin ORACLE
    Inscrit en
    Septembre 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev ASP.NET/jQuery ; Admin ORACLE

    Informations forums :
    Inscription : Septembre 2007
    Messages : 491
    Points : 833
    Points
    833
    Par défaut
    Il faudrait le faire dans le code behind au moment de l'évènement RowCreated.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Protected Sub Grid_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles monGridview.RowCreated
     
            If e.Row.RowType = DataControlRowType.Header Then
               CTYPE(e.row.FindControl("Label2"), Label).Text = getMsg(753, "Zip", Request.QueryString("pLang"))
            End If
    End Sub

  3. #3
    Mvu
    Mvu est déconnecté
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Points : 105
    Points
    105
    Par défaut
    Génial,

    Alors je voudrais faire la même chose pour l'ItemTemplate.
    Si pLang=Fr alors il doit renvoyer categoryDescFr.
    Si pLang=Nl alors il doit renvoyer categoryDescNl.

    C'est la méthode que j'utilise dans toutes mes tables.

    Donc je suppose que dans le codebehind,il faudrai ajouter qqc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            If e.Row.RowType = DataControlRowType.Item Then
                CType(e.Row.FindControl("Label2"), Label).Text = ???
            End If
    Les ??? sur base du request.querystring("pLang") il faudrait que Label2 prenne la valeur categoryDescFr ou categoryDescNl

    C'est possible?
    Marc Van Uytvanck
    Bruxelles

  4. #4
    Membre éclairé Avatar de Pilru
    Homme Profil pro
    Dev ASP.NET/jQuery ; Admin ORACLE
    Inscrit en
    Septembre 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev ASP.NET/jQuery ; Admin ORACLE

    Informations forums :
    Inscription : Septembre 2007
    Messages : 491
    Points : 833
    Points
    833
    Par défaut
    Pour les ItemTemplate il faut le gérer lors du RowDataBound (au moment au les données sont liée à la ligne du gridview).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Protected Sub monGridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles monGridView.RowDataBound
            If e.Row.RowType = DataControlRowType.DataRow Then
               ....
            End If
    End Sub
    C'est possible?
    Tout est possible en .NET

  5. #5
    Mvu
    Mvu est déconnecté
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Points : 105
    Points
    105
    Par défaut
    Ok, voici ce que j'ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView1.RowDataBound
     
            If e.Row.RowType = DataControlRowType.DataRow Then
                If Request.QueryString("pLang") = "Fr" Then
                    CType(e.Row.FindControl("Label2"), Label).Text = Bind("categoryDescFr")
                Else
                    CType(e.Row.FindControl("Label2"), Label).Text = Bind("categoryDescNl")
                End If
            End If
        End Sub
    Est-ce que c'est correct Bind("categoryDescFr").
    VS me dit que Bind n'est pas déclaré.
    Je le déclare As quoi ?
    Marc Van Uytvanck
    Bruxelles

  6. #6
    Membre éclairé Avatar de Pilru
    Homme Profil pro
    Dev ASP.NET/jQuery ; Admin ORACLE
    Inscrit en
    Septembre 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev ASP.NET/jQuery ; Admin ORACLE

    Informations forums :
    Inscription : Septembre 2007
    Messages : 491
    Points : 833
    Points
    833
    Par défaut
    Bind s'utilise côté aspx.

  7. #7
    Mvu
    Mvu est déconnecté
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Points : 105
    Points
    105
    Par défaut
    Ok, j'ai supprimé le Bind. C'est presque bon.
    J'ai encore une erreur sur la ligne en rouge.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView1.RowDataBound
    
            If e.Row.RowType = DataControlRowType.DataRow Then
                If Request.QueryString("pLang") = "Fr" Then
                    CType(e.Row.FindControl("Label2"), Label).Text = ("categoryDescFr")
                Else
                    CType(e.Row.FindControl("Label2"), Label).Text = ("categoryDescNl")            End If
            End If
        End Sub
    Message d'erreur: La référence d'objet n'est pas définie à une instance d'un objet.

    Naturellement maintenant j'ai deux ItemTemplate.
    GridView1 - Column[0] - categoryDescrFr
    GridView1 - Column[1] - categoryDescrNl

    Je suppose que le problème vient de là.
    Marc Van Uytvanck
    Bruxelles

  8. #8
    Mvu
    Mvu est déconnecté
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Points : 105
    Points
    105
    Par défaut
    J'ai crié victoire un peu trop vite.

    Avec ce code ci-dessous, il me renvoie dans chaque ligne du tableau la chaîne de caractère categoryDescFr et non pas la valeur.
    Pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView1.RowDataBound
            If e.Row.RowType = DataControlRowType.DataRow Then
                CType(e.Row.FindControl("Label1"), Label).Text = TemplateControl("CategoryDescFr")     
       End If
        End Sub
    Marc Van Uytvanck
    Bruxelles

  9. #9
    Mvu
    Mvu est déconnecté
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 248
    Points : 105
    Points
    105
    Par défaut
    Finalement le bon code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView1.RowDataBound
     
            If e.Row.RowType = DataControlRowType.DataRow Then
                If pLang = "Fr" Then
                    CType(e.Row.FindControl("Label30"), Label).Text = (DataBinder.Eval(e.Row.DataItem, "CategoryDescFr"))
                Else
                    CType(e.Row.FindControl("Label30"), Label).Text = (DataBinder.Eval(e.Row.DataItem, "CategoryDescNl"))
                End If
            End If
     
        End Sub
    Marc Van Uytvanck
    Bruxelles

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

Discussions similaires

  1. [Webservices/Exchange] Comment rendre les références dynamiques ?
    Par john-thiriet dans le forum Framework .NET
    Réponses: 2
    Dernier message: 02/10/2008, 15h05
  2. [phpToPDF] Rendre le $contenuHeader dynamique
    Par djiboo dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 29/08/2008, 11h36
  3. REndre page web dynamique
    Par ninjajaune dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/10/2007, 14h27
  4. Rendre du javascript "dynamique" avec du Java
    Par raul_le_vieux dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 14/06/2007, 18h00
  5. rendre un if dynamique, cas d'école, venez voir
    Par yoda_style dans le forum ASP
    Réponses: 4
    Dernier message: 26/03/2007, 11h55

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