none
Modifier le contenu d'une GridView ASP.NET/C# RRS feed

  • Discussion générale

  • Bonjour,

    Je souhaite créer une GridView éditable mais j'ai un problème lors de la modification d'une cellule. Voici une portion du code de la GridView :

    <asp:Label ID="lblMessage" runat="server" Text="_ _"></asp:Label>
    
    <asp:GridView ID="t_GridView_Tab1_Tasks" runat="server" 
                                 AutoGenerateColumns="true" DataKeyNames="task_id, task_name, task_done" 
                                 OnRowCancelingEdit=" m_GridView_Tab1_Tasks_RowCancelingEdit"
                                 OnRowDataBound="m_GridView_Tab1_Tasks_RowDataBound" 
                                 OnRowEditing="m_GridView_Tab1_Tasks_RowEditing" 
                                 OnRowUpdating="m_GridView_Tab1_Tasks_RowUpdating" ShowFooter="True" 
                                 OnRowCommand="m_GridView_Tab1_Tasks_RowCommand" 
                                 OnRowDeleting="m_GridView_Tab1_Tasks_RowDeleting"
                                 AutoGenerateEditButton="true"
                                 AutoGenerateDeleteButton="true">
                                    <Columns>
                                        <asp:TemplateField HeaderText="Name" HeaderStyle-HorizontalAlign="Left"> 
                                            <EditItemTemplate> 
                                            <asp:TextBox ID="name" runat="server" Text='<%# Bind("task_name") %>'></asp:TextBox> 
                                            </EditItemTemplate> 
                                            <ItemTemplate> 
                                            <asp:Label ID="name" runat="server" Text='<%# Bind("task_name") %>'></asp:Label> 
                                            </ItemTemplate>
                                        </asp:TemplateField>                                    
                                    </Columns>
                                </asp:GridView>


    Et le code C# de la méthode Update :

        protected void m_GridView_Tab1_Tasks_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            TextBox v_txtName = (TextBox)t_GridView_Tab1_Tasks.Rows[e.RowIndex].FindControl("name");
            lblMessage.Text = v_txtName.Text;
    
            //
            //
            // Mise à jour de v_txtName dans la base de donnée
            //
            //
        }

    Le problème est que 

    lblMessage.Text = v_txtName.Text;

    affiche l'ancienne valeur du nom (celle qui est sur la base de donnée), même si la TextBox est modifiée. Je n'arrive donc pas à récupérer la nouvelle valeur de la TextBox pour modifier la base de donnée.

    J'espère que vous pourrez m'aider.

    mercredi 1 juillet 2015 15:07

Toutes les réponses

  • Bonjour,

    A priori vous n'utilisez pas le bon évènement et confondez le OnRowUpdating avec le OnRowUpdated. Le 1er a lieu avant que la GridView modifie les données et le seconde après.

    Vous trouverez plus d'informations ici : OnRowUpdated

    En espérant vous avoir aidé,

    Bien cordialement,

    Fabrice JEAN-FRANCOIS

    mercredi 1 juillet 2015 21:47
  • Merci pour votre réponse Fabrice !

    Je ne connaissais pas OnRowUpdated, il est peut-être plus adapté.

    J'ai donc ajouté celle ligne en option  de la gridView

    OnRowUpdated="m_GridView_Tab1_Tasks_RowUpdated"

    et j'ai créé la méthode correspondante où je ne fais qu'un affichage pour le moment:

        protected void m_GridView_Tab1_Tasks_RowUpdated(object sender, GridViewUpdatedEventArgs e)
        {
            lblMessage.Text += " Updated ";
        }

    Cette méthode n'est pas appelée lorque je clique sur "Update". Ai-je oublié un détail ?

    Merci de votre aide.


    jeudi 2 juillet 2015 12:14