当试图将相同的书名插入购物车时,我试图更新我的数据表。
public bool checkBook(DataTable dt, String title)
{
bool returnval = false;
try
{
foreach (DataRow dr in dt.Rows)
{
String checktitle = dr["Title"].ToString();
if (title == checktitle)
{
int a = Convert.ToInt32(dr["quantity"].ToString());
dr["quantity"] = a + 1;
returnval = true;
}
}
}
catch (Exception ex)
{
//do something
}
return returnval;
}
数量中的初始值为1,但是当提交按钮时,数量仍为1,但是当它第三次进入时,数字仅开始增加1。我不明白哪里出错了?
已编辑::
protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
{
String title = ((Label)(ListView1.Items[ListView1.SelectedIndex].FindControl("Title"))).Text; ;
decimal price = decimal.Parse(((Label)(ListView1.Items[ListView1.SelectedIndex].FindControl("Price"))).Text);
cart cart = new cart(title, price);
if (HttpContext.Current.Session["Cart"] != null)
{
DataTable shoppingcart = (DataTable)HttpContext.Current.Session["Cart"];
bool check = checkBook(shoppingcart, title);
if (check != true)
{
ShoppingCart.DataSource = cart.cartrow(shoppingcart);
ShoppingCart.DataBind();
}
else
{
// if is true, it suppose to increase the quantity here
}
}
}
else
{
HttpContext.Current.Session["Cart"] = cart.shoppingCart();
ShoppingCart.DataSource = cart.shoppingCart();
ShoppingCart.DataBind();
}
}
类::
String title { get; set; }
decimal price { get; set; }
int quantity = 1;
DataTable CartTable;
DataRow tableRow;
public cart(String _title, decimal _price)
{
title = _title;
price = _price;
}
public DataTable shoppingCart()
{
CartTable = new DataTable("cart");
CartTable.Columns.Add("ID", typeof(Int32));
CartTable.Columns["ID"].AutoIncrement = true;
CartTable.Columns["ID"].AutoIncrementSeed = 1;
CartTable.Columns.Add("Title");
CartTable.Columns.Add("Price");
CartTable.Columns.Add("quantity");
CartTable.Columns["quantity"].DataType = typeof(Int32);
tableRow = CartTable.NewRow();
tableRow["Title"] = title;
tableRow["Price"] = price;
tableRow["quantity"] = quantity;
CartTable.Rows.Add(tableRow);
return CartTable;
}
public DataTable cartrow(DataTable _cart)
{
tableRow = _cart.NewRow();
tableRow["Title"] = title;
tableRow["Price"] = price;
tableRow["quantity"] = quantity;
_cart.Rows.Add(tableRow);
return _cart;
}
答案 0 :(得分:1)
您需要显示更多代码才能确定问题所在。你绑定到数据表吗?您是否在单击按钮后重新创建它?
无论如何,以下是一些代码,表明更新可以按照您的预期运行。请注意使用System.Data.DataSetExtensions中的通用Field扩展方法。
namespace StackOverflowTestCode
{
using System.Data;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class RandomTests
{
[TestMethod]
public void DataTableUpdate_Test()
{
DataTable dataTable = new DataTable();
dataTable.Columns.Add( "Title", typeof( string ) );
dataTable.Columns.Add( "Quantity", typeof( int ) );
dataTable.Rows.Add( "TitleOne", 0 );
dataTable.Rows.Add( "TitleTwo", 0 );
dataTable.Rows.Add( "TitleThree", 0 );
DataRow[] rowsToUpdate =
dataTable.Select( "Title = 'TitleTwo'" );
if( rowsToUpdate != null && rowsToUpdate.Length == 1 )
{
rowsToUpdate[ 0 ][ "Quantity" ] =
rowsToUpdate[ 0 ].Field<int>( "Quantity" ) + 1;
}
// The right row was updated.
Assert.AreEqual( 1, dataTable.Rows[ 1 ][ "Quantity" ] );
// The other rows were not updated.
Assert.AreEqual( 0, dataTable.Rows[ 0 ][ "Quantity" ] );
Assert.AreEqual( 0, dataTable.Rows[ 2 ][ "Quantity" ] );
}
}
}
修改强>
更新后,唯一能立即跳出来的东西是奇怪的,可能的错误来源如下:
HttpContext.Current.Session["Cart"] = cart.shoppingCart();
ShoppingCart.DataSource = cart.shoppingCart();
为什么要两次调用该方法?