Bonjour,
voici plusieurs jours que je traîne un soucis en ASP.NET
J'ai une page qui affiche le caddie d'un client. C'est un gridView, avec notamment un textBox avec la quantité, cette quantité devant pouvoir être modifiable par le client. Il peut valider par click sur un bouton.
Voici le code de la page:
Et maintenant 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 <%@ Page Language="C#" MasterPageFile="~/AngieTattoo.master" AutoEventWireup="true" CodeFile="ShoppingCart.aspx.cs" Inherits="ShoppingCart" Title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="contentPlaceHolder" Runat="Server"> <asp:Label ID="titleLabel" runat="server" Text="Your Shopping Cart" CssClass="ShoppingCartTitle"></asp:Label><br /> <asp:Label ID="statusLabel" runat="server" CssClass="AdminPageText"></asp:Label><br /> <asp:GridView ID="grid" runat="server" AutoGenerateColumns="False" BorderWidth="0px" DataKeyNames="ProductID" Width="100%" OnRowDeleting="grid_RowDeleting"> <Columns> <asp:BoundField DataField="Nom" HeaderText="Product Name" ReadOnly="True" SortExpression="Nom" /> <asp:BoundField DataField="Price" HeaderText="Price" ReadOnly="True" SortExpression="Price"/> <asp:TemplateField HeaderText="Quantity"> <ItemTemplate> <asp:TextBox ID="editQuantity" runat="server" CssClass="GridEditingRow" Width="24px" MaxLength="2" Text='<%# Eval("Quantity")%>'></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="SubTotal" HeaderText="SubTotal" ReadOnly="True" SortExpression="SubTotal" /> <asp:ButtonField ButtonType="Button" CommandName="Delete" Text="Delete" > <ControlStyle CssClass="SmallButtonText" /> </asp:ButtonField> </Columns> </asp:GridView> <table width=100%> <tr> <td> <span style="ProductDescription"> Total amount : </span> <asp:Label ID="totalAmountLabel" runat="server" Text="Label" CssClass="ProductPrice"></asp:Label> </td> <td align="right"> <asp:Button runat="server" ID="updateButton" Text = "Update Quantities" CssClass="ButtonText" OnClick="updateButton_Click"/> </td> </tr> </table> <br /> <asp:Button ID="continueShoppingButton" runat="server" Text="Continue Shopping" CssClass="ButtonText" OnClick="continueShoppingButton_Click"/> </asp:Content>
J'ai ajouté une string test pour récuperer la valeur du textbox, et le soucis est la: il m'indique la valeur contenue à l'origine, et non pas la valeur que l'utilisateur à corrigée. Du coup, il me fait mon updateen DB avec la même valeur que précédemment... Comment faire pour qu'il prenne la valeur du textBox modifié par l'utilisateur?
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 using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; public partial class ShoppingCart : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { PopulateControls(); } private void PopulateControls() { this.Title = AngieTattooConfiguration.SiteName + " : Caddie"; DataTable cartTable = ShoppingCartAccess.GetItems(); if (cartTable.Rows.Count == 0) { titleLabel.Text = "Votre caddie est vide"; grid.Visible = false; totalAmountLabel.Text = String.Format("{0:c}", 0); updateButton.Enabled = false; } else { titleLabel.Text = "Votre caddie"; grid.DataSource = cartTable; grid.DataBind(); grid.Visible = true; totalAmountLabel.Text = String.Format("{0:c}", ShoppingCartAccess.GetTotalAmount()); updateButton.Enabled = true; } } protected void grid_RowDeleting(object sender, GridViewDeleteEventArgs e) { bool success = ShoppingCartAccess.RemoveItem(grid.DataKeys[e.RowIndex].Value.ToString()); statusLabel.Text = (success) ? "<b>Produit supprimé</b>" : "<b>Erreur pendant la suppression</b>"; PopulateControls(); } protected void updateButton_Click(object sender, EventArgs e) { bool success = true; int quantité; string strQuantité; string test = ((TextBox)grid.Rows[0].FindControl("editQuantity")).Text; for (int cptRow = 0; cptRow < grid.Rows.Count; cptRow++) { strQuantité = ((TextBox)grid.Rows[cptRow].FindControl("editQuantity")).Text; if (Int32.TryParse(strQuantité, out quantité)) { success = success && ShoppingCartAccess.UpdateItem(grid.DataKeys[cptRow].Value.ToString(), quantité); } else success = false; } statusLabel.Text = (success) ? "<b>Quantité mise à jour</b>" : "<b>Erreur pendant la mise à jour</b>"; PopulateControls(); } protected void continueShoppingButton_Click(object sender, EventArgs e) { if (Session["LastVisitedCatalogPage"] != null) Response.Redirect(Session["LastVisitedCatalogPage"].ToString()); else Response.Redirect(Request.ApplicationPath); } }
Ce code est adapté d'un bouquin, et dans le site développé avec le bouquin, ce code passe et il prend bien en compte la valeur modifiée par l'utilisateur pour faire l'update. Je ne vois pas ce qui change dans ce site ci.
Si quelqu'un voit pourquoi il ne prend pas en compte le changement du textBox, je lui en serait reconnaissant!
Merci d'avance!
P.S: Désolé pour le roman...
Partager