高手一看就能解决的购物车问题,我不知哪儿出错了.
这是实现商品数量修改的代码,不知哪儿有问题,总取不出 TextBox 中输入的值:
protected void btnUpdateCart_Click(object sender, EventArgs e)
{
DataTable dtb = (DataTable)Session[ "myCar "];
foreach (GridViewRow grw in this.GridView2.Rows)
{
int i = grw.RowIndex;
int theCount = Convert.ToInt32(((TextBox)this.GridView2.Rows[i].Cells[4].FindControl( "txtCount ")).Text.ToString());
DataRow UpdateDR;
UpdateDR = dtb.Rows[i];
Decimal thePrice = Convert.ToDecimal(dtb.Rows[i][ "thePrice "]);
UpdateDR[ "TheCount "] = theCount;
//oldDR[ "thePrice "] = thePrice;
UpdateDR[ "TotalPrice "] = thePrice * theCount;
Session[ "myCar "] = dtb;
Context.Server.Transfer(Request.CurrentExecutionFilePath);
}
}
以下是: aspx 页面代码:
<asp:GridView ID= "GridView2 " runat= "server " AutoGenerateColumns= "False " Height= "205px "
Width= "540px ">
<Columns>
<asp:BoundField DataField= "Id " HeaderText= "序号 " />
<asp:BoundField DataField= "goodsId " HeaderText= "商品ID " />
<asp:BoundField DataField= "thtGoodsName " HeaderText= "商品名称 " />
<asp:BoundField DataField= "thePrice " HeaderText= "单价 " />
<asp:TemplateField HeaderText= "数量 ">
<ItemTemplate>
<asp:TextBox ID= "txtCount " runat= "server " Text= ' <%# Eval( "TheCount ") %> ' Width= "91px " EnableViewState= "False "> </asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField= "TotalPrice " HeaderText= "单项总价 " />
<asp:TemplateField HeaderText= "删除 ">
<ItemTemplate>
<asp:Button ID= "btnDelTheGoods " runat= "server " CommandArgument= ' <%# Eval( "goodsId ") %> '
Text= "删除 " Width= "59px " />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID= "btnUpdateCart " runat= "server " OnClick= "btnUpdateCart_Click " Text= "更新购物车 " />
购物车的结构如下:
dtb.Columns.Add( "Id ", typeof(Int32));
dtb.Columns[0].AutoIncrement = true;
dtb.Columns[0].AutoIncrementSeed = 1;
dtb.Columns.Add( "goodsId ", typeof(Int32));
dtb.Columns.Add( "thtGoodsName ");
dtb.Columns.Add( "thePrice ");
dtb.Columns.Add( "TheCount ");
dtb.Columns.Add( "TotalPrice ");
[解决办法]
你的数据是从DataTable来的,不是数据库?
[解决办法]
1
if(!IsPostBack)
{
.DataView绑定要放在
}
2.
DataTable dtb = (DataTable)Session[ "myCar "];
foreach (GridViewRow grw in this.GridView2.Rows)
{
int i = grw.RowIndex;
int theCount = Convert.ToInt32(((TextBox)this.GridView2.Rows[i].Cells[4].FindControl( "txtCount ")).Text.ToString());
DataRow UpdateDR;
UpdateDR = dtb.NewRow();
Decimal thePrice = Convert.ToDecimal(dtb.Rows[i][ "thePrice "]);
UpdateDR[ "TheCount "] = theCount;
//oldDR[ "thePrice "] = thePrice;
UpdateDR[ "TotalPrice "] = thePrice * theCount;
dtb.Rows.Add(UpdateDR);
}
Session[ "myCar "] = dtb;
Context.Server.Transfer(Request.CurrentExecutionFilePath);
[解决办法]
GridView 的绑定代码放在
if(!IsPostBack) {
// 这里...
}