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 :

Construire un GridView dynamiquement


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut Construire un GridView dynamiquement
    Bonjour,

    quelqu'un connait-il un bon tutoriel pour les GridView. En effet j'essaye de construire un gridView avec du code behind uniquement... c'est mission impossible!!

    Par exemple je serais curieux de savoir comment on réalise ceci en code behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <Columns>
     <asp:CommandField ButtonType="Button" EditText="Détails" ShowEditButton="True">
      <HeaderStyle HorizontalAlign="Center" />
      </asp:CommandField>
     <asp:TemplateField>
     <ItemTemplate>
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
     </ItemTemplate>
     </asp:TemplateField>
    </Columns>
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2003
    Messages : 353
    Points : 361
    Points
    361
    Par défaut
    Hum voici en gros,

    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
     
           Dim ods As New ObjectDataSource
            Dim gv As GridView = Me.gvUtil
            Dim bf As BoundField = Nothing
     
     
            'on ne veut pas générer les colonnes automatiquement
            gv.AutoGenerateColumns = False
     
            If Not Page.IsPostBack Then
     
                bf = New BoundField
                bf.HeaderText = "Nom"
                bf.DataField = "Nom"
                gv.Columns.Add(bf)
                bf.ItemStyle.Width = New Unit("140", UnitType.Pixel)
     
                bf = New BoundField
                gv.Columns.Add(bf)
     
            End If
     
            gv.DataBind()
    La c'est un BoundField, mais tu peux très bien mettre des commandField...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Et je peux créer des templateField?

    En fait j'aurais besoin de créer un gridView de textBox...ou un gridView contenant uniquement des lignes editables....

    Vaut-il mieux que je passe par des templateField ou y-a-t-il un moyen de créer un gridView 100% editable? (pas ligne par ligne)
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    J'ai essayé ton code... il ne marche pas

    Mon GridView reste désespérément vide...

    Une autre idée?
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2003
    Messages : 353
    Points : 361
    Points
    361
    Par défaut
    Citation Envoyé par The eye Voir le message
    J'ai essayé ton code... il ne marche pas

    Mon GridView reste désespérément vide...

    Une autre idée?
    Erf, j'espère que tu n'as pris mon code tel quel ??
    En fait, il faut spécifier une datasource.
    Il faut ensuite spécifier une selectmethod sur cette datasource.
    Affecter cette datasource à ton gridview.
    Rajouter tes colonnes
    faire le databind

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Merci promesses,

    En fait entre temps j'ai trouvé comment faire en grande partie grâce à un excellent tuto de développez.com de Martin TREMBLAY sur les GridViewDynamic

    Pour faire exactement ce que je veux. (A savoir afficher tantôt des label, tantôt des textBox, ...etc) à ma guise... en étant tout de même limité au même type de template par colonne...

    Je posterais le code finis un fois que ça marchera bien... (pour me compliquer la vie j'ai un GridView qui appelle un autre gridView à trvaers un coltrol Ajax ... pas gagné tout ça.. mais je suis sur la bonne voie)

    Meerci encore,

    Citation Envoyé par Promesses Voir le message
    Erf, j'espère que tu n'as pris mon code tel quel ??
    En fait, il faut spécifier une datasource.
    Il faut ensuite spécifier une selectmethod sur cette datasource.
    Affecter cette datasource à ton gridview.
    Rajouter tes colonnes
    faire le databind
    En fait même avec ça la souplesse des templates prédéfinis ne me satisfait pas.

    Je suis obligé de créer mes propres ITtemplate...

    Mais oui j'avais fait tout ça
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2003
    Messages : 353
    Points : 361
    Points
    361
    Par défaut
    En tout cas je serais bien intéressé par ton code ensuite.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Alors voilà déjà la classe GridViewTemplate :

    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
    Public Class GridViewTemplate
        Implements ITemplate
     
        Dim _templateType As ListItemType
        Dim _columnName As String
        Dim _TypeControl As eControl
        Dim _Dts As DataSet
     
        Public Enum eControl
            textBox = 1
            button = 2
            label = 3
            listbox = 4
            gridview = 5
        End Enum
     
        Public Sub New(ByVal type As ListItemType, ByVal columnName As String, ByVal typeControl As eControl)
            _templateType = type
            _columnName = columnName
            _TypeControl = typeControl
        End Sub
     
        Public Sub New(ByVal type As ListItemType, ByVal columnName As String, ByVal typeControl As eControl, ByVal dts As DataSet)
            _templateType = type
            _columnName = columnName
            _TypeControl = typeControl
            _Dts = dts
        End Sub
     
        Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
     
            Select Case _templateType
                Case ListItemType.Item
                    Select Case _TypeControl
                        Case eControl.button
                            Dim btn As Button = New Button()
                            AddHandler btn.Click, AddressOf btn_Click
                            btn.CommandName = "EDIT"
                            container.Controls.Add(btn)
     
                        Case eControl.label
                            Dim lbl As Label = New Label()
                            lbl.BorderStyle = BorderStyle.None
                            AddHandler lbl.DataBinding, AddressOf lbl_DataBinding
                            container.Controls.Add(lbl)
     
                        Case eControl.textBox
                            Dim txt As TextBox = New TextBox()
                            AddHandler txt.DataBinding, AddressOf txt_DataBinding
                            txt.Columns = 3
                            'txt.ID = "txtQte"
                            txt.TextMode = TextBoxMode.SingleLine
                            txt.Width = 20
                            txt.Visible = True
                            container.Controls.Add(txt)
     
                    End Select
            End Select
     
        End Sub
     
     
        Public Sub txt_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
            Dim txtData As TextBox = CType(sender, TextBox)
            Dim container As GridViewRow = CType(txtData.NamingContainer, GridViewRow)
            Dim dataValue As Object = DataBinder.Eval(container.DataItem, _columnName)
     
            If Not IsNothing(dataValue) Then
                txtData.Text = dataValue.ToString
            End If
        End Sub
     
        Public Sub lbl_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
            Dim lblData As Label = CType(sender, Label)
            Dim container As GridViewRow = CType(lblData.NamingContainer, GridViewRow)
            Dim dataValue As Object = DataBinder.Eval(container.DataItem, _columnName)
     
            If Not IsNothing(dataValue) Then
                lblData.Text = dataValue.ToString
            End If
        End Sub
     
        Public Sub btn_Click(ByVal sender As Object, ByVal e As EventArgs)
     
        End Sub
     
     
    End Class
    Ensuite pour ajouter une colonne customiser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim txtValeur As TemplateField = New TemplateField
    txtValeur.ItemTemplate = New GridViewTemplate(ListItemType.Item, col.ColumnName, GridViewTemplate.eControl.textBox)
     grdDetail.Columns.Add(txtValeur)
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2003
    Messages : 353
    Points : 361
    Points
    361
    Par défaut
    C'est super sympa ! merci

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    De rien...

    J'ai mis le temps avec ces maudits gridView mais j'ai enfin réussi à en tirer ce que je veux.

    Content que ça puisse servir
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  11. #11
    En attente de confirmation mail
    Inscrit en
    Janvier 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 106
    Points : 96
    Points
    96
    Par défaut
    Hey Hey! C'est bien j'avais justement besoin de ce code !

    Merci

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


Discussions similaires

  1. Faire un état à partir d'un gridview dynamique
    Par tortuegenie dans le forum SDK
    Réponses: 1
    Dernier message: 17/09/2012, 13h40
  2. comment définir la taille d'un gridview dynamiquement
    Par cortex024 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 23/01/2008, 18h05
  3. Gridview dynamique menu deroulant
    Par casa51 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 25/10/2007, 15h33
  4. construire une requete dynamiquement
    Par highman dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/04/2007, 12h49
  5. Réponses: 4
    Dernier message: 03/01/2007, 17h47

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