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 :

Modifier les données d'un GridView [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 33
    Points : 24
    Points
    24
    Par défaut Modifier les données d'un GridView
    Bonjour,
    Je voudrais modifier directement des données (deux colonne cases à cocher) dans un GridView, mais celui-ci s'affiche uniquement en visualisation, il n'est pas possible de cliquer sur les cases à cocher.
    J'utilise Visual Studio 2008.
    Je crée le GridView en mode design, dans la source, cela me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <asp:GridView ID="ListInter" runat="server" AllowPaging="True" PageSize="8">
                                <AlternatingRowStyle BackColor="#CCCCCC" />
      </asp:GridView>
    Sur page Load, je définie un datatable pour stocker les différents critères...

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                DtResult = New System.Data.DataTable
                'Ajoute les critères à la liste
                DtResult.Columns.Add("N°", Type.GetType("System.String"))
                DtResult.Columns.Add("Gardien", Type.GetType("System.String"))
                DtResult.Columns.Add("Locataire", Type.GetType("System.String"))
                DtResult.Columns.Add("Motif", Type.GetType("System.String"))
                DtResult.Columns.Add("Date", Type.GetType("System.String"))
                DtResult.Columns.Add("Facturer", Type.GetType("System.Boolean"))
                DtResult.Columns.Add("Visa", Type.GetType("System.Boolean"))
     
                'Lien datatable grille: pour afficher le contenu de cette table
                Me.ListInter.DataSource = DtResult
                Me.ListInter.DataBind()

    Je rempli mon datatable en vb via un select en SQL et j'actualise le GridView avec la fonction DataBind:

    Code VB.NET : 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
            Dim cmdVInter = New OleDbCommand(StrSQL, cnt)
            Dim DrVinter As OleDbDataReader
     
            Dim NouvRow As Data.DataRow = DtResult.NewRow
     
            DrVinter = cmdVInter.ExecuteReader
            DtResult.Clear()
            While DrVinter.Read
                NouvRow("N°") = Nz(DrVinter("N°"))
                NouvRow("Gardien") = Nz(DrVinter("LibUser"))
                NouvRow("Locataire") = Nz(DrVinter("NomLoc"))
                NouvRow("Date") = Nz(DrVinter("DateInter"))
                NouvRow("Motif") = Nz(DrVinter("LibMotif"))
                NouvRow("Facturer") = Nz(DrVinter("Facturer"))
                NouvRow("Visa") = Nz(DrVinter("VisaChef"))
     
                DtResult.Rows.Add(NouvRow)
                NouvRow = DtResult.NewRow
            End While
     
            'Lien datatable grille
            Me.ListInter.DataSource = DtResult
            Me.ListInter.DataBind()

    Je souhaiterai pouvoir modifier les 2 dernières colonnes qui sont des cases à cocher, mais à l'exécution, elles ne me sont pas accessibles.

    J'ai cherché sur le net, mais rien trouvé qui puisse me faire avancer.

    Merci de votre aide.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    Test 2 colonnes "case à cocher" sont bien "Facturer" et "Visa" ?
    Comme tu les as définies, il me semble que c'est du pure affichage (le gridview affiche le boolean retournée par ton SQL), il faut que tu définisses autrement tes 2 colonnes.

    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
    <asp:GridView ID="ListInter" runat="server" AllowPaging="True" PageSize="8">
       <asp:BoundField HeaderText="N°" DataField="Remettant"   />
       <asp:BoundField HeaderText="Gardien" DataField="Remettant"   />
       <asp:BoundField HeaderText="Locataire" DataField="Remettant"  />
       <asp:BoundField HeaderText="Motif" DataField="Remettant"  />
       <asp:BoundField HeaderText="Date" DataField="Remettant"  />
     
       <asp:TemplateField>
          <HeaderTemplate>Labla</HeaderTemplate>
          <ItemTemplate>
             <asp:CheckBox runat="server" id="ckbFacturer" />
          </ItemTemplate>
       </asp:TemplateField>
     
       <asp:TemplateField>
          <HeaderTemplate>Labla</HeaderTemplate>
          <ItemTemplate>
             <asp:CheckBox runat="server" id="ckbFacturer" />
          </ItemTemplate>
       </asp:TemplateField>
    </asp:GridView>

    Il faudra que tu remplaces "DataField" pour chaque colonne pour le nom de la colonne retournée par ton SQL.

    Normalement, comme ça tu as des cases à cocher que tu peux cocher.
    A toi d'ajouter le comportement.


    Seb

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réponse, j'ai réussi à ajouter une colonne de cases à cocher dans le GridView.
    (Oui, mes cases à cocher sont bien Facturer et Visa).

    Pour faire plus simple, j'ai conservé que 2 champs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                            <asp:GridView ID="ListInter" runat="server" AllowPaging="True" PageSize="8" AutoGenerateColumns="False">
                                <Columns>
                                    <asp:BoundField DataField="N°" HeaderText="Num"/>
                                    <asp:TemplateField>
                                      <HeaderTemplate>Facturer</HeaderTemplate>
                                      <ItemTemplate>
                                         <asp:CheckBox runat="server" id="CkbFacturer" />
                                      </ItemTemplate>
                                        <ItemStyle HorizontalAlign="Center" />
                                   </asp:TemplateField>
                                </Columns>
                                <AlternatingRowStyle BackColor="#CCCCCC" />
                            </asp:GridView>
    Par contre, peux-tu me dire comment faire pour que les valeurs affichées des cases à cocher soient celles renvoyées par ma requête SQL ?

    Je crois que je vais avoir aussi des soucis pour déterminer quel enregistrement est modifié lors du clique sur une case à cocher et comment appeler une procédure lors du clique...

    Enfin si tu peux m'aider ou si tu as un exemple c'est sympa.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Points : 241
    Points
    241
    Par défaut
    Pour cocher ou pas tes checkBox, essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Checked="<%# Eval("Visa") %>"
    Après pour réaliser une action sur le changement d'état de tes cases à chose, pour moi cela dépend si tu souhaites gérer ça de façon unitaire ou en groupe.

    En groupe, le plus simple serait de jouer avec JS, un HiddenField avec la liste des lignes changées (l'ID de ta ligne en base par ex) et un bouton pour le postBack de la page.
    Unitairement, as-tu essayer t'implémenter l'évènement "OnClick" du checkBox ?



    Seb

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    J'ai ramené les valeurs avec le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                            <asp:GridView ID="ListInter" runat="server" AllowPaging="True" PageSize="8" AutoGenerateColumns="False">
                                <Columns>
                                    <asp:BoundField DataField="N°" HeaderText="Num"/>
                                    <asp:TemplateField>
                                      <HeaderTemplate>Facturer</HeaderTemplate>
                                      <ItemTemplate>
                                         <asp:CheckBox runat="server" id="CkbFacturer" Checked='<%# Eval("Facturer") %>' OnCheckedChanged="Facturer" AutoPostBack="true"/>
                                      </ItemTemplate>
                                        <ItemStyle HorizontalAlign="Center" />
                                   </asp:TemplateField>
                                </Columns>
                                <AlternatingRowStyle BackColor="#CCCCCC" />
                            </asp:GridView>

    L'événement OnCheckedChanged est écrit sur la feuille aspx dont voici le début (juste pour pouvoir tester que le code fonctionne):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="ValidationInter.aspx.vb" Inherits="Default2" title="Page sans titre" %>
     
    <script  runat="server">
        Sub Facturer()
            Me.TxtInfo.Visible = True
        End Sub
    </script>
     
     
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    Et cela fonctionne.
    Les valeurs sont bien ramenées même avec la pagination et lors du click sur une case à cocher, le texte s'affiche.
    Il me reste plus qu'à déterminer le n° de la ligne pour pouvoir ensuite faire des update dans la base.

    Je suis issu du vb (client lourd), alors c'est pas évident pour moi tout se qui se trouve sur la page aspx et encore moins javascript...

    Un grand merci à toi Seb.

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    C'est bien ce qui me semblait, je n'arrive pas à retourner le n° de la ligne dont la case a été coché (je veux gérer cela de façon unitaire, c'est plus clair et simple pour moi).
    J'ai mis la procédure Facturer sur la page .vb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Public Sub Facturer()
     
            Me.TxtInfo.Text = "Je voudrais mettre le numéro de la ligne modifiée ici"
            Me.TxtInfo.Visible = True
     
        End Sub
    Tu aurais une idée ?

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Points : 241
    Points
    241
    Par défaut
    Sur ton contrôle "CheckBox" ajoute une balise à toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IdBase='<%# Eval("Num") %>'
    Après dans ta méthode "Facturer", tu devrais pouvoir retrouver dans "Attributes"


    Seb

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Désolé de t'embêter, mais j'y arrive pas trop...
    J'ai mis ce code dans la page aspx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                          <asp:GridView ID="ListInter" runat="server" AllowPaging="True" PageSize="8" AutoGenerateColumns="False">
                                <Columns>
                                    <asp:BoundField DataField="N°" HeaderText="Num"/>
                                    <asp:TemplateField>
                                      <HeaderTemplate>Facturer</HeaderTemplate>
                                      <ItemTemplate>
                                         <asp:CheckBox runat="server" id="CkbFacturer" Checked='<%# Eval("Facturer") %>' OnCheckedChanged="Facturer" AutoPostBack="true" IdBase='<%# Eval("N°") %>' />
                                      </ItemTemplate>
                                        <ItemStyle HorizontalAlign="Center" />
                                   </asp:TemplateField>
                                </Columns>
                                <AlternatingRowStyle BackColor="#CCCCCC" />
                            </asp:GridView>
    Car la colonne qui m'intéresse et la colonne appelée N° (si je met Eval("Num"), ca plante car il ne connaît pas Num: "DataBinding*: 'System.Data.DataRowView' ne comporte pas de propriété appelée 'Num'.").

    Voici la procédure Facturer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Public Sub Facturer()
     
            Me.TxtInfo.Text = "Ligne: " & Me.ListInter.Attributes("IdBase")
            Me.TxtInfo.Visible = True
     
        End Sub
    Lors du clqiue sur une case à cocher, la procédure se fait bien, mais cela m'affiche juste:
    Ligne :
    rien d'autre.

    Si je met :
    Me.TxtInfo.Text = "Ligne: " & Me.ListInter.Attributes("IdBase").ToString

    J'ai une erreur:
    "La référence d'objet n'est pas définie à une instance d'un objet."

    Encore merci de ton aide.
    Et de ta patience.

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    Si ton tableau s'affiche correctement regarde le code HTML de tes cases à cocher (IE, Firefox et Chrome ont des outils intégrés ou extensions pour ça : Firebug pour Firefox, le F12 pour IE et Chrome).
    Après essaye de changer le nom de ta colonne "N°", Eval le gère peut-être mal.


    Seb

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    J'ai changé le nom de ma colonne en "Num".
    Mais je n'ai toujours rein dans l'attribut("idbase")

    Voici le code HTLM pour une ligne de mon tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <td>3772</td><td align="center">
                                         <span IdBase="3772"><input id="ctl00_PlaceContenu_ListInter_ctl04_CkbFacturer" type="checkbox" name="ctl00$PlaceContenu$ListInter$ctl04$CkbFacturer" checked="checked" onclick="javascript:setTimeout('__doPostBack(\'ctl00$PlaceContenu$ListInter$ctl04$CkbFacturer\',\'\')', 0)" /></span>
                                      </td>
    IdBase est bien déclaré.

    Est-ce lié à ma procédure CocheFacturer qui est mise sur la page vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub CocheFacturer()
            Me.TxtInfo.Text = "Ligne: " & Me.ListInter.Attributes("IdBase")
            Me.TxtInfo.Visible = True
        End Sub
    C'est elle qui est appelé sur l'événement OnCheckedChanged
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:CheckBox runat="server" id="CkbFacturer" Checked='<%# Eval("Facturer") %>' OnCheckedChanged="CocheFacturer" AutoPostBack="true" IdBase='<%# Eval("Num") %>' />
    CocheFacturer s'exécute bien lorsque je coche une case mais je ne récupère pas l'attribut IdBase.

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Points : 241
    Points
    241
    Par défaut
    Pourquoi cherches-tu l'attribut "IdBase" sur ton GridView ?
    L'attribut est sur ton checkbox appelant.

    En C#, on obtient ce genre de méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected void CkbFacturer_CheckedChanged(object sender, EventArgs e) { }
    Il est donc facile de regarder le paramètre "sender" pour y récupérer ce que l'on veut, regarde en VB.Net ce qui est possible.


    Seb

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Nickel, j'arrive a obtenir la valeur de la colonne Num lorsque je clique sur une case.

    Au cas où ça serve à d'autres:

    Voici le code de la page .aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                           <asp:GridView ID="ListInter" runat="server" AllowPaging="True" PageSize="8" AutoGenerateColumns="False">
                                <Columns>
                                    <asp:BoundField DataField="Num" HeaderText="Num"/>
                                    <asp:TemplateField>
                                      <HeaderTemplate>Facturer</HeaderTemplate>
                                      <ItemTemplate>
                                         <asp:CheckBox runat="server" id="CkbFacturer" Checked='<%# Eval("Facturer") %>' OnCheckedChanged="CkbFacturer_CheckedChanged" AutoPostBack="true" IdBase='<%# Eval("Num") %>' />
                                      </ItemTemplate>
                                        <ItemStyle HorizontalAlign="Center" />
                                   </asp:TemplateField>
                                </Columns>
                                <AlternatingRowStyle BackColor="#CCCCCC" />
    Et sur la page .vb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Protected Sub CkbFacturer_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
             MsgBox(sender.attributes("IdBase"))
        End Sub
    Il a fallu que je tape entièrement cette ligne, elle ne figurait pas dans les listes (Pages événements)...


    En tous cas, un grand merci à toi Seb, t'es trop fort.

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

Discussions similaires

  1. [Débutant] modifier les données d'une gridview à travers une FormView
    Par Alexandre le Grand dans le forum Entity Framework
    Réponses: 0
    Dernier message: 04/03/2014, 11h06
  2. modifier les données d'une gridview
    Par SALIA LOUA OLIVIER dans le forum Débuter
    Réponses: 3
    Dernier message: 20/10/2009, 07h55
  3. comment modifier les données d'une table à travers un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 12
    Dernier message: 19/07/2005, 09h51
  4. MySQL Administrator : modifier les données d'une table
    Par Robinounou dans le forum Outils
    Réponses: 4
    Dernier message: 13/07/2005, 17h21
  5. [Crystal Reports 10] Modifier les données d'un état
    Par jidea dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/08/2004, 18h16

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