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 :

[C#] DataGrid : Update d'une ligne


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut [C#] DataGrid : Update d'une ligne
    Bonjour !

    Je suis en train de réaliser un Datagrid me permettant d'ajouter, supprimer, modifier des enregistrement dynamiquement.

    J'ai donc créé deux templates colonne ( une pour la suppression et une pour la modification ) auquelles j'ai ajouté deux colonnes "normales" dans lesquelles je met mes enregistrements.

    Lorsque l'utilisateur clique sur le bouton d'édition d'une ligne,les colonnes de l'enregistrement se transforme en TExtBox : on peut ainsi éditer le texte.
    QUand il valide, j'essaie de récupérer ce qu'il a modifié en lisant le contenu de cette textbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private void DataGrid_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    	string Name = ((TextBox)(e.Item.Cells[2].Controls[0])).Text;
    	string Num   = ((TextBox)(e.Item.Cells[3].Controls[0])).Text;
     
            DataGrid.EditItemIndex = -1;
    	DataGrid.DataBind();
    }
    Mais voilà c'est la le probleme !
    Lorsque je veux récupérer informations dans Name et Num j'obtient les valeurs initiales et non celles qui ont été modifiée par l'utilisateur !

    Est ce que quelqu'un a déja eu ce problème ? Comment faire svp ?

    Merci d'avance.

  2. #2
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    tu ne databind pas dans ton page_load par hasard?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    si c'est ce que je fais.

    Dans mon Page Load j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataGrid.DataSource = CreateDataSource();
    DataGrid.DataBind();
    je n'ai pas mi de !Page.IsPostBack car sinon, lorsque j'envoi la commande 'edit' il ne me réaffiche pas mon DataGrid avec les champs de modification.
    Mais maintenant je comprends d'ou vient le probleme, il me réafiche mon datagrid c'est pourquoi je récupere les anciennes valeurs...

    Je dois donc utiliser un !Page.IsPostBack mais comment faire pour que mon datagrid se réafiche lorsque j'appel mes autres commande (delete, edit) ?

  4. #4
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    ben jpense que tu dois mettre un test if not ispostback
    il en updatant ta ligne il rebind avec les données d'origine et il écrase ton update
    enfin c'est ce que je pense.

  5. #5
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    datagrid.visible = true dans chaque page_load
    et puis tu databind a chaque edit/delete donc il suffit juste de l'afficher

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Cela ne fonctionne pas :s

    J'ai aussi un bouton "ajouter" dans le footer qui est incorporé au datagrid et mis en forme a travers l'évenement 'itemdatabound'.

    Si je met le '!PageisPostBack' alors la commande 'insert' n'est plus interprétée

  7. #7
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    voila du code
    cette sub est appelée dans l'html via "onItemcommand"

    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
     
        Public Sub EventOnDatagrid1(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
            Dim dt As New DataTable
            Dim dv As DataView
            Dim dr As DataRow
     
            ' e.Item is the row of the table where the command fired
            ' For bound columns the value is stored in the Text property of TableCell
            'ID de la citation
            Dim newsOnTable As TableCell
            Dim idNews2delete As Integer
     
            Select Case (e.CommandSource.CommandName)
                Case "RemoveItem"
                    'extraction des valeurs du datagrid requises pr la suppression d'items
                    newsOnTable = e.Item.Cells(0)
                    idNews2delete = newsOnTable.Text
                    newManagement.txtbxDeleteNews = idNews2delete
                    If (newManagement.deleteNewsFromDb) Then
                        bindGrid1()
                    Else
                        Response.Write("Erreur de suppression")
                    End If
                Case "Cancel"
                    DataGrid1.EditItemIndex = -1
                    bindGrid1()
                Case "Edit"
                    DataGrid1.EditItemIndex = e.Item.ItemIndex
                    bindGrid1()
                Case "Update"
                    Dim newNews As TextBox = e.Item.Cells(1).Controls(0)
                    With newManagement
                        .txtbxChooseNews2Edit = e.Item.Cells(0).Text
                        .txtbxNews2Edit = newNews.Text
                        If (.editNews) Then
                            DataGrid1.EditItemIndex = -1
                            bindGrid1()
                        Else
                            Response.Write("Erreur")
                        End If
                    End With
            End Select
        End Sub
    ca c'est la sub pour databinder mon datagrid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Private Sub bindGrid1()
            With DataGrid1
                Try
                    .DataSource = newManagement.getNews4Admin(0)
                    .DataBind()
                Catch ex As Exception
                    Response.Write(.CurrentPageIndex)
                    Response.Write(ex.ToString)
                End Try
            End With
        End Sub
    et dans ma page_load j'appelle ma methode "bindgrid1" que si ce n'est pas un postback...

    bien à toi

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup pour ton exemple cela m'a permis de trouver mon erreur : en fait je ne faisait que binder le datagrid, sans rajouter les donner (pas de createdatesource). Je pensais qu'il utilisait le ViewState.

    Mais j'ai encore un probleme !
    Cela concerne l'ajout de données au datagrid. Dans mon footer, j'ai deux champs ainsi qu'un BoutonLink qui me permettent d'ajouter des infos. J'ai donné le commandname 'Insert' au bouton.

    Le problème c'est que lorsque je clique sur ce bouton, l'évenement : ItemCommand n'est pas appelé !!

    Comment cela se fait ?

  9. #9
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    ben tu dois déclarer dans le html

    dans la déclaration du datagrid tu as "onitemcommand"
    et dans chaque bouton ou linkbouton du datagrid il faudra préciser "commandname" et dans le code behind tu mets des case pr déclencher une action

    cordialement

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    C'est ce que j'ai fait, mais ce que je te dis c'est que depuis que j'ai rajouté le !ispostback, l'évenement ItemCommand n'est pas appelé ...

  11. #11
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    le !ispostback n'influe en rien le onitemcommand je pense
    fais voir un peu ton code html et ton code behind

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Bon j'ai trouvé mon problème.

    En fait j'avais désactivé le ViewState, c'est cela qui a fait tout planter. Je ne pensais pas que les évenements du datagrid pouvais travailler avec. Je trouve que ce n'est pas bien implémenté : pour moi ca ne pause pas probleme mais si je travaillais avec bcp de données ca aurait pu en etre un.

    En tout cas je tiens a te remercier très sincerement pour ton aide !

  13. #13
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    de rien j'ai tellement recu ici que donner un peu ca fait plaisir

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

Discussions similaires

  1. update d'une ligne entiere comme avec insert
    Par luke-skywalker dans le forum Langage
    Réponses: 8
    Dernier message: 05/02/2009, 18h01
  2. Datagrid - Positionnement d'une ligne
    Par Titusse dans le forum ASP.NET
    Réponses: 5
    Dernier message: 12/02/2008, 13h53
  3. UPDATE toute une ligne d'une table
    Par sbitsch dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 03/08/2007, 16h37
  4. [8i] Update sur une ligne invalide
    Par Apsolu dans le forum Oracle
    Réponses: 3
    Dernier message: 09/01/2006, 21h06
  5. Réponses: 3
    Dernier message: 29/08/2005, 16h44

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