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 :

Un GridView qui veut pas suppirmer


Sujet :

ASP.NET

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Un GridView qui veut pas suppirmer
    Salut tout le monde.

    J'ai un GridView un peu récalcitrant depuis quelques jours.
    Le bonhomme s'est mis en tête de ne plus supprimer les choses !

    Et surtout, je ne comprends pas pourquoi il me blaance les inssanité qu'il me jette en travers de la tronche. Vous allez comprendre en voyant le code. Moi j'ai lu, relu et ratalu et j'ai rien trouvé de bizarre.

    Côté HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:SqlDataSource ID="sdsListeMenu" runat="server" ConnectionString="<%$ ConnectionStrings:DataDev %>"></asp:SqlDataSource>
    <asp:GridView ID="gvListeMenu" runat="server" DataSourceID="sdsListeMenu"></asp:GridView><br /><br />
    CodeBehind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    With sdsListeMenu
    			.SelectCommandType = SqlDataSourceCommandType.Text
    			.UpdateCommandType = SqlDataSourceCommandType.Text
    			.DeleteCommandType = SqlDataSourceCommandType.Text
                .SelectCommand = "EXEC ListeMenu '" & GetApplicationGUID().ToString & "'"
                .UpdateCommand = "UPDATE Menu SET Nom_Menu = @Nom_Menu WHERE Id_Menu = @Id_Menu"
                .DeleteCommand = "DELETE Menu WHERE Id_Menu = @Id_Menu"
    		End With
    		With gvListeMenu
    			.AutoGenerateEditButton = True
    			.AutoGenerateDeleteButton = True
            End With
    Message d'erreur lorsque je clique sur le lien "Suppirmer" :
    La variable scalaire "@Id_Menu" doit être déclarée.
    Mais où je la déclare sa bondieu de variable qu'il a déjà pour le reste du fonctionnement ?

    Vous pouvez m'aider, il ne me reste plus beaucoup de cheveux sur la tête.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Normal si tu déclares pas ton sqlparameter..

    Soit tu le déclares dans le sqldatasource entre les balises

    <UPDATEPARAMETER>
    et
    <DELETEPARAMETER>

    soit tu fait un command.add.parameter dans le codebehind....

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ben c'est là que je comprends pas. Le UPDATE il marche tout seul, lui.
    Pourquoi le DELETE n'en fais pas autant ?

    Et surtout, moi je veux bien rajouter du code, mais comment on fait cette déclaration ? Parce que j'ai relu la MSDN et je capte pas ce qu'il faut faire.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Si t'as copié tout le code je vois pas comment ca peut marcher


    Sinon déclaration dans le sqldatasource.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <DeleteParameters>
                        <asp:ControlParameter Name="OrderID" ControlId="DropDownList1" PropertyName="SelectedValue" />
    </DeleteParameters>
    Ensuite tu adapte ton paramètre en fonction de la ou tu récupère ton ID...

    Depuis le code behind je peux pas trop t'aider moi je suis plus C#..

    mais en gros tu fait un add parameter dans ton sqldatasource..
    Puis tu alimentes la valeur de ce paramètre...

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Au niveau code, la seule chose que je n'ai pas postée ici c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	Protected Sub gvListeMenu_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvListeMenu.RowCommand
    		Select Case e.CommandName
    			Case "Edit"
                    sdsListeMenu.SelectCommand = "EXEC ListeMenu '" & GetApplicationGUID().ToString & "'"
    		End Select
    	End Sub
    Mais la Proc Stock ne fait qu'un simple Select et je ne fais cela que pour recharger le GridView et le mettre à la jour à l'affichage. Du coup, la question reste là : le Update, ça marche et pas le DElete

    Ensuite, ajouter le DeleteParameter, je veux bien. Maintenant que je commence à comprendre ce qu'il attend en entrée. Sauf que, dans ton exemple, tu vas chercher une valeur qui se trouve dans une DDL qui serait là. Moi, j'en ai pas. Je n'ai que le GridView. Du coup, je ne sais pas comment alimenter la valeur du paramettre.

    Pour le CodeBehind, envoi en C#. Grâce à la pression de LuteceFalco, j'ai fini par m'y mettre un peu, du coup je comprend un peu et y a de trés bons traducteur en ligne.

    Et merci pour ton aide.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Ajout d'un parameter en code behind.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     SqlDataSource.DeleteParameters.Clear();
     SqlDataSource.DeleteParameters.Add("toto", Id_Menu);

    Sinon dans l'asp pour répondre a ta question tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <asp:Parameter Name="Id_Menu" Type="leType" />
    Si ton datafield s'apelle Id_Menu dans ton gridview il va te le lier automatiquement

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Je viens de tester le CodeBehind (mis à part le point virgule, c'est pareil en VB !) et ça marche pas.
    Il me dit que Id_Menu n'est pas déclaré

    Maintenant, tu me parle de DataField et j'en ai pas déclaré. Tu as la totalité de mon code dans ce que j'ai posté. Le premier champ remonté de la BDD s'appelle effectivement Id_Menu, mais est ce que, dans le remplissage automatique du GRidView il garde bien ce nom ?

    Ensuite, je me suis risqué à rajouter le fameux "DataKeyNames". Outre le fait que je n'ai pas pu le mettre dans le CodeBehind parce qu'il veut un truc compliqué avec une histoire de tableau, en le mettant côté HTML, ça règle le problème.

    Sauf que (heu, oui je suis champion pour trouver le truc qui va jamais parfaitement !) dans un autre GRidView, où j'ai le même problème, ma requête de DElete prends deux parametres pour faire le DElete qui sont les deux premiers champs. Dans la construction de ma table je n'ai pas mis d'identifiant. Je sais que c'est pas bien, mais c'est une table de liaison qui prend un identifiant d'une talbe, puis un autre identifiant d'une autre table et une troisième avec une valeur toute bête. du coup, j'ai fait l'économie d'un identifiant.

    Vois tu ce que je veux dire ?

    Mais surtout, ce que je ne comprends toujours pas : c'est pour ça marche dans le Update et pas dans le Delete ?

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Je viens de tester le CodeBehind (mis à part le point virgule, c'est pareil en VB !) et ça marche pas.
    Il me dit que Id_Menu n'est pas déclaré
    Tu l'as placé ou le code ? dans le Page_INIT ?

    Citation Envoyé par zooffy Voir le message
    Maintenant, tu me parle de DataField et j'en ai pas déclaré. Tu as la totalité de mon code dans ce que j'ai posté. Le premier champ remonté de la BDD s'appelle effectivement Id_Menu, mais est ce que, dans le remplissage automatique du GRidView il garde bien ce nom ?
    Tu laisse trop aspnet bossé tout seul. je serais toi je définirais mes champs dans le gridview... Parce que là ton gridview si tu a mis tout le code me parait un peu "léger"

    Citation Envoyé par zooffy Voir le message
    Ensuite, je me suis risqué à rajouter le fameux "DataKeyNames". Outre le fait que je n'ai pas pu le mettre dans le CodeBehind parce qu'il veut un truc compliqué avec une histoire de tableau, en le mettant côté HTML, ça règle le problème.
    En mettant le datakeynames tu dois le forcer a "générer" le champ Id_Menu.Comme je l'ai dis plus haut je trouve ca plus propre de mettre tout les champs dont tu as besoin dans le gridview parceque là tu bosses en aveugle.

    Citation Envoyé par zooffy Voir le message
    Sauf que (heu, oui je suis champion pour trouver le truc qui va jamais parfaitement !) dans un autre GRidView, où j'ai le même problème, ma requête de DElete prends deux parametres pour faire le DElete qui sont les deux premiers champs. Dans la construction de ma table je n'ai pas mis d'identifiant. Je sais que c'est pas bien, mais c'est une table de liaison qui prend un identifiant d'une talbe, puis un autre identifiant d'une autre table et une troisième avec une valeur toute bête. du coup, j'ai fait l'économie d'un identifiant.

    Vois tu ce que je veux dire ?
    A peu près du coup ton deuxième gridview marche pas parce qu'il y a deux champs. ben soit tu met les deux champs dans le datakeynames Datakeynames='id1,id2'... Soit tu fais comme je dis en haut c'est a dire définir tout tes champs correctement dans le gridview...

    Citation Envoyé par zooffy Voir le message
    Mais surtout, ce que je ne comprends toujours pas : c'est pour ça marche dans le Update et pas dans le Delete ?
    Ben moi non plus je vois pas pourquoi l'update fonctionne.

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par p_mehdi Voir le message
    Tu l'as placé ou le code ? dans le Page_INIT ?
    Oui, dans le Page_Init, sinon ça charge pas au bon moment.

    Citation Envoyé par p_mehdi Voir le message
    Tu laisse trop aspnet bossé tout seul. je serais toi je définirais mes champs dans le gridview... Parce que là ton gridview si tu a mis tout le code me parait un peu "léger"
    Ben je suis informacticien, donc fainéant
    J'aime bien quand le FrameWork bosse à ma palce....
    Non, c'est surtout que là, j'ai pas besoins d'un truc super chiadé. C'est une page d'administratoin qui ne sera jamais ouverte à un quelconque public.

    Citation Envoyé par p_mehdi Voir le message
    En mettant le datakeynames tu dois le forcer a "générer" le champ Id_Menu.Comme je l'ai dis plus haut je trouve ca plus propre de mettre tout les champs dont tu as besoin dans le gridview parceque là tu bosses en aveugle.
    Du coup, j'ai rajouter un identifiant compteur dans ma table pour ne plus avoir qu'un seul champs et j'ai placé des DataKeyNames côté HTML. Je ne comprends toujours pas pourquoi je n'arrive jamais à placer les DataKeyNames dans le CodeBehind, mais ceci est une autre histoire.

    Citation Envoyé par p_mehdi Voir le message
    A peu près du coup ton deuxième gridview marche pas parce qu'il y a deux champs. ben soit tu met les deux champs dans le datakeynames Datakeynames='id1,id2'... Soit tu fais comme je dis en haut c'est a dire définir tout tes champs correctement dans le gridview...
    Maintenant, ça marche. Je ne savait pas qu'on pouvait envoyer plusieurs DataKeyNames avec juste une virgule comme séparteur, merci pour l'info.

    Citation Envoyé par p_mehdi Voir le message
    Ben moi non plus je vois pas pourquoi l'update fonctionne.
    C'est là que l'inquiétude me gagne, en général, et que je me demande si l'informatique n'a pas un côté "Magique"

    Bon, avec les dataKeyNames ça fait ce que je veux. Dans d'autre cas, je défini beaucoup plus finement les champs de mes GridView, surtout sur les pages publiques.
    Le mystère restera entier je pense, d'autant plus que dans la MSDN l'exemple qu'ils donnent fait exactement comme je faisais au départ.

    En tout cas merci pour ton aide.
    Si tu as une autre idée, n'hésites pas.

    Ou même si quelqu'un voit pourquoi ça marchait pas au départ, je suis preneur.

    Kenavo

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Content que ca marche..

    Mais quand même je pense que définir deux trois champs t'aurait fait gagner du temps..

    Allez A+++

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

Discussions similaires

  1. PB de focus qui veut pas y aller
    Par zooffy dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/10/2006, 12h01
  2. [RegEx] str_replace qui veut pas replacer
    Par lamoufle dans le forum Langage
    Réponses: 5
    Dernier message: 13/09/2005, 12h37
  3. ShellExecute qui veut pas faire son boulot...
    Par giloutho dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/08/2005, 11h49
  4. java web start qui veut pas se lancer
    Par calvin dans le forum JWS
    Réponses: 4
    Dernier message: 30/06/2004, 11h42

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