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 :

Modification dans un gridview à partir d'une dropdownlist


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Points : 136
    Points
    136
    Par défaut Modification dans un gridview à partir d'une dropdownlist
    Bonjour,

    J'ai une table X(idX,...., #idprix) et une table Prix(idprix, libelle).
    Je veux afficher la table X dans un gridview ainsi que le libelle de la table Prix:
    |idX|....|...|...|libelle|
    |....|....|...|...|.......|
    Quand je clique sur "edit" le libelle devient une liste qui sera chargée à partir de la liste des libelle de la table Prix qui nous laissera choisir avec quel libelle on veut modifier le libelle courant.
    1| Au debut, j'ai remplis ma liste à partir d'un linqdatasource, et j'ai mis libelle comme datatextfield et idprix comme datavaluefield. Jusqu'ici quand je clique sur edit dans le grid j'ai ma liste pleine, je selectionne un element, puis je clique sur "update" => la valeur ne se modifie pas. Après avoir cherché sur le net, j'ai trouvé une solution: j'ai ajouté à la liste ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectedValue='<%# Bind("idprix") %>'
    => ça marche à merveille pour update !
    2| Après j'ai voulu faire tout cela sans passer par un linqdatasource ou un sqldatasource pour remplir ma ddl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e) {    
     
    if (grdDevelopment.EditIndex == e.Row.RowIndex && e.Row.RowType==DataControlRowType.DataRow)     { 
     
    //Vérifie l'index de la cellule qui contient ta liste déroulante, dans cas il s'agit de la colonne n°1
    DropDownList drpBuildServers = (DropDownList)e.Row.Cells[0].FindControl("ddl");   
                    var id = (from a in bd.Prix select a).ToList();
                    dp1.DataSource = id;
                    dp1.DataTextField = "libelle";
                    dp1.DataValueField = "idprix";
                  dp1.DataBind();  } }
    ce bout de code a remplacé ce que j'ai fait dans |1| pour le linqdatasource, le DataTextField et le DataValueField. Là quand je clique sur edit ma liste est pleine, mais quand je clique sur update => la valeur ne se modifie pas.
    Comme au debut, j'ai essayer d'utiliser la même solution: j'ai ajouté à la liste ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectedValue='<%# Bind("idprix") %>'
    =>Erreur! pour update.
    C'est ce que j'essaye de comprendre !
    J’espère avoir été clair!
    Merci
    «Les savants des temps passés et des nations révolues n’ont cessé de composer des livres. Ils l’ont fait pour léguer leur savoir à ceux qui les suivent. Ainsi demeurera vive la quête de la vérité. »
    Al Khwarizmi, père de l'algèbre et des algorithmes.

  2. #2
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour,

    Si cela fonctionne bien avec une LinqDataSource, pourquoi vouloir changer ?

    Sinon, quelle est la DataSource utilisée pour ta GridView (et donc le mécanisme sous-jacent pour l'update d'une ligne dans ta base) ? Tu peux toujours jouer avec la collection NewValues lors de l'event Update afin de bien spécifier la valeur de idprix.

    En espérant t'avoir aidé.

  3. #3
    Membre habitué Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Points : 136
    Points
    136
    Par défaut
    Merci pour ton aide,

    Ma gridview utilise un linqdatasource et contient la table X (premier message) ou se trouve idprix comme clé étrangère.
    Je n'ai pas bien saisi comment utiliser NewValues pour specifier la valeur de idprix, est ce que tu peux me donner un petit éclaircissement ?

    Merci !
    «Les savants des temps passés et des nations révolues n’ont cessé de composer des livres. Ils l’ont fait pour léguer leur savoir à ceux qui les suivent. Ainsi demeurera vive la quête de la vérité. »
    Al Khwarizmi, père de l'algèbre et des algorithmes.

  4. #4
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    Bonjour,

    Peut tu nous montrer ton code balisé du gridView ?
    A+

  5. #5
    Membre habitué Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Points : 136
    Points
    136
    Par défaut
    Le voici:
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <asp:GridView ID="grdLPromo" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="idlprom" DataSourceID="LinqDataSource1" Width="929px" 
                onrowcancelingedit="grdLPromo_RowCancelingEdit" 
                onrowdeleting="grdLPromo_RowDeleting" onrowediting="grdLPromo_RowEditing" 
                onrowupdating="grdLPromo_RowUpdating" 
                onrowdatabound="grdLPromo_RowDataBound" 
                onrowcommand="grdLPromo_RowCommand">
            <Columns>
                <asp:TemplateField HeaderText="idlprom" InsertVisible="False" 
                    SortExpression="idlprom">
                    <EditItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("idlprom") %>'></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("idlprom") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="idprix" SortExpression="idprix" Visible="False">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("idprix") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Bind("idprix") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Prix">
                    <EditItemTemplate>
                        <asp:DropDownList ID="drpPrix" runat="server" Height="16px" Width="179px" 
                            DataSourceID="LinqDataSource2" DataTextField="libelle" DataValueField="idprix" 
                            SelectedValue='<%# Bind("idprix") %>'>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:DropDownList ID="drpPrix" runat="server" DataSourceID="LinqDataSource3" 
                            DataTextField="libelle" DataValueField="idprix">
                        </asp:DropDownList>
                        <asp:LinqDataSource ID="LinqDataSource3" runat="server" 
                            ContextTypeName="DBDataContext" 
                            EntityTypeName="" TableName="Prixes">
                        </asp:LinqDataSource>
                    </FooterTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label19" runat="server" Text='<%# Bind("Prix.libelle") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="idpromotion" SortExpression="idpromotion" 
                    Visible="False">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("idpromotion") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Bind("idpromotion") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="qte1" SortExpression="qte1">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("qte1") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtQte1" runat="server"></asp:TextBox>
                    </FooterTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label4" runat="server" Text='<%# Bind("qte1") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="qte2" SortExpression="qte2">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("qte2") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtQte2" runat="server"></asp:TextBox>
                    </FooterTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label5" runat="server" Text='<%# Bind("qte2") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="qtegratuit" SortExpression="qtegratuit">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("qtegratuit") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtQtegratuit" runat="server"></asp:TextBox>
                    </FooterTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label6" runat="server" Text='<%# Bind("qtegratuit") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="remise" SortExpression="remise">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("remise") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="txtRemise" runat="server"></asp:TextBox>
                    </FooterTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label7" runat="server" Text='<%# Bind("remise") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ShowHeader="False">
                    <EditItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" 
                            CommandName="Update" Text="Update"></asp:LinkButton>
                        &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                            CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:LinkButton ID="lnkEnregistrer" runat="server" CommandName="InsertPromo">Enregistrer</asp:LinkButton>
                        &nbsp;<asp:LinkButton ID="lnkAnnuler" runat="server" CommandName="Annuler">Annuler</asp:LinkButton>
                    </FooterTemplate>
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
                            CommandName="Edit" Text="Edit"></asp:LinkButton>
                        &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                            CommandName="Delete" Text="Delete"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    Merci !
    «Les savants des temps passés et des nations révolues n’ont cessé de composer des livres. Ils l’ont fait pour léguer leur savoir à ceux qui les suivent. Ainsi demeurera vive la quête de la vérité. »
    Al Khwarizmi, père de l'algèbre et des algorithmes.

  6. #6
    Membre éclairé Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Points : 755
    Points
    755
    Par défaut
    A mon avis, ton gestionnaire d’événement RowUpdating devrait être similaire à ceci:
    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
    protected void grdLPromo_RowUpdating(object sender, GridViewUpdateEventArgs e)
    { 
      //ici on recupere la valeur de chaque control 
      ........
      TextBox TextBox66= (TextBox)grdLPromo.Rows[e.RowIndex].FindControl("TextBox6");
      ...........
      DropDownList drpPrix1= (DropDownList)grdLPromo.Rows[e.RowIndex].FindControl("drpPrix");
     
    //ici on lance une sauvegarde des donnees qu'on vient de modifier vers la base de donnees 
    MethodeUpdate(grdLPromo.DataKeys[e.RowIndex].Values[0],TextBox66.Text,...., drpPrix1.SelectedValue,....);
      // on revient en mode lecture seule
      GridView1.EditIndex = -1;
    //binder à nouveau le gridview
      MethodeFillGrid();
    }
    J’espère t'avoir aidé.

  7. #7
    Membre habitué Avatar de hmimoud
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Points : 136
    Points
    136
    Par défaut
    Bonjour Ramajb,

    Je te remercie d'abord pour le temps que tu as consacré pour lire et repondre à ma question. La methode que tu as suggerer, j'y ai aussi penser, tu me l'a deja souscris dans une discussion anterieure si tu te rappelle ici.
    Mais, comme j'ai dit dans mon premier message de cette discussion, ce que je n'arrive pas à comprendre c'est pourquoi le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SelectedValue='<%# Bind("idprix") %>'
    marche avec un linqdatasource qui remplit la ddl, et ne marche pas avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e) {    
     
    if (grdDevelopment.EditIndex == e.Row.RowIndex && e.Row.RowType==DataControlRowType.DataRow)     { 
     
    //Vérifie l'index de la cellule qui contient ta liste déroulante, dans cas il s'agit de la colonne n°1
    DropDownList drpBuildServers = (DropDownList)e.Row.Cells[0].FindControl("ddl");   
                    var id = (from a in bd.Prix select a).ToList();
                    dp1.DataSource = id;
                    dp1.DataTextField = "libelle";
                    dp1.DataValueField = "idprix";
                  dp1.DataBind();  } }
    qui remplis la ddl aussi.
    Sinon je peux bien me contenter de travailler avec le linqdatasource.
    Cordialement,
    Merci .
    «Les savants des temps passés et des nations révolues n’ont cessé de composer des livres. Ils l’ont fait pour léguer leur savoir à ceux qui les suivent. Ainsi demeurera vive la quête de la vérité. »
    Al Khwarizmi, père de l'algèbre et des algorithmes.

Discussions similaires

  1. Modification des dans la base à partir d'une jTable
    Par andronique dans le forum Général Java
    Réponses: 1
    Dernier message: 02/02/2012, 09h00
  2. Réponses: 1
    Dernier message: 09/01/2012, 16h47
  3. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14
  4. Réponses: 4
    Dernier message: 01/12/2005, 01h01
  5. Ajouter du texte dans un input à partir d'une autre fenêtre
    Par Michaël dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2005, 20h14

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