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 :

Probleme datasource d'un dropdownlist en mode edit gridview [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 5
    Par défaut Probleme datasource d'un dropdownlist en mode edit gridview
    Bonjour,

    apres avoir passé des heures sur le net à la recherche de solutions je viens poster ici dans l'espoir qu'il existe une solution à mon problème.

    Je dispose d'un fichier .aspx dans lequel j'affiche un gridview à partir des données d'une base Microsoft SQL (sqldatasource1).
    Dans ce gridview je dispose d'un certain nombre de colonnes que je souhaite modifier avec le mode edit du gridview.
    Cependant la petite subtilité est que je souhaite dans ce mode edit affiche une liste déroulante (DropDownList) à partir d'une deuxième datasource (sqldatasource2).

    Dans chacune de mes datasources je fais appel à des procédures stockées.
    La datasource2 qui me sert pour la ddl prend en paramètre de procédure un champ de la ligne sélectionnée.

    une erreur est alors générée lorsque j'appuis sur le bouton d'edit
    Détails de l'exception system.Data.SqlClient.SqlException: Must declare the scalar variable "@Dirigeant".

    Ci-dessous le code de la page modif.aspx
    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
     
    <%@ Page Title= ”modif” Language=“ C”  MasterPageFile=” ~/Site.master” AutoEventWireup=“true“ CodeFile=”modif.aspx” Inherits=”Account_modif” %>
     
    <asp:Content Id=”HeaderContent” runat=”server” ContentPlaceHolderID=”HeadContent”>
    </asp:Content>
    <asp:Content Id=”BodyContent” runat=”server” ContentPlaceHolderID=”MainContent”>
     
    <asp:GridView Width=”100%” ID=”GridView1” runat=”server” AutoGenerateColumns=”False” DataKeyNames=”label” AllowPaging=”True” AlloSorting=”True” DatasourceID=”SqlDataSource1”>
     
    <Columns>
    <asp:BoundField DataField=”Label” ReadOnly=”true” HeaderText=”Label” SortExpression=”Label” />
     
    ……
     
    <asp:BoundField DataField=”Dirigeant” ReadOnly=”True” HeaderText=”Dirigeant” SortExpression=”Dirigeant” />
    <asp:TemplateField HeaderText=”Ressource” ControlStyle-Width=”100px” SortExpression=”Ressource”>
    	<EditItemTemplate>
    <asp:DropDownList ID=”DropDownList1” runat=”server” DataSourceID=”SqlDataSource2” DataTextField=”RSC” DataValueField=”RSC” SelectedValue=’<%# Bind(“Ressource”) %’>
    		</asp:DropDownList>
    	</EditItemTemplate>
    	<ItemTemplate>
    	<asp:Label ID=”Label1” runat=”server” Text=’<%# Bind(“Ressource”)%’></asp:Label>
    	</ItemTemplate>
    </asp:TemplateField>
     
    ……
     
    <asp:CommandField ShowEditButton=”True” ></asp:CommandField>
    </Columns>
     
    <HeaderStyle BackColor=”LightGray”></HeaderStyle>
    <PagerSettings Mode=”NumericFirstLast” LastPageText=”Fin” FirstPageText=”Début”/>
     
    </asp:GridView>
     
     
    <asp:SqlDataSource Id=”SqlDataSource1” runat=”server” ConnectionString=”<%$ ConnectionStrings:ApplicationServices3 %>”
    SelectCommand=”EXECUTE sp_ListeAgentparNiveau @user”
    UpdateCommand=”EXECUTE sp_MAJInfosAgent2 @Label, @Ressource”></asp:SqlDataSource>
     
    <asp:SqlDataSource Id=”SqlDataSource2” runat=”server” ConnectionString=”<%$ ConnectionStrings:Applications3 %>”
    SelectCommand=”EXECUTE sp_ListeRessourceSecteur @Dirigeant”>
    </asp:SqlDataSource>
     
    </asp:Content>
    C’est donc au niveau du SqlDataSource2 ici, qu’un bug subsiste au niveau de “@Dirigeant”, si je passe un argument en dur cela fonctionne très bien.
    Que dois-je changer pour que ma SqlDataSource2 puisse récupérer le dirigeant de la ligne sélectionné en mode edit ?

    ps: J’ai essayé de passer Dirigeant dans le datakeynames sans succès, la même erreur subsiste.

  2. #2
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Hello,

    J'ai trouvé ça sur la MSDN, ça va peut-être t'aider :
    L'exemple suivant montre un contrôle SqlDataSource qui récupère des informations basées sur une valeur d'un autre contrôle de la page.
    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
    <asp:DropDownList id="DropDownList1" runat="server" 
        autopostback="True">
      <asp:listitem selected>Sales Representative</asp:listitem>
      <asp:listitem>Sales Manager</asp:listitem>
      <asp:listitem>Vice President, Sales</asp:listitem>
    </asp:DropDownList></p>
     
    <asp:SqlDataSource id="Employees" runat="server"
      ConnectionString="<%$ ConnectionStrings:Northwind%>"
      SelectCommand="SELECT LastName FROM Employees WHERE Title = @Title">
      <SelectParameters>
        <asp:ControlParameter Name="Title" 
          ControlID="DropDownList1"
          PropertyName="SelectedValue"/>
      </SelectParameters>
    </asp:sqldatasource>

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 5
    Par défaut
    J'ai essayé de modifier le datasource comme dans votre exemple de la manière suivante:

    <asp:SqlDataSource id="SqlDataSource2" runat="server"
    ConnectionString="<%$ ConnectionStrings:ApplicationServices3 %>"
    SelectCommand="EXECUTE sp_ListeRessourceSecteur @Dirigeant">
    <SelectParameters>
    <asp:ControlParameter Name="Dirigeant"
    ControlID="GridView1"
    PropertyName="SelectedValue"/>
    </SelectParameters>
    </asp:sqldatasource>
    Et cette fois j'obtient l'erreur suivante, System.ArgumentOutOfRangeException: 'DropDownList1' a un SelectedValue qui n'est pas valide, car il n'existe pas dans la liste des éléments.
    Cette erreur survient toujours lorsque je lance le mode edit de mon gridview, le champ dirigeant de mon gridview contient pourtant bien des ressources.

    Le probleme ne vient il pas du fait qu'il n'est pas choisi uniquement un champ du gridview dans le selectedvalue mais tous les champs? Comment faire en sorte qu'il ne choisisse que le champ Dirigeant?

  4. #4
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    Voici le du code et des remarques qui t'aideront à évoluer.

    Demande si tu ne comprends pas.

    Bon chance

    La procédure stocké que tu appelles ce nome "sp_ListeRessourceSecteur", pas bien ^^ "sp_" en sql serveur c'est réservé pour les procédures stocké systéme on va éviter.

    Déjà un petit pb ton sqldatasource tu passes tout en chaîne, c'est une procédure stocké alors déclarer ton selectcommandtype, donne parametre au selectparameter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <asp:SqlDataSource ID="afficherressource" runat="server" ConnectionString=”<%$ ConnectionStrings:ApplicationServices3 %>”
                                        SelectCommand="sp_ListeRessourceSecteur" SelectCommandType="StoredProcedure">
                                        <SelectParameters>
                                            <asp:Parameter Name="Dirigeant" />                                    </SelectParameters>
                                    </asp:SqlDataSource>
    Ta procédure stocké attend un paramétre mais te ne lui donne pas.

    Utilise OnRowDataBound car la requête dois être executé à chaque ligne de ton gridview

    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
    protected void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
     //pour les lignes               
    DataRowView dr = (DataRowView)e.Row.DataItem;
     
    //ton gridview est en edition
                    if (e.Row.RowState.Equals(DataControlRowState.Edit))
                    {
    //on va chercher ta ddl dans ton gridview
                    DropDownList ddl = ((DropDownList)(e.Row.FindControl("ddl")));
     
    //jeu de données    
    DataTable dt = new DataTable();
                SqlDataAdapter sda = new SqlDataAdapter(nomprocedure, ConfigurationManager.ConnectionStrings["ma chaine de connection"].ConnectionString);
                sda.SelectCommand.CommandType = CommandType.StoredProcedure;
                    sda.SelectCommand.Parameters.AddWithValue("@Dirigeant",dr.Row["Dirigeant"].ToString());
                sda.Fill(dt);
                sda.Dispose();
    //insertion dans ddl
                        ddl.DataSource = dt;                    
                        ddl.DataTextField="RSC";
                        ddl.DataValueField="RSC";
    //chargement du ddl
                        ddl.DataBind();
    //recherche de la valeur à sélectionner
                        ddl.SelectedValue = dr.Row["Ressource"].ToString();
                }
            }
    en aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <asp:GridView OnRowDataBound="GridView1_OnRowDataBound"
     
    <EditItemTemplate>
    <asp:DropDownList ID=”ddl” runat=”server”/></EditItemTemplate>

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 5
    Par défaut
    Bonjour,

    J'ai effectué les changements que tu m'a préconisés et aujourd'hui l'erreur ne se situe pas au passage en mode edit mais à la mis à jour final du mode edit, lorsque je valide la modification.
    L'erreur "Must declare the scalar variable "@Ressource"" réapparait mais cette fois avec la ressource, et si je la passe dans la datakeynames comme conseillé sur le net, la mis à jour ne se fait tout bonnement pas.

    D'où peut venir cette erreur?

  6. #6
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    Tu va devoir utiliser les événments suivants sur ton gridview:
    • OnRowUpdated
    • OnRowUpdating


    N'oublie pas tu vas devoir récupérer les données contenu dans la dropdownlist.

    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
            protected void GridView_OnRowUpdating
    (object sender, GridViewUpdateEventArgs e)
            {
                DropDownList ddl = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("ddl");
    //tu fournis le nom de ta colonne pour le sqldataqource
                e.NewValues.Add("Ressource", ddl.SelectedValue);
            }
     
            protected void GridView_OnRowUpdated(object sender, GridViewUpdatedEventArgs e)
            {
                if (e.Exception != null)
                {
                    Response.Write(e.Exception.Message);
     
                    e.ExceptionHandled = true;
     
                    e.KeepInEditMode = true;
                }
            }
    pour aspx
    dans ton sqldatasource tu dois avoir un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <UpdateParameters>
                    <asp:Parameter Name="Label" Type="String" />
                    <asp:Parameter Name="Ressource" Type="String" />
                </UpdateParameters>
    passe en mode design de vsual studio pour faire tes sqldatasource si tu n'es pas habitués c'est plus simple.

    Bonne chance

    N'oublie pas le tag résolu.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 5
    Par défaut
    Cela me semble parfaitement marcher pour le moment, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. deux dropdownlist en mode edit
    Par alicia26 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/11/2009, 08h16
  2. [GridView]Remplir mon DropDownList en mode Edition
    Par dv-2008 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/04/2009, 21h28
  3. Intercepter Dropdownlist en mode edit
    Par Zasoub dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/11/2007, 11h12
  4. DropdownList dans un Datalist en mode Edit
    Par maXrez dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/08/2007, 10h42
  5. [C#] Mode édition DropDownList
    Par bolo dans le forum ASP.NET
    Réponses: 7
    Dernier message: 14/07/2004, 17h25

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