0

同じ本のタイトルがカートに挿入されるたびに、データテーブルを更新しようとしていました。

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のままですが、3回目に入ると、数は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;

}
4

1 に答える 1

2

問題が何であるかを判断するには、コードをさらに表示する必要があります。データテーブルにバインドしていますか?ボタンがクリックされた後にそれを再作成していますか?

とにかく、以下は、更新が期待どおりに機能することを示すための少しのコードです。System.Data.DataSetExtensionsの汎用フィールド拡張メソッドの使用に注意してください。

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();

なぜそのメソッドを2回呼び出すのですか?

于 2012-05-05T21:06:34.090 に答える