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 :

Souci avec la DataKeyName d'un GridView


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 Souci avec la DataKeyName d'un GridView
    Salut

    J'ai mis en place un GridView et je voudrais utiliser le DataKeyName pour mieux gérer mes actions.
    J'ai donc ouver la MSDN et j'ai regardé le code en exemple, mais ça fait pas pareil chez moi.

    Voilà le code pour faire plus clair.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:SqlDataSource ID="sdsPageListe" runat="server" ConnectionString="<%$ ConnectionStrings:CS %>"></asp:SqlDataSource>
    <asp:GridView ID="gvPageListe" runat="server" DataSourceID="sdsPageListe" AutoGenerateColumns="false"></asp:GridView>
    Et le CodeBehind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sdsPageListe.SelectCommand = "SELECT Id_Page, Titre, txtLien FROM MILI_Pages WHERE Appl_Name = '" & Request.Url.Host & "' ORDER BY StatutConnection, PresentNav DESC, OrdrePage"
    sdsPageListe.UpdateCommand = "UPDATE MILI_Pages SET Titre = @Titre, txtLien = @txtLien WHERE Id_Page = @Id_Page"
     
    gvPageListe.DataKeyNames = "Id_Page"
    Mais il me dit que :
    Une valeur de type 'String' ne peut pas être convertie en 'Tableau à 1 dimension(s) de String'.
    Sauf que là, je vois pas trés bien ce qu'il veut exactement et surtout, dans la MSDN ils ont fait comme j'ai fait.
    La seule différence notable c'est que dans la MSDN le AutoGenerateColums est à True, alors que moi il est à False, parce que je dois fabriquer mes colonne à la main.

    Pouvez vous m'aider ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 70
    Par défaut
    Peut-être que ton champ que tu réfère dans ta base de données est en texte. Il faut sûrement que tu lui passe un entier dans ta bdd pour que cela fonctionne.

  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
    Le champs en question est un INT avec un compteur dans la table.

    Une autre idée ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 70
    Par défaut
    Peut-être que le DataKeyName par défaut n'est pas le bon, c'est une possibilité. Sinon j'ai pas d'autre idées qui viennent...

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur / DBA
    Inscrit en
    Septembre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur / DBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 133
    Par défaut
    pour la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      GridView.DataKeyNames = New String() {"tonchampdanslabase"}
    Moi j y met des type sql uniqueidentifier des entier des doubles sans problème, par contre il faut faire ça après le databind ou après avoir lié ta datasource au gridview

    et pour récupérer ta valeur par la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Dim vKey As DataKey = GridView.DataKeys(e.NewSelectedIndex)

  6. #6
    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
    Merci pour ton aide.

    Je trouve ça bizarre comme syntaxe, d'autant qu'elle n'est pas dans la MSDN.

    Par contre, pour la récupération, j'ai pas eu besois. Ma requête UPDATE fonctionne toute seule telle que ej 'lai mise dans mon code au départ du topic.

    Mais je note ta syntaxe de récupération, ça pourrait peut être me servir dans les RowCommand, pour faire des traitements un peu plus spécifiques.

    En tout cas merci digitaldna

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur / DBA
    Inscrit en
    Septembre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur / DBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 133
    Par défaut
    la msdn te donne de souvenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GridView.DataKeyNames = New String("Tonchamp")
    cette syntaxe je l'ai obtenue d'un collègue du bureau lol qui je l'avoue code en c# mais ce n'est pas spécifique a c# j'ai trouvé étrange de mettre des {} mais au final il n'y à que cela qui fonctionne sans problème alors bon voila parfois msdn n'est pas précis et ce même très souvent.

  8. #8
    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 d'esasyer cette syntaxe, mais il est pas content et dit que :
    un String ne peut pas être converti en tableau à une dimension.

    L'autre syntaxe, en revanche, marche trés bien.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur / DBA
    Inscrit en
    Septembre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur / DBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 133
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Je viens d'essayer cette syntaxe, mais il est pas content et dit que :
    un String ne peut pas être converti en tableau à une dimension.

    L'autre syntaxe, en revanche, marche très bien.
    C'est dans la MSDN ça mdr mais ma solution c moi donc forcément ça fonctionne héhé (vive la modéstie)

  10. #10
    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
    Salut

    Je sort pas un truc des bas pour le fun, mais c'est jsute que en fait, ça ne marche pas bien ou alors j'ai loupé un détail.

    Donc voici un code tout beau tout propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <asp:SqlDataSource ID="sdsGvListeParagraphe" runat="server" 
    	ConnectionString="<%$ ConnectionStrings:CS %>"
    	DeleteCommand="DELETE FROM SITE_PARA_Titre WHERE Id_Paragraphe = @Id_Paragraphe">
    </asp:SqlDataSource>
    <asp:GridView ID="gvListeParagraphe" runat="server" DataSourceID="sdsGvListeParagraphe" AutoGenerateColumns="false" AllowPaging="true" PageIndex="10" DataKeyNames="Id_Paragraphe">
    	<Columns>
    	<asp:BoundField DataField="Para_Titre" />
    	<asp:ButtonField ButtonType="Button" Text="Modifier" CommandName="ChargePara" />
    	<asp:CommandField ButtonType="Button" DeleteText="Supprimer" ShowDeleteButton="true" />
    	</Columns>
    </asp:GridView>
    Dans le CodeBehind j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    	sdsGvListeParagraphe.SelectCommand = "EXEC dbo.OW_PARA_ListeTitre '" & GetApplicationGUID().ToString & "'"
    End Sub
     
    Protected Sub gvListeParagraphe_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvListeParagraphe.RowCommand
    	Select Case e.CommandName
    		Case "ChargePara"
    			Dim vKey As DataKey = gvListeParagraphe.DataKeys(0)
    			txtTitre.Text = vKey.Value
    	End Select
    End Sub
    Ce que je ne comprends pas c'est pourquoi il me mets "1" dans le champ pour tous les boutons "Modifier" du GridView
    Où est ce que je me suis planté ?

    Merci pour votre aide.

Discussions similaires

  1. [Débutant] soucis avec suppression gridview
    Par doumbix dans le forum Windows Forms
    Réponses: 9
    Dernier message: 01/12/2012, 22h16
  2. [asp.net 2 - c# 2] Petit souci avec un gridview
    Par alexandre_69 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/07/2007, 21h54
  3. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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