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 :

Supprimer tous les HiddenField d'un DataGrid


Sujet :

ASP.NET

  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut Supprimer tous les HiddenField d'un DataGrid


    Il faudrait, avant un export au format Excel, que je supprime tous les contrôles de type HiddenField. Voici mon code actuel
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub NettoyageColonne(ByVal dg As DataGrid)
            For i As Integer = 0 To dg.Items.Count - 1
                For j As Integer = 1 To dg.Columns.Count - 1
                    For k As Integer = 0 To dg.Items(i).Cells(j).Controls.Count - 1
                        If TypeOf dg.Items(i).Cells(j).Controls(k) Is HiddenField Then
                            dg.Items(i).Cells(j).Controls.Remove(dg.Items(i).Cells(j).Controls(k))
                        End If
                    Next
                Next
            Next
        End Sub
    Cependant, la dernière boucle à l'air de boucler au-delà du nombre de contrôles présents dans la cellule en cours de parcours et me lève donc une exception de dépassement d'indice. Quais-je fait de mal ?


    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ou bien quelqu'un pourrais éventuellement me dire comment palier à ce problème car les contrôles HiddenField ne peuvent à priori êtres dans le flux:
    Le contrôle 'dgListePratiquesEpandagesPrevi_ctl12_hfIdChamp' de type 'HiddenField' doit être placé dans une balise form avec runat=server.
    Je réponde tout de suite à la question que vous poserez, oui tous mes contrôles sont en runat="server"

    J'utilise la méthode trouvée sur un vieux tutoriel:
    Code vb : 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
        Private Sub ExportExcel(ByVal dg As DataGrid)
            VerifColonnes(dg)
     
            Response.Clear()
            Response.Buffer = True
            Response.ContentType = "application/vnd.ms-excel"
            Response.Charset = ""
     
            Dim sw As New StringWriter
            Dim html As New HtmlTextWriter(sw)
     
            dg.RenderControl(html)
     
            Response.Write(html.ToString())
            Response.End()
        End Sub
     
        Private Sub VerifColonnes(ByVal dg As Control)
            ' On récupère le nombre de controles enfants composant le DataGrid
            Dim nbControls As Integer = dg.Controls.Count - 1
     
            While nbControls >= 0
                VerifColonnes(dg.Controls(nbControls))
                nbControls = nbControls - 1
            End While
     
            ' Si la cellule ne contient pas du texte simple 
            If Not (TypeOf dg Is TableCell) Then
                ' Si le controle concerné à une prorpiété "Selected Item" alors...
                ' Remarque : Seul les controles offrant des choix multiples ont une propriété "SelectedItem"
                If Not (dg.GetType().GetProperty("SelectedItem") Is Nothing) Then
                    Dim controleLitteral1 As LiteralControl = New LiteralControl
                    dg.Parent.Controls.Add(controleLitteral1)
     
                    Try
                        ' La cellule prend alors pour valeur le texte correspondant à la propriété "SelectedItem"
                        controleLitteral1.Text = CType(dg.GetType().GetProperty("SelectedItem").GetValue(dg, Nothing), String)
                    Catch ex As Exception
                        ' On récupère l'exception en cas de problème
                        Response.Write(ex.Message)
                    End Try
     
                    ' Le controle concerné est retiré
                    dg.Parent.Controls.Remove(dg)
                Else
                    ' Si le controle concerné n'a pas de propriété "SelectedItem" alors on récupère le 
                    ' texte (s'il y en a un) de sa propriété "Text"
                    If Not (dg.GetType().GetProperty("Text") Is Nothing) Then
                        Dim controleLitteral2 As LiteralControl = New LiteralControl
                        dg.Parent.Controls.Add(controleLitteral2)
     
                        ' On attribue le texte de la propriété "Text" à la cellule concernée
                        controleLitteral2.Text = CType(dg.GetType().GetProperty("Text").GetValue(dg, Nothing), String)
                        dg.Parent.Controls.Remove(dg)
                    End If
                End If
            End If
        End Sub
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/08/2005, 18h40
  2. supprimer tous les rdv du calendrier outlook
    Par arnolpourri dans le forum Access
    Réponses: 6
    Dernier message: 25/05/2005, 10h57
  3. Méthode pour supprimer tous les enfants d'un élément
    Par Pymm dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/05/2005, 12h10
  4. Réponses: 4
    Dernier message: 24/09/2004, 10h17
  5. [Tomcat] Comment supprimer tous les logs ?
    Par Soulsurfer dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 11/05/2004, 16h35

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