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

  1. #1
    Nouveau Candidat au Club
    DropDownList dans une GridView et variable Enabled depuis C#
    Bonjour à tous,

    Mon soucis et que je n'arrive pas à modifier la valeur "Enabled" d'une DropDownList qui se situe dans une GridView.

    Alors tout d'abord voici ce à quoi ça ressemble graphiquement parlant :



    Et pendant la modification :




    Le code ASP.Net s'y référent :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <ItemTemplate>
         <asp<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />ropDownList ID="listTypeV" runat="server" DataSourceID="SqlDataSource2" DataTextField="TV_Type_Vehicule" DataValueField="TV_Id_Type_Vehicule" SelectedValue='<%# Bind("TV_Id_Type_Vehicule") %>'>
         </asp<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />ropDownList>
    </ItemTemplate>


    Le tout bien évidemment dans une GridView.


    Ce que je pensais faire : mettre la DropDownList sur "Enabled = false" par défaut et utiliser l'évènement RowEditing pour changer ce statu à "true" histoire de laisser l'utilisateur saisir une valeur différente dans la DropDownList.

    Seulement lorsque je recherche le contrôle depuis le code C# qui s'y réfère, je n'arrive pas à le trouver.

    Primo en tapant "nomDeMaGridView.nomDeMaDropDownList", évidemment je n'y accède pas.

    Ensuite en utilisant :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    (DropDownList)TableTest1.FindControl("listTypeV")


    Pas moyen de trouver le contrôle qui s'y réfère.

    Et même par :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    (DropDownList)TableTest1.SelectedRow.FindControl("listTypeV")


    Je n'accède pas au contrôle.


    Pourtant l'objet existe bien puisque j'arrive à utiliser la DropDownList quand je teste le code si je la laisse à "Enabled = true".


    Et dans la partie graphique de Visual Studio j'ai bien :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    tableTest1.Column6Typedevéhicule.ItemTemplate.listTypeV



    Bref je ne vois pas ce qui fait que je ne peux accéder à cet objet pour le modifier.

    Comme je suis débutant en ASP.Net, j'ai peut être loupé un truc simple, mais j'ai beau faire des recherches, je ne vois pas.

    Si jamais vous avez une idée...


    ________________________________________________________________
    Configuration de la plateforme :

    Windows Server 2003 à jour, Visual Studio 2005 à jour, Framework .Net 3.5, VSTO, VSeWSS1.1, etc. ...

  2. #2
    Membre éclairé
    passe peut etre par un objet gridviewRow pour récupérer ton elément.
    tongridview.gridviewrow.findcontrol(tonelement);

    D'habitude je fais cela dans la méthode gridviewdatabound.

    a voir

  3. #3
    Nouveau Candidat au Club
    Citation Envoyé par tortuegenie Voir le message
    passe peut etre par un objet gridviewRow pour récupérer ton elément.
    tongridview.gridviewrow.findcontrol(tonelement);

    D'habitude je fais cela dans la méthode gridviewdatabound.

    a voir
    Je vais essayer, mais je pense que si ça devait marcher, il n'y aurait pas de raison pour que
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    (DropDownList)TableTest1.SelectedRow.FindControl("listTypeV")


    ne fonctionne pas, non ?

    Je pars essayer de ce pas


    EDIT :

    Bon je viens d'essayer :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach (GridViewRow mesRows in tableTest1.Rows)
    {
        myControl = mesRows.FindControl("listTypeV");
        myControl.Enabled = true;
    }


    Et bien toujours la même erreur au niveau du "myControl" : l'objet n'est pas référencé.
    J'arrive toujours pas à savoir pourquoi il trouve pas le contrôle "listTypeV"

    EDIT 2 : Oups, petite erreur dans le code

  4. #4
    Nouveau Candidat au Club
    Bon après correction de la coquille dans le code, il semble bien trouver un objet avec ID "listTypeV", puisque "hello" est bien instancié.

    Cependant lorsque je met la variable "Enabled" à "true", il ne se passe rien (lorsque par défaut le comportement est à "false").

    Bref je suis pas plus avancé

  5. #5
    Membre éclairé
    Passe le débugger pour voir ce qui s'y passe exactement, à partir du moment où il te trouve l'id c'est qu'il y a des choses qui fonctionnent et que tu ne dois pas etre très loin

  6. #6
    Nouveau Candidat au Club
    Citation Envoyé par tortuegenie Voir le message
    Passe le débugger pour voir ce qui s'y passe exactement, à partir du moment où il te trouve l'id c'est qu'il y a des choses qui fonctionnent et que tu ne dois pas etre très loin
    Effectivement, quand j'ai posé les points d'arrêt, ma variable temporaire "hello" contenait bien un objet avec tout les attributs qui vont avec.

    Cependant j'ai pas trouvé l'attribut "Enabled" dans la liste (il est pas proposé par l'auto complétion de VS d'ailleurs) donc je comprend pas.

    L'exécution semble bien se passer, quand je passe "Enabled" à "true", mon "hello.Enabled" prend bien la bonne valeur (vérifiée par un autre point d'arrêt) mais aucun changement du point de vue visualisation, la DropDownList reste grisée.

    En tout cas merci pour l'aide

  7. #7
    Nouveau Candidat au Club
    Bon,

    j'arrive finalement à accéder à la variable "Enabled" grâce à cette horrible synthaxe (j'ai honte )

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach (GridViewRow mesRows in TableTest1.Rows)
    {
        foreach (ListItem mesItems in ((ListItemCollection)((DropDownList)(mesRows.FindControl("listTypeV"))).Items))
        {
            mesItems.Enabled = true;
        }
    }


    J'ai un peu mieux compris l'architecture des DropDownList.
    Il n'empêche qu'en toute logique cette solution devrait me dégriser toutes les DropDownList de ma GridView, et qu'en pratique il ne se passe rien.

    Je creuse encore par curiosité, mais je ne vais pas tarder à me tourner vers une autre solution.

    Si jamais vous avez des idées, merci de les faire partager

  8. #8
    Nouveau Candidat au Club
    Désolé de revenir encore à la charge, mais là je ne comprend plus rien.

    J'ai réussi à accéder finalement au bon contrôle :




    On voit bien ici que j'ai modifié le bon contrôle qui est désormais à "true" alors qu'il est à "false" au départ.

    Ceci par l'intermédiaire de ce code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    ((DropDownList)TableTest1.Rows[e.NewEditIndex].Cells[6].FindControl("listTypeV")).Enabled = true;



    Cependant la DropDownList reste toujours grisée dans mon navigateur web.

    Ais-je oublié de faire quelque-chose, genre un refresh de l'objet ou autre trucs du genre dont je n'aurais pas connaissance ?

  9. #9
    Nouveau Candidat au Club
    Bon et bien ça m'apprendra à chercher compliqué là où on peut faire simple.

    Il suffisait de créer un "EditItemTemplate" pour avoir ce que je voulais :

    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
    <asp:TemplateField HeaderText="Type de véhicule" SortExpression="TV_Id_Type_Vehicule">
     
    <ItemTemplate>
    <asp<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />ropDownList ID="listTypeV" runat="server" DataSourceID="SqlDataSource2"
    DataTextField="TV_Type_Vehicule" DataValueField="TV_Id_Type_Vehicule" SelectedValue='<%# Bind("TV_Id_Type_Vehicule") %>' Enabled="False">
    </asp<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />ropDownList>
    </ItemTemplate>
     
    <EditItemTemplate>
    <asp<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />ropDownList ID="listTypeV" runat="server" DataSourceID="SqlDataSource2"
    DataTextField="TV_Type_Vehicule" DataValueField="TV_Id_Type_Vehicule" SelectedValue='<%# Bind("TV_Id_Type_Vehicule") %>' Enabled="True">
    </asp<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />ropDownList>
    </EditItemTemplate>
     
    </asp:TemplateField>



    En attendant, si jamais quelqu'un peut me dire pourquoi mon "code behind" n'avait aucun effet sur la partie utilisateur, histoire que je sache pour le futur, je suis toujours preneur.

    En vous remerciant...

###raw>template_hook.ano_emploi###