none
Récupération colonne masquée GridView

    Question

  • Bonjour à tous !! 

    Je vous présente mon soucis : 

    Une application web, en VB / ASPX. Je dispose d'un magnifique GridView, rempli à l'aide d'un SqlDataSource, le tout en aspx, je vous présente le code : 

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataSourceID="SqlDataSource1" SkinID="dataGrid" onrowcommand="GridView1_RowCommand">
        <Columns>
            <asp:TemplateField AccessibleHeaderText="id_session" HeaderText="id_session">
                <EditItemTemplate>
                    <asp:TextBox ID="txt_id_session" runat="server" Text='<%# Bind("id_session") %>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lbl_id_session" runat="server" Text='<%# Bind("id_session") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    
    
    
    
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:Formation_2014ConnectionString %>" 
            SelectCommand="SELECT s.id_session, f.libelle_formation, s.date_debut_session, s.date_fin_session, COUNT(p.id_personne) AS Expr1 FROM Sessions AS s LEFT OUTER JOIN Participe AS p ON p.id_session = s.id_session AND p.actif = 1 RIGHT OUTER JOIN Formation AS f ON f.id_formation = s.id_formation WHERE (s.date_fin_session > GETDATE()) OR (s.date_fin_session < GETDATE()) OR (S.date_fin_session = GETDATE()) GROUP BY s.id_session, f.libelle_formation, s.date_debut_session, s.date_fin_session" >
        </asp:SqlDataSource>



    Jusque là, tout se passe bien, ma requête s’exécute correctement, mon GridView se rempli. 

    Et viens le côté amusant, j'ai besoin de récupérer dans mon codeBehind en VB, la valeur contenu dans ma première colonne, à savoir "id_session", cette colonne est masquée dans le code de cette manière : 

     Protected Sub OnRowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView1.RowCreated
            GridView1.Columns(0).Visible = False
            'e.Row.Cells(0).Visible = False
            'Permet de ne pas afficher le champ Id mais de le prendre en compte tout de même (Requête)
        End Sub



    Je n'utilise plus la seconde méthode (en commentaire) car celle-ci supprime la pagination de mes GridView je ne sais pour quelle raison. 

    Et ensuite seulement, dans un autre Sub, je dois récupérer la valeur de ma colonne, j'ai essayé de plusieurs manières, jamais rien n'y fait >< Si quelqu'un peut me venir en aide ... 

    Voici mes tests actuellement : 
    Dim id_session = GridView1.SelectedRow.Cells(0).Controls(0).ToString ' Retourne System.Web.UI.Literalcontrol
    Dim id_session = GridView1.SelectedRow.RowIndex 'Retourne le numéro de la ligne

    mardi 6 mai 2014 06:30

Réponses

  • Réponse trouvée ! 

    Dim id_session = (CType(GridView1.SelectedRow.Cells(0).Controls(1), Label)).Text

    En utilisant ce code je récupère ce que je cherche :) 

    • Marqué comme réponse Krishn4k mardi 6 mai 2014 08:24
    mardi 6 mai 2014 08:24

Toutes les réponses

  • Bonjour,

    Si tu dois récuperer toutes les valeurs, tu dois pas utiliser .SelectedRow. car cela prends en compte que les lignes que tu aurais selectionné.

    Essaye quelque chose comme : Dim id_session = GridView1.Rows(0).Columns(0).Value

    Cordialement,

    mardi 6 mai 2014 06:40
  • Oui mais je ne dois récupérer l'id que de la ligne sur laquelle j'utilise mes command button, c'est la le soucis.
    mardi 6 mai 2014 06:42
  • Quand tu parles d'ID, tu parles de la ligne a laquelle tu te trouves ?

    mardi 6 mai 2014 06:53
  • Non c'est la le soucis, je parle de la valeur de la colonne id_session, pour la ligne actuelle.
    mardi 6 mai 2014 06:55
  • En faisant une boucle dans ta lecture avec un incrémenteur, du coup quand tu as fini de lire, ton incrémenteur te dira a quel ligne tu t'es arreté non ? et du coup tu pourra récuperer la valeur de ta colonne


    • Modifié Tom57000 mardi 6 mai 2014 07:17
    mardi 6 mai 2014 07:16
  • Voila comment se présente ma page au final, une fois que l'utilisateur aura cliqué sur "Sélectionner", trois nouveau lien apparaîtrons chacun menant vers une page dont l'url se terminera par mon "id_session". J'espère que c'est plus clair, je ne vois pas bien le principe de la boucle dans mon cas actuel !  
    mardi 6 mai 2014 07:22
  • Réponse trouvée ! 

    Dim id_session = (CType(GridView1.SelectedRow.Cells(0).Controls(1), Label)).Text

    En utilisant ce code je récupère ce que je cherche :) 

    • Marqué comme réponse Krishn4k mardi 6 mai 2014 08:24
    mardi 6 mai 2014 08:24