Bonjour à tous,
J'ai un problème assez basique qui commence légèrement à me rendre fou
Sur ma page aspx, j'ai construit un gridview, auquel j'attribue un datasource dynamiquement dans mon code behind. Et je souhaite récupérer la valeur d'un textbox, lors de l'édition.
Voici ma page aspx :
Et mon 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 <asp:GridView runat="server" ID="grdAdmin" AutoGenerateColumns="false" OnRowCancelingEdit="grdAdmin_RowCancelingEdit" OnRowEditing="grdAdmin_RowEditing" OnRowUpdating="grdAdmin_RowUpdating" ShowFooter="True" OnRowCommand="grdAdmin_RowCommand"> <HeaderStyle horizontalalign="Center" backcolor="blue" forecolor="White"/> <Columns> <asp:TemplateField HeaderText="Matricule"> <FooterTemplate> <asp:TextBox ID="add_ID" Runat="Server" /> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblID" runat="server" Text='<%# Bind("ID_ADMIN") %>'></asp:Label> <%# !(bool)Eval("VALIDITE_ADMIN")?"<br/><font color='red'><i>(Désactivé)</i></font>":"" %> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Nom"> <FooterTemplate> <asp:TextBox ID="add_Nom" runat="Server" /> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblNom" runat="server" Text='<%# Bind("DESIGNATION_ADMIN") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtNom" Text='<%# Bind("DESIGNATION_ADMIN") %>' runat="server" /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Edition"> <ItemTemplate> <asp:LinkButton ID="lnkEdit" runat="server" CommandName="Edit" Text="Editer"></asp:LinkButton> </ItemTemplate> <EditItemTemplate> <asp:LinkButton ID="lnkUpdate" runat="server" CommandName="Update" Text="Mettre à jour" CausesValidation="true"></asp:LinkButton> | <asp:LinkButton ID="lnkCancel" runat="server" CommandName="Cancel" Text="Annuler"></asp:LinkButton> </EditItemTemplate> <ItemStyle ForeColor="Blue" HorizontalAlign="Center" Width="15%" /> </asp:TemplateField> <asp:TemplateField HeaderText="Actions"> <FooterTemplate> <asp:ImageButton ID="btnAdd" runat="server" ImageUrl="~/Images/add.gif" CommandName="Insert" AlternateText="Ajouter"/> </FooterTemplate> <ItemTemplate> <asp:ImageButton ID="btnActivate" runat="server" ImageUrl="~/Images/ok.png" CommandName="Activate" AlternateText="Activer" Visible='<%# !(bool)Eval("VALIDITE_ADMIN")%>'/> <asp:ImageButton ID="btnDesactivate" runat="server" ImageUrl="~/Images/close.png" CommandName="Desactivate" AlternateText="Désactiver" Visible='<%# (bool)Eval("VALIDITE_ADMIN")%>'/> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
J'ai cherché pas mal dans la matinée sur ce problème, mais j'ai l'impression de tout bien faire.
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 protected void Page_Load(object sender, EventArgs e) { if (! Page.IsPostBack) { LoadData(); } } private void LoadData() { using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnection"].ToString())) { connection.Open(); string req = "SELECT * FROM ADMINISTRATEUR"; SqlCommand command = new SqlCommand(req, connection); SqlDataReader reader = command.ExecuteReader(); grdAdmin.DataSource = reader; grdAdmin.DataBind(); connection.Close(); } } public void grdAdmin_RowEditing(Object sender, GridViewEditEventArgs e) { grdAdmin.ShowFooter = false; grdAdmin.EditIndex = e.NewEditIndex; LoadData(); } public void grdAdmin_RowCancelingEdit(Object sender, GridViewCancelEditEventArgs e) { grdAdmin.ShowFooter = true; grdAdmin.EditIndex = -1; LoadData(); } public void grdAdmin_RowUpdating(Object sender, GridViewUpdateEventArgs e) { string ID = ((Label)grdAdmin.Rows[e.RowIndex].FindControl("lblID")).Text; string name = ((TextBox)grdAdmin.Rows[e.RowIndex].FindControl("txtNom")).Text; string request = "UPDATE ADMINISTRATEUR SET DESIGNATION_ADMIN='" + name + "' WHERE ID_ADMIN = '" + ID + "'"; using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["EER_PRO_ConnectionString"].ToString())) { connection.Open(); SqlCommand command = new SqlCommand(request, connection); command.ExecuteNonQuery(); connection.Close(); } grdAdmin.EditIndex = -1; LoadData(); }
Je ne recharge que lorsque c'est nécessaire, pas à chaque fois. Je le fais bien à chaque fin de mes méthodes. Bref je comprends pas du tout, pquoi lors du owUpdating, FindControl("txtNom") est toujours null
Quelqu'un aurait il une piste la dessus ?
Merci d'avance.
Partager