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

  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 Les fonctionnalités automatiques du gridview ne marchent plus après l'affectation d'une liste d'objets au grid
    Bonjour,

    Je viens de m'inscrire, mais je suis un des plus anciens et plus grands visiteurs de developpez.com.Voici ma question:
    J'ai un gridview que je remplis a partir d'un linqdatasource, avec la possibilité de modification et de suppression générée automatiquement via les liens du gridview. Un lien "afficher par id" me permet d' afficher dans le même gridview la ligne qui représente l'id entré dans un textbox, en affectant cet objet a gridview.datasource.
    Le problème est que quand la ligne correspondante à l'id s'affiche dans le gridview, les liens de suppression et de modification ne marche plus en me générant une erreur:

    Le GridView 'GridView1' a déclenché un événement RowEditing qui n'était pas géré.
    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.Web.HttpException: Le GridView 'GridView1' a déclenché un événement RowEditing qui n'était pas géré.
    Merci.

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    que dis le debugger quand il entre dans le rowediting ?

  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
    le debugger dit:
    Erreur source:

    Une exception non gérée s'est produite lors de l'exécution de la demande Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.

    Trace de la pile:


    [HttpException (0x80004005): Le GridView 'GridView1' a déclenché un événement RowEditing qui n'était pas géré.]
    System.Web.UI.WebControls.GridView.OnRowEditing(GridViewEditEventArgs e) +1321874
    System.Web.UI.WebControls.GridView.HandleEdit(Int32 rowIndex) +43
    System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +611
    System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +95
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
    System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +123
    System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
    System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +118
    System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +135
    System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +175
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565

  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
    Et nous on aimerais voir ton code balise
    Bain, peut être que tu as oublie de définir le gestionnaire d’événements RowEditing alors que ce dernier est présent dans le code balise du gridview. Peux-tu nous le confirmer?
    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
    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
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
            AllowSorting="True" AutoGenerateColumns="False" BackColor="White" 
            BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
            DataKeyNames="Id" DataSourceID="LinqDataSource1" Width="529px" 
             Height="16px" 
            style="margin-right: 0px; margin-bottom: 5px;">
        <RowStyle BackColor="White" ForeColor="#003399" />
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="ProductSelector" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Id" InsertVisible="False" SortExpression="Id">
                <EditItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("Id") %>'></asp:Label>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Nom" SortExpression="Nom">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("Nom") %>'></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                </FooterTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Nom") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Prenom" SortExpression="Prenom">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox7" runat="server" Text='<%# Bind("Prenom") %>'></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                </FooterTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("Prenom") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Adresse" SortExpression="Adresse">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox8" runat="server" Text='<%# Bind("Adresse") %>'></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                </FooterTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Bind("Adresse") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <EditItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" 
                            CommandName="Update" Text="Update"></asp:LinkButton>
                        &nbsp;<asp:LinkButton ID="LinkButton11" runat="server" CausesValidation="False" 
                            CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:LinkButton ID="LinkButton4" runat="server" onclick="LinkButton4_Click">Ajouter</asp:LinkButton>
                </FooterTemplate>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton13" runat="server" CausesValidation="False" 
                            CommandName="Edit" Text="Edit"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <FooterTemplate>
                    <asp:LinkButton ID="LinkButton5" runat="server" onclick="LinkButton5_Click">Annuler</asp:LinkButton>
                </FooterTemplate>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton10" runat="server" CausesValidation="False" 
                            CommandName="Delete" Text="Delete"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
        <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
        <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
        <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
    </asp:GridView>

  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
    Définit l'evenement OnRowCommand de ton gridview.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     OnRowCommand="GridView1_RowCommand
    . Ensuite dans le code behind,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    {
        If(e.CommandName=="Edit")
       {
          //traitement pour l’édition.
       }
    }

  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,

    Pour les liens de Edit et Delete, je les ai generé a travers les proprietes qu'offre le gridview=> "lors de la première execution, ces liens marchent très bien". Mais quand je clic sur le lien qui implémente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GridView.DataSourceID=null;
    GridView.DataSource= // l'objet en question ;
    ils ne marchent plus, je voudrais savoir est ce qu'il y a un moyen pour réinitialiser le gridview de telle sorte qu'il régénère ces méthode de suppression et de modification automatiquement sans passer par la redéfinition de ces méthodes.

    Merci

  8. #8
    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
    Des que tu bind le gridview dans le code behind, tu perd certaines fonctionnalités automatique liée au gridview comme le sorting, paging, editing, .....

  9. #9
    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
    Dans ce cas quelle est la solution ?

    Et au cas ou c'est totalement impossible, comment pourrais-je localiser les différents composants du gridview ( textbox,liens, ...) , pour les utiliser dans les méthodes de redéfinition de l’édition et de la suppression ?

    Merci.

  10. #10
    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
    J'ai une question: au début tu définit ton DatasourceID, pourquoi utiliser DataSource après?
    A+

  11. #11
    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
    Je l'ai deja mentionné dans mon tout premier message.
    Au debut, je remplis mon gridview avec les donnees d'une table grace à un linqdatasource, ensuite je clic sur un lien "afficher par id" qui implemente une methode qui recupere le contenu d'une textbox où on ecrit l'id, puis retourne la ligne correspondante à l'id entré. Cette ligne, je l'affecte au même gridview avec : gridview.datasource= "la ligne"; c'est tout !

    Le problème est que les fonctionnalités d’édition et de suppression ne marchent plus !

  12. #12
    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
    c bon j'ai essayé d'utiliser linqtosql et ça marche.

  13. #13
    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
    Le problème est que les fonctionnalités d’édition et de suppression ne marchent plus !
    Normal.
    Je résume ton problème: au début ton gridview est liée à partir du DataSourceID. Fonctionnalité Edit, Update, Delete marche bien.
    Maintenant tu bind le gridview en code behind, cela implique l'indisponibilité des fonctionnalité automatique pour l'Edit, Update et Delete. Effectivement, c'est un comportement normal. Pour y remédier, ajoutes les evements suivants dans to gridview:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    onrowcancelingedit="GridView1_RowCancelingEdit"  
     onRowDeleting="GridView1_RowDeleting" onRowEditing="GridView1_RowEditing"  
     onRowUpdating="GridView1_RowUpdating"
    .
    Dans ton cas, tu devras les ajoutés dynamiquement vu que tu t'en sert pas au début.
    Apres, difinit leurs gestionnaires d’événements dans le code behind:
    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
     protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)  
    {  
          GridView1.EditIndex = e.NewEditIndex;  
          GridView1.DataSourceID=null;
          GridView1.DataSource= // l'objet en question ; 
          GridView1.DataBind();
    }  
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)  
    {  
        GridView1.EditIndex = -1;  
        GridView1.DataSourceID=null;
        GridView1.DataSource= // l'objet en question ; 
        GridView1.DataBind(); 
    } 
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)  
    { 
    ---- Construire la requête pour mettre a jour les données dans DB      
    }

  14. #14
    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,

    Merci pour ta réponse, j'en aurais besoin surement plus tard.
    Dans ce cas, tu confirmes que je n'aurais plus besoin de générer ces fonctionnalités automatiquement, car dans tout les cas ils sont gérés dynamiquement.

    J'ai juste une question, pour la méthode de la modification, comment puis je récupérer les données des textboxs du gridview, pour les mettre à jour dans la DB, cela m'aidera aussi pour la suppression.

    Merci.

  15. #15
    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
    Citation Envoyé par hmimoud Voir le message
    Bonjour Ramajb,

    Merci pour ta réponse, j'en aurais besoin surement plus tard.
    Dans ce cas, tu confirmes que je n'aurais plus besoin de générer ces fonctionnalités automatiquement, car dans tout les cas ils sont gérés dynamiquement.
    Absolument pas. Seulement dans le cas du binding via code behind que tu es obligé d'ajouter les événements cités dessus pour manipuler des données.

    Citation Envoyé par hmimoud Voir le message
    J'ai juste une question, pour la méthode de la modification, comment puis je récupérer les données des textboxs du gridview, pour les mettre à jour dans la DB, cela m'aidera aussi pour la suppression.
    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)  
    { 
          //Construire la requête pour mettre a jour les données dans DB      
          TextBox txtNom = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox6");
            string sql =  string.Format("UPDATE table SET Nom={0} Where Id={1}",txtNom .Text,GridView1.DataKeys[e.RowIndex].Value.ToString());  
            //Ici
            //Exécuter la requête.  
           ...................
     
            GridView1.EditIndex = -1; 
            //Ici 
            //Rebind ton gridView en faisant une nouvelle requete select avec clause where=GridView1.DataKeys[e.RowIndex].Value.ToString() i.e Id du ligne que tu viens juste de modifier
    }

  16. #16
    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
    Citation Envoyé par Ramajb Voir le message
    Absolument pas. Seulement dans le cas du binding via code behind que tu es obligé d'ajouter les événements cités dessus pour manipuler des données.
    Quand j'ai dis:
    Bonjour Ramajb,

    Merci pour ta réponse, j'en aurais besoin surement plus tard.
    Dans ce cas, tu confirmes que je n'aurais plus besoin de générer ces fonctionnalités automatiquement, car dans tout les cas ils sont gérés dynamiquement.
    ,je parlais de mon cas bien sur.

    Et merci pour ton intérêt .
    A+

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

Discussions similaires

  1. [Clavier] Les lettres E et A ne marchent plus
    Par Invité dans le forum Périphériques
    Réponses: 7
    Dernier message: 12/12/2011, 21h29
  2. Réponses: 1
    Dernier message: 09/10/2009, 09h45
  3. Réponses: 4
    Dernier message: 12/02/2008, 09h54
  4. Stocker une liste d'objets personnalisés dans les settings
    Par laville dans le forum Général Dotnet
    Réponses: 12
    Dernier message: 13/12/2007, 11h14
  5. Réponses: 4
    Dernier message: 22/05/2006, 11h53

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