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 :

[VB.Net] Probleme lors de la mise à jour d'un DataGrid


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut [VB.Net] Probleme lors de la mise à jour d'un DataGrid
    Bonjour à tous,

    J'utilise un datagrid pour afficher les données d'une table dont la clé primaire est composée de deux champs.
    Je remplis cette datagrid avec un dataset et un dataadapter par la méthode fill.

    Voilà la fonction qui s'en charge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Bind()
      req="select * from matable"
      da = new SqlDataAdapter(req,connexion)
      da.Fill(ds,"Table")
      datagrid.DataSource=ds.Tables("Table").DefaultView
      'datagrid.DataKeyField = ????  :?: 
      datatgrid.DataBind()
    End Sub
    Bon alors je ne sais pas comment dire au datagrid que la clé est composée de 2 champs (mettons qu'elle se nomme key1 et key2)

    Evidemment si je ne peux pas faire ça je ne peux pas non plus mettre à jour un enregistrement de ma table SqlServer ? (car je ne connais pas l'index de la ligne du datagrid à mettre à jour)

    J'espere que c'est assez clair....

    Merci mille fois pour vos suggestions

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Peut etre un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    datagrid.DataKeysArray.Add(taCle1);
    datagrid.DataKeysArray.Add(taCle2);

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par BiMouXeTTe
    Peut etre un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    datagrid.DataKeysArray.Add(taCle1);
    datagrid.DataKeysArray.Add(taCle2);
    désolé je ne connais pas "DataKeysArray" il ne semble pas que ce soit une proprité d'un datagrid.

    il y a bien DataKeys mais elle est en lecture seule

    ou alors j'ai mal compris ce que tu voulais dire...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    et si tu mets la clef sur la table du dataSet?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par dude666
    et si tu mets la clef sur la table du dataSet?
    quest ce que tu entends par mettre la clef sur la table du dataset ?
    desole je debute dans asp.net...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DataColumn QuestPrimaryKey		=	v_data.Tables["Question"].Columns["ID_QUEST"];
    				QuestPrimaryKey.AutoIncrement	=false;
    				QuestPrimaryKey.AllowDBNull		=	false;
    				QuestPrimaryKey.ReadOnly		=	true;
    				QuestPrimaryKey.Unique			=	true;
    				v_data.Tables["Question"].PrimaryKey	=	new DataColumn[] {QuestPrimaryKey};
    c'est ton dataset qui gere les données, et pas ta datagrid, donc si tu veux mettre une clef pour controler les modification des données, faits le sur le dataset, c'est lui qui stocke des données

    si tu veux metre une clef primaire juste pour recupere la ligne choisit par l'utiisateur sur ton datagrid, tu peux metre cette (ou ces clefs) dans un ou des champs caché

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    merci je vais essayer ca tout de suite

  8. #8
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Citation Envoyé par alf1905
    Citation Envoyé par BiMouXeTTe
    Peut etre un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    datagrid.DataKeysArray.Add(taCle1);
    datagrid.DataKeysArray.Add(taCle2);
    désolé je ne connais pas "DataKeysArray" il ne semble pas que ce soit une proprité d'un datagrid.

    il y a bien DataKeys mais elle est en lecture seule

    ou alors j'ai mal compris ce que tu voulais dire...
    La classe DataGrid hérite de la classe BaseDataList qui contient l'attribut DataKeyField entre autre ainsi que DataKeysArray et DataKeys. Malheureusement, ces deux derniers sont en lecture seule.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bon alors voila je t'explique ce que j'ai fait (ca marche pas encore mais bon) :

    Fonction qui charge le datagrid en question:
    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
     
    Private Sub dgMethode_Bind()
            'en simplifié
            req_sql="select codm, codmeth, libmeth, vh from volume_horaire"
            da_def = New SqlDataAdapter(req_sql, connexion)
            da_def.Fill(ds_def, "Volume")
     
            'je crée la clé primaire sur le dataset (syntaxe VB)
            Dim pk As DataColumn
            pk = New DataColumn
            pk.DataType = System.Type.GetType("System.Int16")
            pk.ColumnName = "ID"
            ds_def.Tables("Volume").Columns.Add(pk)
     
            'je la remplis (je sais c'est pas très beau)  :oops: 
            Dim i As Integer
            Dim dr As DataRow
            For Each dr In ds_def.Tables("Volume").Rows
                dr.Item(4) = i
                i = i + 1
            Next
     
            'je remplis mon datagrid
            dgMethode.DataSource = ds_def.Tables("Volume").DefaultView
            dgMethode.DataKeyField = "ID"
            dgMethode.DataBind()
        End Sub
    Au niveau du html, j'ai rajouté deux colonnes invisibles qui contiennent chacune un label, que j'ai remplis avec les valeurs de codm et codmeth (qui constituent ma clé primaire)

    Ensuite qd je veux reagir sur l'action suppression, j'utilise la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete from volume_horaire where codmeth = ?? and codm= ??
    Seulement je n'arrive pas à recuperer les valeurs des deux labels ?
    Dans mon événement supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public Sub DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs)
    End Sub
    e.Item.ItemIndex me donne bien le bon index correspondant à la clé que j'ai défini

    Mais comment recuperer la valeur des labels?

    (j'espère avoir bien compris ta méthode)

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    dans ta methode de suppression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(e.Item.FindControl("nomduLabel")!=null)
    				{
    					Label aLabel	=	(Label)e.Item.FindControl("nomduLabel");
    tu peux generaliser et recuperer toutes les colonnes de ton datagrid

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bon j'ai mis ca comme test : (vb .net)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Not e.Item.FindControl("codm") Is Nothing Then
        Response.Write("<br>   " & (CType(e.Item.FindControl("codm"),  Label)).Text)
    Else
        Response.Write("<br>   rien trouve")
    End If
    C'est vraiment pas logique car il affiche aucun des deux Response, il devrait au moins en afficher un des deux ! (puisque c'est un if)

    je comprend pas, pourtant tout s'affiche correctement (j'ai essayé d'afficher la clé que j'ai créé et j'ai bien les bonnes valeurs)

    je me suis pas trompré non plus dans le nom du controle..

    qu'est ce que ca peut être ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    tu as essayé de debugger pas à pas?

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    j'ai lancé pas à pas détaillé, mais ca ne fait rien
    en fait je l'ai jamais utilisé , qu'est ce que ca fait exactement ?
    j'ai deja utilise les points d'arret mais c'est tout
    je suis desole mais je debute vraiment !

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    ba en fait c'est tout à fait ca.

    tu mets un point d'arret à la ligne sur laquelle tu veux arreter l'execution, puis pour lancer tu fais f5

    apres au moment ou le code passe sur le point d'arret, l'execution s'arrete.
    la tu peux voir la valeur de chacune de tes variables.

    puis si tu faits f11, tu passes à la ligne de code suivante

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    merci j'ai fait ce que tu m'as dit
    j'ai mis un point d'arret sur mon if et un autre sur le premier response
    qu'est ce qu'il te faudrait comme valeur ?

    PS:merci d'etre aussi patient !

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 135
    Points : 167
    Points
    167
    Par défaut
    je sais pas, il passe dans quelle partie du if? il passe dans la partie qui se trouve juste aprés (la condition est vrai, donc il a trouvée le label, ou dans le else?)

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Il passe dans le if donc il arrive à trouver le controle seulement il n'affiche pas la valeur !

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé avec un autre controle et j'arrive à afficher la valeur mais pas avec les labels dans lesquels j'ai mis mes clés primaires !

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bon en fait ca fonctionne parfaitement !!
    J'avais fait une erreur stupide --> au lieu de mettre le ContainerDataItem dans la zone Text du label je l'avais mis entre les balises d'ouverture et fermeture <asp:Label></asp:Label>. Apparemment ça le pertubait.. c'est quand même bizarre.

    Donc merci beaucoup dude666 pour ton aide !!

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

Discussions similaires

  1. garder hitorique lors d'une mise a jour
    Par billainfo dans le forum SQL
    Réponses: 8
    Dernier message: 30/07/2007, 09h26
  2. prise en compte javascript lors d'une mise a jour
    Par maximus84 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/06/2007, 16h36
  3. Réponses: 2
    Dernier message: 20/04/2006, 17h53
  4. Probleme avec une requete mise a jour
    Par mael94420 dans le forum ASP
    Réponses: 2
    Dernier message: 08/03/2006, 20h56
  5. [VB.NET] Problème lors de lecture de cookie
    Par Redouane dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/01/2005, 11h31

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