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 :

Petit soucis de compréhension sur un Template de GridView


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Petit soucis de compréhension sur un Template de GridView
    Bonjour à tous.

    Je me relance dans la création d'un Template de GridView pour afficher mes infos avec une mise en forme particulière.
    Mon idée est d'envoyer une seule colonne dans mon GridView qui sera une colonne composite formée d'une Table avec tout dedans.

    J'ai déjà fait un Template, mais il y a longtems et c'était déjà un truc super spécifique, alors je reprends mon vieux code qui marche bien, mais je voudrais l'alléger et aller à l'essentiel sur mon cas présent et surtout moins spécifique.

    Donc pour aller à l'essentiel je cherche d'abords à envoyer un truc tout simple mais ça marche pas. Je dois oublier un truc important sauf que je capte pas où se trouve mon oubli.

    Alors je vous soumets mon code dans l'espoir que vous voyez là où je plante.
    J'ai placé le GridView tout nu dans la partie HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:GridView ID="gvGig" runat="server"></asp:GridView>
    Ensuite, dans le Init de la page j'ai mis ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With gvGig
                .DataSource = dtGig
                .AutoGenerateColumns = False
                .DataBind()
            End With
            Dim tpGig As New TemplateField
            With tpGig
                .ItemTemplate = New TplGig(DataControlRowType.DataRow)
                .HeaderTemplate = New TplGig(DataControlRowType.Header)
            End With
    Et j'ai fais une autre classe comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Public Class TplGig
        Implements ITemplate
     
        Private templateType As DataControlRowType
     
        Sub New(ByVal type As DataControlRowType)
            templateType = type
        End Sub
        Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
            Select Case templateType
                Case DataControlRowType.Header
                Case DataControlRowType.DataRow
                    Dim l As New Label
                    Dim row As GridViewRow = CType(l.NamingContainer, GridViewRow)
                    l.Text = DataBinder.Eval(row.DataItem, "Titre")
                    container.Controls.Add(l)
                Case Else
     
            End Select
        End Sub
    End Class
    Là il me plante avec un message lapidaire :
    La référence d'objet n'est pas définie à une instance d'un objet.
    sur la ligne
    l.Text = DataBinder.Eval(row.DataItem, "Titre")
    Pourtant, sauf si je me gourre, je lui envoi le nom de la colonne dans la Datatable source et visiblement il la trouve pas.
    Alors la question est : pourquoi ?

    Si je mets un chaine toute simple dans le Label, aucun soucis, il m'affiche autant de Label avec la chaine que j'ai d'enregistrement dans ma DataTable.

    Pouvez vous m'aider ?

  2. #2
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bon, à force de farfouiller j'ai changé un peu (enfin, façon de parler) ma Class pour arriver à ceci et j'ai besoins de comprendre, je pose mes question aprés le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Public Class TplGig
        Implements ITemplate
     
        Private templateType As DataControlRowType
     
        Sub New(ByVal type As DataControlRowType)
            templateType = type
        End Sub
        Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
            Select Case templateType
                Case DataControlRowType.Header
                Case DataControlRowType.DataRow
                    Dim l As New Label
                    AddHandler l.DataBinding, AddressOf l_dataBind
                    container.Controls.Add(l)
                Case Else
     
            End Select
        End Sub
     
        Private Sub l_dataBind(ByVal sender As Object, ByVal e As EventArgs)
            Dim l As Label = CType(sender, Label)
            Dim row As GridViewRow = CType(l.NamingContainer, GridViewRow)
            l.Text = DataBinder.Eval(row.DataItem, "Titre").ToString()
        End Sub
    End Class
    La différence est pas énorme (à mes yeux), j'ai juste ajouté un truc de DataBind sur mon Label.

    Alors je comprends pas pourquoi faut passer par un Sub à part sur le dataBind du Label alors qu'on pourrait le faire directement dans le InstaniateIn.

    Est ce que, du coup, je vais être obligé de faire ça pour chaque contrôle que je vais mettre qui a besoin de faire éférence à une donnée de la source ?
    J'ai peur au performance en fait, c'est surtout ça mon souci.

    Rho allez, je vais avouer aussi que si je peux économiser du code à taper, c'est pas plus mal (faut que j'arrête d'être honnête moi, je vais me faire mal voir ...........)

Discussions similaires

  1. Petits soucis de tri sur un vecteur
    Par d.jphilippe dans le forum Fortran
    Réponses: 3
    Dernier message: 01/08/2008, 23h00
  2. [Debian_Etch] Petits soucis de performance sur un serveur
    Par Arnulf dans le forum Administration système
    Réponses: 7
    Dernier message: 22/01/2008, 17h09
  3. Réponses: 8
    Dernier message: 04/08/2006, 15h24
  4. petit soucis pour lire sur un port usb le createfile n'accep
    Par anthonycosson dans le forum Windows
    Réponses: 5
    Dernier message: 14/02/2006, 09h34
  5. Petit soucis de compréhension
    Par AlexB59 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/10/2005, 10h18

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