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 :

Perte itemplate imagebutton


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut Perte itemplate imagebutton
    Dans Consulte_Catalogue.aspx.vb , j'ai constitué un gridView dynamique avec ma méthode :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub ConfigGrid()
     
            Dim champ As BoundField = Nothing
            Dim ChampsTemplate As TemplateField
     
            grdArticles.Columns.Clear()
            'Constructeur
            champ = New BoundField
            champ.DataField = MOS.DAL.Constructeur.Champs.Libelle
            champ.DataFormatString = "<b>{0}</b>"
            champ.HtmlEncode = False
            champ.HeaderText = "Constructeur"
            champ.ItemStyle.HorizontalAlign = HorizontalAlign.Left
            champ.ItemStyle.VerticalAlign = VerticalAlign.Top
            champ.SortExpression = MOS.DAL.Constructeur.Champs.Libelle
            grdArticles.Columns.Add(champ)
     
            champ = New BoundField
            champ.DataField = MOS.DAL.Article.Champs.ReferenceArticle
            champ.DataFormatString = "<b>{0}</b>"
            champ.HeaderText = "Référence"
            champ.HtmlEncode = False
            champ.ItemStyle.HorizontalAlign = HorizontalAlign.Left
            champ.ItemStyle.VerticalAlign = VerticalAlign.Top
            champ.SortExpression = MOS.DAL.Article.Champs.ReferenceArticle
            grdArticles.Columns.Add(champ)
     
            champ = New BoundField
            champ.DataField = MOS.DAL.Article.Champs.Description
            champ.DataFormatString = "{0}"
            champ.HeaderText = "Descriptif"
            champ.ItemStyle.HorizontalAlign = HorizontalAlign.Left
            champ.ItemStyle.VerticalAlign = VerticalAlign.Top
            champ.SortExpression = MOS.DAL.Article.Champs.Description
            grdArticles.Columns.Add(champ)
     
     
            ChampsTemplate = New TemplateField
            ChampsTemplate.HeaderText = "Panier"
            ChampsTemplate.ItemStyle.HorizontalAlign = HorizontalAlign.Center
            ChampsTemplate.ItemStyle.VerticalAlign = VerticalAlign.Middle
            ChampsTemplate.ItemTemplate = New HelperCatalogue.MonTemplateBtn
            grdArticles.Columns.Add(ChampsTemplate)
     
        End Sub
    J'appelle cette méthode à méthode à chaque Load de ma page, (sinon perte des images quand je change d'index de page de mom gridView)

    HelperCatalogue est une classe d'outil
    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
    28
    29
    30
    31
    32
    33
    34
     
    Imports Microsoft.VisualBasic
    Imports System.Data
     
    Public Class HelperCatalogue
     
        <PersistenceMode(PersistenceMode.InnerProperty)> Public Class MonTemplateBtn
            Implements ITemplate
     
            Private MyImgBtn As ImageButton
     
            Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
                MyImgBtn = New ImageButton()
     
                MyImgBtn.ID = "BtnBasket"
                MyImgBtn.CommandName = "Panier"
                MyImgBtn.CssClass = "btnPanier"
                MyImgBtn.ImageUrl = "~/images/blanc.gif"
                MyImgBtn.ToolTip = "Ajouter au panier"
                AddHandler MyImgBtn.Click, New ImageClickEventHandler(AddressOf HelperCatalogue.OnMyImgBtnClic)
                'AddHandler MyImgBtn.Click, AddressOf HelperCatalogue.OnMyImgBtnClic
                container.Controls.Add(MyImgBtn)
            End Sub
     
        End Class
     
        Shared Sub OnMyImgBtnClic(ByVal sender As Object, ByVal e As EventArgs)
            Dim btn As Button = DirectCast(sender, Button)
     
            Dim row As GridViewRow = DirectCast(btn.NamingContainer, GridViewRow)
        End Sub
     
     
    End Class
    Or quand je clic sur n'imortequel bouton de mom gridview:
    1) il disparait ??
    2) je ne passe pas dans OnMyImgBtnClic comme si mon evt n'était pas déclanché

    Je sèche et cherche partout depuis jeudi dernier et rien ...
    C'est la première fois que j'utilise un itemplate, quelqu'un peut-il me guider ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut Conclusion
    J'ai pris le problème à l'envers (dès fois ça marche)
    Je crée toutes mes colonne dans le designer

    et dans le .vb, selon mes options d'affichage : grdArticles.Columns(3).Visible = False

    En fait, il y a un probleme quand on génère des objet à la volet, les evt ne sont rattachés que s'il existe quznd le Load s'exécute, ce qui n'était pas le cas.

    Voici un exemple repris d'un autre projet (Gestion de demande de rdv ):
    planning est un placeHolder ou je devais faire apparaître dans un tableau :des colonnes d'invités et en ligne les heures (comme le calendrier d'outlook) en entête de chaque colonne j'ai un bouton qui sert à supprimer l'invité de la table et c'est ce bouton qui perdait aussi ses evt lors du redessinage
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
    Private Class ContactInfo
            Public NomComplet As String
            Public BtnSup As ImageButton = Nothing '<----- C'est ce bouton
        End Class
    
    Dim dicInvite As Dictionary(Of Guid, ContactInfo)
        Dim strdicInvite As String
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    strdicInvite = "dicInvite" & ConnectedUser.IDContact.ToString
    
     If Page.IsPostBack Then
    For Each ContInfo As KeyValuePair(Of Guid, ContactInfo) In dicInvite
                            If ContInfo.Value.BtnSup IsNot Nothing Then AddHandler ContInfo.Value.BtnSup.Click, AddressOf Me.btnDelInvite_Click
                        Next
                        'Si les controles n'existe pas les construire pour avoir l'évènement sur les boutons
                        Try
                            ConstruirePlanning() 
                        Catch ex As Exception
    
                        End Try
    end If
    End Sub
    
    Private Sub ConstruirePlanning()
    
            'Vider le placeHolder car avec le Load se construit 2X l'un derière l'autre
            Planning.Controls.Clear()
    
            Dim MaTable As HtmlTable = New HtmlTable
            MaTable.Attributes.Add("class", "TBL")
    
            Dim MaRow1 As HtmlTableRow = New HtmlTableRow
            Dim MaCell1 As HtmlTableCell = New HtmlTableCell
    
            'Construction de la première ligne
            MaRow1.Attributes.Add("class", "ListeEntete")
    
            '1ere cellule vide
            MaCell1.Width = 60
            MaRow1.Controls.Add(MaCell1)
    
            'Ajouter nom/Suppression
            For Each ContInfo As KeyValuePair(Of Guid, ContactInfo) In dicInvite
    
                Dim MaCell As HtmlTableCell = New HtmlTableCell
                    MaCell.Align = "center"
    ....
                    'Nouvelle ligne
                    MaCell.Controls.Add(New LiteralControl("&nbsp;"))
    
                    'Bouton suppression
                    Dim btnsupp As New ImageButton
                    btnsupp.ImageUrl = "~/images/cancel.gif"
                    btnsupp.CommandArgument = ContInfo.Key.ToString
                    btnsupp.ID = "btnSupInv" & ContInfo.Key.ToString
                    AddHandler btnsupp.Click, AddressOf Me.btnDelInvite_Click 'Rattaché le btn à l'evt a déclencher
                    MaCell.Controls.Add(btnsupp)
                    ContInfo.Value.BtnSup = btnsupp 'Mise dans le dictionnaire pour mémorisation et régération sue postback
    
                    'Vérification de suppression
                    Dim SurSupp As New AjaxControlToolkit.ConfirmButtonExtender
                    SurSupp.ConfirmText = "Voulez vous vraiment supprimer ?"
                    SurSupp.TargetControlID = "btnSupInv" & ContInfo.Key.ToString
                    MaCell.Controls.Add(SurSupp)
    
                    'Nouvelle ligne
                    MaCell.Controls.Add(New LiteralControl("<BR />"))
    
                'Nom/Fonction
                lblnom.Text = ContInfo.Value.NomComplet
                MaCell.Controls.Add(lblnom)
    
                MaRow1.Controls.Add(MaCell)
    
            Next
    
            MaTable.Controls.Add(MaRow1)
    
            'Pour chaque horaire : controler chaque contact
            For Each Hor As DataRowView In dtvHoraire
    
                Dim MaRow As HtmlTableRow = New HtmlTableRow
                Dim MaCell As HtmlTableCell = New HtmlTableCell
                Dim heure As Date = CDate("##/##/##" & Hor("Libelle"))
    ....
                MaRow.Controls.Add(MaCell)
    
                'Mise en couleur des cellules
                'pour indiquer si contact dispo ou non
                Dim NonDispo As Boolean = True
                For Each ContInfo As KeyValuePair(Of Guid, ContactInfo) In dicInvite
    
                    Dim MaCellDispo As New HtmlTableCell
    
                       ...
                    MaRow.Controls.Add(MaCellDispo)
    
                Next
    
                MaTable.Controls.Add(MaRow)
    
            Next
    
            Planning.Controls.Add(MaTable)
    
        End Sub
    
    'Au dessus du placeholder : une liste de personne a inviter avec un bouton de validation
        Protected Sub btnAddInvite_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnAddInvite.Click
    
            Dim IdInvit As Guid = New Guid(lstContactAInviter.SelectedValue)
    
            'Ajout dans la liste locale des invités
            dicInvite = CType(Utils.GetObjectFromCache(strdicInvite), Dictionary(Of Guid, ContactInfo))
            InsertDic(IdInvit)
            Utils.SetObjectToCache(strdicInvite, dicInvite, True, False, False)
    
            ConstruirePlanning()
        End Sub
    
    
        Protected Sub btnDelInvite_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
    
            'Récupérer argument passer en paramètre
            Dim IdInv As Guid = New Guid(CType(sender, ImageButton).CommandArgument)
    
            'Récupérer le dictionnaire
            dicInvite = CType(Utils.GetObjectFromCache(strdicInvite), Dictionary(Of Guid, ContactInfo))
    
    
            'Retirer du dictionnaire
            dicInvite.Remove(IdInv)
    
            'Remettre en mémoire le dictionnaire mis à jour
            Utils.SetObjectToCache(strdicInvite, dicInvite, True, False, False)
    
            ConstruirePlanning()
        End Sub
    
     Private Sub InsertDic(ByVal IdContact As Guid)
    
            Dim MonContactInfo As New ContactInfo
    ....
                       MonContactInfo.NomComplet = "blabla"
                dicInvite.Add(IdContact, MonContactInfo)
    
    
        End Sub
    J'ai essayé d'enlever les bout de code qui servait à rien à l'explication, tout en laissant le plus intéressant, il est possible que ce code ne marche pas directement si j'ai oublié des morceaux. Mais bon ça devrait donner la structure.

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

Discussions similaires

  1. Perte de controlde d'un imagebutton dans une visual webpart
    Par lolef dans le forum Développement Sharepoint
    Réponses: 0
    Dernier message: 19/09/2011, 11h45
  2. Perte d'enregistrements
    Par AnnSo dans le forum Paradox
    Réponses: 15
    Dernier message: 06/08/2006, 23h39
  3. Perte de connexion (bis)
    Par rgarnier dans le forum XMLRAD
    Réponses: 7
    Dernier message: 28/05/2003, 11h14
  4. Perte du contenu des blobs
    Par macakou99 dans le forum Débuter
    Réponses: 10
    Dernier message: 22/05/2003, 15h17
  5. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum Développement
    Réponses: 6
    Dernier message: 02/01/2003, 12h13

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