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 :

[GridView]Récupération nouvelles valeurs lors de l'édition d'une ligne d'un GridView


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut [GridView]Récupération nouvelles valeurs lors de l'édition d'une ligne d'un GridView
    Bonjour !
    Voici quelques jours que je tâtonne pour trouver une solution à mon problème.
    Concrètement, j'ai un Gridview dont le DataSource est un DataSet. J'ai mis en place un bouton "Modifier" pour pouvoir changer les champs d'une ligne.
    Lors de cette édition de ligne, j'ai mis des TextBox et 2 DropDownList avec en SelectedValue la valeur de la cellule.

    Mon problème est simple, quand je clique sur "Mettre à jour" après avoir modifié les valeurs des cellules, je rentre dans la méthode OnRowUpdating="GridClient_Updating" ; Ici j'essaye de récupérer les valeurs modifiées pour mettre à jour ma base de données. Mais je ne récupère que les anciennes valeurs (ce serait trop facile sinon).

    Voici donc du code :
    Page ASP.net, le GridView :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    <asp:GridView runat="server" ID="GridClients" SkinID="CustomGridSansPage" Width="1100px"
                        DataKeyNames="Identifiant" PageSize="15" AllowSorting="True" AutoGenerateColumns="False"
                        OnSorting="GridClients_Sorting" OnRowUpdating="GridClient_Updating" OnRowEditing="GridClient_RowEditing"
                        OnRowCancelingEdit="GridClient_RowCancelingEditing">
                        <Columns>
                            <asp:TemplateField HeaderText="Identifiant" SortExpression="Identifiant">
                                <ItemTemplate>
                                    <asp:HyperLink ID="lienIdentifiant" NavigateUrl='<%#"~/Formulaires/DetailsClient.aspx?idClient=" + Eval("Identifiant")%>'
                                        runat="server" Text='<%#Eval("Identifiant")%>' />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="SIREN" SortExpression="SIREN">
                                <ItemTemplate>
                                    <asp:Label ID="lblSiren" runat="server" Text='<%#Eval("SIREN")%>' /></ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Libellé" SortExpression="Libellé">
                                <ItemTemplate>
                                    <asp:Label ID="lblLibelle" runat="server" Text='<%#Eval("Libellé")%>' /></ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Segment Risque" SortExpression="Segment Risque">
                                <ItemTemplate>
                                    <asp:Label ID="lblSegmentRisque" runat="server" Text='<%#Eval("Segment Risque")%>' /></ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Exclusion" SortExpression="Exclusion">
                                <ItemTemplate>
                                    <asp:CheckBox ID="checkboxExclusion" Checked='<%#Eval("Exclusion")%>' runat="server"
                                        Enabled="false" />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:CheckBox ID="checkboxExclusionEdition" Checked='<%#Eval("Exclusion")%>' runat="server" />
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Motif Exclusion" SortExpression="Motif Exclusion">
                                <ItemTemplate>
                                    <asp:Label ID="labelMotif" runat="server" Text='<%#Eval("Motif Exclusion")%>' />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:DropDownList ID="DropDownListMotifEdition" runat="server" SelectedValue='<%#Eval("Motif Exclusion")%>'>
                                        <asp:ListItem Text="" Value="" />
                                        <asp:ListItem Text="Moteur de Renotation" Value="Moteur de Renotation" />
                                        <asp:ListItem Text="Douteux" Value="DOUTEUX" />
                                        <asp:ListItem Text="Pas d'encours vivant" Value="Pas d'encours vivant" />
                                        <asp:ListItem Text="Changement de Moteur" Value="Changement de Moteur" />
                                        <asp:ListItem Text="Autres" Value="Autres" />
                                    </asp:DropDownList>
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Moteur Renotation" SortExpression="Moteur Renotation">
                                <ItemTemplate>
                                    <asp:Label ID="labelMoteur" runat="server" Text='<%#Eval("Moteur Renotation")%>' />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:DropDownList ID="DropDownListMoteurEdition" runat="server" DataSourceID="SqlDataSourceMoteur"
                                        DataTextField="NOM_MOTR_RNOTT" DataValueField="NOM_MOTR_RNOTT" AppendDataBoundItems="true"
                                        SelectedValue='<%#Eval("Moteur Renotation")%>'>
                                        <asp:ListItem Text="" Value="" />
                                    </asp:DropDownList>
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Portefeuille" SortExpression="Portefeuille">
                                <ItemTemplate>
                                    <asp:Label ID="labelPortefeuille" runat="server" Text='<%#Eval("Portefeuille")%>' />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:TextBox ID="PortefeuilleEdition" runat="server" Text='<%#Eval("Portefeuille")%>' />
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Réception Justificatifs" SortExpression="Réception Justificatifs">
                                <ItemTemplate>
                                    <asp:CheckBox ID="checkboxReception" Checked='<%#Eval("Réception Justificatifs")%>'
                                        runat="server" Enabled="false" />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:CheckBox ID="checkboxReceptionEdition" Checked='<%#Eval("Réception Justificatifs")%>'
                                        runat="server" />
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Date Reception" SortExpression="Date Réception">
                                <ItemTemplate>
                                    <asp:Label ID="labelDateReception" runat="server" Text='<%#Eval("Date Réception")%>' />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:TextBox ID="DateReceptionEdition" runat="server" Text='<%#Eval("Date Réception")%>' />
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:CommandField ShowEditButton="True" />
                        </Columns>
                    </asp:GridView>

    Et le code behind :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    namespace CampagneRenotation.Web.Formulaires
    {
        public partial class ListeClients : System.Web.UI.Page
        {
            private Manager monManager = new Manager();
            private DataSet monDataSet = new DataSet();
     
            protected void Page_Load(object sender, EventArgs e)
            {
                try
                {
                    if (!monManager.IsCampagneVide())
                    {
                        if (!IsPostBack)
                            RemplissageGridClients();
                    }
                }
                catch (CustomException)
                {
                    Response.Redirect(string.Format("~/PageErreur.aspx?erreur={0}", "Echec de la connexion à la base de données"));
                }
            }
     
            protected void btnTrier_Click(object sender, EventArgs e)
            {
                RemplissageGridClients();
            }
     
            private void RemplissageGridClients()
            {
                string idFiliere = DropDownListFiliere.SelectedValue;
                string idMoteur = DropDownListMoteur.SelectedValue;
                string role = DropDownListRole.SelectedValue;
                string siren = txtSIREN.Text;
                string exclusion = DropDownListExclusion.SelectedValue;
                string reception = DropDownListReception.SelectedValue;
                monDataSet = monManager.GetDataSetRequeteListClient(idFiliere, idMoteur, role, siren, exclusion, reception);
                GridClients.DataSource = monDataSet;
                GridClients.DataBind();
            }
     
            protected void GridClient_Updating(Object sender, GridViewUpdateEventArgs e)
            {
                GridViewRow row = GridClients.Rows[e.RowIndex];
     
                string identifiant = ((HyperLink)row.FindControl("lienIdentifiant")).Text;
                string exclusion = ((CheckBox)row.FindControl("checkboxExclusionEdition")).Checked.ToString();
                DropDownList ddlMotif = (DropDownList)row.Cells[5].FindControl("DropDownListMotifEdition");
                DropDownList ddlMoteur = (DropDownList)row.Cells[6].FindControl("DropDownListMoteurEdition");
                string motifExclusion = ddlMotif.SelectedItem.Value;
                string moteurRenotation = ddlMoteur.SelectedItem.Value;
                string portefeuille = ((TextBox)row.FindControl("PortefeuilleEdition")).Text;
                string reception = ((CheckBox)row.FindControl("checkboxReceptionEdition")).Checked.ToString();
                string dateReception = ((TextBox)row.FindControl("DateReceptionEdition")).Text;
     
                GridClients.EditIndex = -1;
                GridClients.DataBind();
     
                try
                {
                    Alert.Show(monManager.MiseAJourClient(identifiant, portefeuille, moteurRenotation, exclusion, motifExclusion, reception, dateReception).ToString());
                }
                catch (CustomException ce)
                {
                    Alert.Show(ce.Message);
                }
            }
     
            public void GridClient_RowEditing(Object sender, GridViewEditEventArgs e)
            {
                GridClients.EditIndex = e.NewEditIndex;
                GridClients.DataBind();
            }
            public void GridClient_RowCancelingEditing(Object sender, GridViewCancelEditEventArgs e)
            {
                GridClients.EditIndex = -1;
                GridClients.DataBind();
            }
            protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                GridClients.PageIndex = e.NewPageIndex;
                GridClients.DataBind();
            }
     
     
     
     
            private const string ASCENDING = " ASC";
            private const string DESCENDING = " DESC";
            protected void GridClients_Sorting(object sender, GridViewSortEventArgs e)
            {
                string sortExpression = e.SortExpression;
     
                if (GridViewSortDirection == SortDirection.Ascending)
                {
                    GridViewSortDirection = SortDirection.Descending;
                    SortGridView(sortExpression, DESCENDING);
                }
                else
                {
                    GridViewSortDirection = SortDirection.Ascending;
                    SortGridView(sortExpression, ASCENDING);
                }
            }
            public SortDirection GridViewSortDirection
            {
                get
                {
                    if (ViewState["sortDirection"] == null)
                        ViewState["sortDirection"] = SortDirection.Ascending;
     
                    return (SortDirection)ViewState["sortDirection"];
                }
                set { ViewState["sortDirection"] = value; }
            }
     
            private void SortGridView(string sortExpression, string direction)
            {
                DataTable dt = monDataSet.Tables[0];
     
                DataView dv = new DataView(dt);
                dv.Sort = sortExpression + direction;
     
                GridClients.DataSource = dv;
                GridClients.DataBind();
            }
        }
    }
    Merci de votre aide, je commence à péter une durite ^^'

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Surement parce que tu rebindes ton grid view dans le page load

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Voici mon code Page_Load

    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
    protected void Page_Load(object sender, EventArgs e)
            {
                try
                {
                    if (!monManager.IsCampagneVide())
                    {
                        if (!IsPostBack)
                            RemplissageGridClients();
                    }
                }
                catch (CustomException)
                {
                    Response.Redirect(string.Format("~/PageErreur.aspx?erreur={0}", "Echec de la connexion à la base de données"));
                }
            }
    J'ai ajouté le !IsPostBack en condition, maintenant mon GridView disparait quand je clique sur la case "Modifier" d'une ligne.

    Pourtant j'ai bien ajouté CausesValidation="false" sur le <asp:CommandField ShowEditButton="True" CausesValidation="false"/>

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par Morbacks Voir le message
    J'ai ajouté le !IsPostBack en condition, maintenant mon GridView disparait quand je clique sur la case "Modifier" d'une ligne.
    Tu dois rebinder au click sur le bouton Modifier

    Citation Envoyé par Morbacks Voir le message
    Pourtant j'ai bien ajouté CausesValidation="false" sur le <asp:CommandField ShowEditButton="True" CausesValidation="false"/>
    Je vois pas bien le rapport là

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Je viens de changer le champ Edit en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:LinkButton ID="EditButton" runat="server" CommandName="Edit" Text="Modifier"
                                        OnClick="EditButton_Click" />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:LinkButton ID="RefreshButton" runat="server" CommandName="Update" Text="Mettre à jour" /><asp:LinkButton
                                        ID="CancelButton" runat="server" CommandName="Cancel" Text="Annuler" /></EditItemTemplate>
                            </asp:TemplateField>
    le code correspondant au clique sur le bouton Edit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void EditButton_Click(object sender, EventArgs e)
            {
                GridClients.DataBind();
            }
    Cela ne change rien à la disparition du GridView .

    Par contre ce que je ne comprend pas, c'est pourquoi avoir besoin de databind lors de ce clique, alors que l'évènement "GridClient_RowEditing" est appelé et qu'il possède lui aussi un DataBind (testé en point d'arret, mais le grid disparait toujours).

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Tu dois reseter la datasource je pense

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    J'ai partiellement résolu le problème grâce à toi, j'ai remplacé le GridClients.DataBind par RemplissageGridClients, et le Gridview ne disparait plus.
    Le problème est qu'on ne doit pas changer les dropdownlist qui gèrent les critéres de choix clients pendant l'édition d'une ligne.

    N'existe-t-il pas un moyen moins couteux en ressource, qui serait de stocker provisoirement le DataSet du GridView et de le relier au grid sans reset ce DataSet ?? Car pour le moment, quand je veux éditer une ligne, je recharge 3 fois au total le DataSource, et ça alourdit pas mal le temps de réponse de la page.

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Tu peux faire ce que tu veux, à toi de trouver la meilleure solution pour ton cas

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/10/2010, 17h51
  2. Réponses: 0
    Dernier message: 22/06/2010, 15h15
  3. [XL-2003] ma fonction retourne #VALEUR! lors de la suppression d'une ligne
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/12/2009, 18h17
  4. Réponses: 0
    Dernier message: 17/12/2009, 19h42
  5. Réponses: 1
    Dernier message: 12/02/2009, 15h22

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