none
Récupérer une valeur d'une liste déroulante GridView RRS feed

  • Question

  • Bonsoir ! 

    J'ai un petit soucis, et mon état de fatigue actuel ne me permet apparemment pas de trouver la solution, voici mon GridView, accompagné de ses deux dataSource, 

        <asp:GridView ID="GridModif" runat="server" AllowPaging="True" AutoGenerateColumns="False"
             DataKeyNames="id_personne" DataSourceID="source_personnes" SkinID="dataGrid">
            <Columns>
                <asp:TemplateField HeaderText="id_personne" InsertVisible="False" 
                    SortExpression="id_personne">
                    <EditItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("id_personne") %>'></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id_personne") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="nom_personne" HeaderText="Nom" 
                    SortExpression="nom_personne" />
                <asp:BoundField DataField="prenom_personne" HeaderText="Prénom" 
                    SortExpression="prenom_personne" />
                <asp:TemplateField HeaderText="Agence" SortExpression="raison_sociale">
                    <EditItemTemplate>
                        <asp:DropDownList ID="id_organisme" runat="server" 
                            DataSourceID="source_organisme" DataTextField="raison_sociale" 
                            DataValueField="id_organisme">
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="id_organisme" runat="server" Text='<%# Bind("raison_sociale") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowEditButton="true" />
                <asp:CommandField ShowDeleteButton="true" DeleteText="Désactiver" />
            </Columns>
        </asp:GridView>
    
        <asp:SqlDataSource ID="source_personnes" runat="server" 
            ConnectionString="<%$ ConnectionStrings:Formation_2014ConnectionString %>" 
            
            SelectCommand="SELECT Personnes.id_personne, Personnes.nom_personne, Personnes.prenom_personne, Personnes.actif_personne, Personnes.agence_personne,  Organismes.raison_sociale  FROM Personnes INNER JOIN Organismes ON Personnes.agence_personne = Organismes.id_organisme WHERE (Personnes.actif_personne = 1)"
            UpdateCommand="UPDATE Personnes SET nom_personne=@nom_personne, prenom_personne=@prenom_personne, agence_personne = @raison_sociale WHERE (id_personne = @id_personne) "
            DeleteCommand="UPDATE Personnes SET actif_personne = 0 WHERE (id_personne = @id_personne)">
            <SelectParameters>
                <asp:Parameter DefaultValue="1" Name="actif_personne" Type="Int16" />
            </SelectParameters>
        </asp:SqlDataSource>
        <asp:SqlDataSource ID="source_organisme" runat="server" 
            ConnectionString="<%$ ConnectionStrings:Formation_2014ConnectionString %>" 
            SelectCommand="SELECT id_organisme, raison_sociale FROM [Organismes]"></asp:SqlDataSource>

    Alors, je récupère dans une liste déroulante mes valeurs de la source source_organismes, j'essaie ensuite d'effectuer ma requête contenu dans UpdateCommand, sans succès : 

    System.Data.SqlClient.SqlException: La variable scalaire "@raison_sociale" doit être déclarée.

    Ou encore System.Data.SqlClient.SqlException: La variable scalaire "@id_organisme" doit être déclarée.

    Je ne sais plus ou regarder, si quelqu'un voit mon erreur ! J'y reviendrais demain, j'ai trop observé mon code aujourd'hui je dois me changer les idées ^^   

    Merci d'avance ! 

    Krishn4k

    mardi 1 avril 2014 15:03

Réponses

  • J'ai supprimé les balises <updateParameters> et leurs contenu, et j'ai bind manuellement, une valeur à Selected Value de ma list box

     <asp:TemplateField HeaderText="Agence" SortExpression="raison_sociale">
                    <EditItemTemplate>
                        <asp:DropDownList ID="agence_personne" runat="server" 
                            DataSourceID="source_organisme" DataTextField="raison_sociale" 
                            DataValueField="id_organisme" AutoPostBack="True" 
                            SelectedValue='<%# Bind("agence_personne") %>' >
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="agence_personne" runat="server" Text='<%# Bind("raison_sociale") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

    Je ne sais pas pourquoi, mais en ayant fait ça comme cela, tout fonctionne (J'ai également remplacé @id_organisme de ma requête par @agence_personne)

    • Marqué comme réponse Aurel Bera vendredi 4 avril 2014 08:50
    vendredi 4 avril 2014 08:45

Toutes les réponses

  • Bonjour,

    Vous devez déclarer vos paramètres dans l'élément UpdateParameters de SqlDataSource :

    <asp:SqlDataSource>
        <UpdateParameters>
            ...
        </UpdateParameters>
    </asp:SqlDataSource>

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mardi 1 avril 2014 23:31
    Modérateur
  • ça ne fonctionne toujours pas :'(

    Je dois bien le rajouter dans le SqlDataSource ou j'ai ma commande Update ? 

    Ce qui  me donne pour le moment : 

    <asp:SqlDataSource ID="source_personnes" runat="server" 
            ConnectionString="<%$ ConnectionStrings:Formation_2014ConnectionString %>" 
            SelectCommand="SELECT Personnes.id_personne, Personnes.nom_personne, Personnes.prenom_personne, Personnes.actif_personne, Personnes.agence_personne,  Organismes.raison_sociale  FROM Personnes INNER JOIN Organismes ON Personnes.agence_personne = Organismes.id_organisme WHERE (Personnes.actif_personne = 1)"
            UpdateCommand="UPDATE Personnes SET nom_personne=@nom_personne, prenom_personne=@prenom_personne, agence_personne = @id_organisme WHERE (id_personne = @id_personne) "
            DeleteCommand="UPDATE Personnes SET actif_personne = 0 WHERE (id_personne = @id_personne)">
            <SelectParameters>
                <asp:Parameter DefaultValue="1" Name="actif_personne" Type="Int16" />
            </SelectParameters>
            <UpdateParameters>
                <asp:ControlParameter Name ="id_organisme" ControlId="id_organisme" />
            </UpdateParameters>
        </asp:SqlDataSource>

    Et mon menu déroulant : 

    <asp:TemplateField HeaderText="Agence" SortExpression="raison_sociale">
                    <EditItemTemplate>
                        <asp:DropDownList ID="id_organisme" runat="server" 
                            DataSourceID="source_organisme" DataTextField="raison_sociale" 
                            DataValueField="id_organisme" AutoPostBack="True">
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="id_organisme" runat="server" Text='<%# Bind("raison_sociale") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

    J'obtiens actuellement l'erreur suivante : 

    System.InvalidOperationException: Impossible de trouver le contrôle 'id_organisme' dans ControlParameter 'id_organisme'.

    J'ai essayé de modifier l'id de ma listbox, j'ai même essayé de rajouter le <update parameters> dans ma deuxième Source de données, mais rien n'y fait ! 


    • Modifié Krishn4k mercredi 2 avril 2014 06:21
    mercredi 2 avril 2014 06:14
  • Une  première cause peut être que vous ne spécifies bien la propriété à utiliser :

    Donc veuillez essayer avec :

    <UpdateParameters>
                <asp:ControlParameter Name ="id_organisme" ControlId="id_organisme" opertyName="SelectedValue" />
            </UpdateParameters>
    
    Bien cordialement,

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 4 avril 2014 08:42
  • J'ai supprimé les balises <updateParameters> et leurs contenu, et j'ai bind manuellement, une valeur à Selected Value de ma list box

     <asp:TemplateField HeaderText="Agence" SortExpression="raison_sociale">
                    <EditItemTemplate>
                        <asp:DropDownList ID="agence_personne" runat="server" 
                            DataSourceID="source_organisme" DataTextField="raison_sociale" 
                            DataValueField="id_organisme" AutoPostBack="True" 
                            SelectedValue='<%# Bind("agence_personne") %>' >
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="agence_personne" runat="server" Text='<%# Bind("raison_sociale") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

    Je ne sais pas pourquoi, mais en ayant fait ça comme cela, tout fonctionne (J'ai également remplacé @id_organisme de ma requête par @agence_personne)

    • Marqué comme réponse Aurel Bera vendredi 4 avril 2014 08:50
    vendredi 4 avril 2014 08:45
  • Merci de votre retour!

    Bien cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 4 avril 2014 08:50