0

新しい値を既存のデータテーブルと比較するためにデータテーブルで作業しようとしています。利用可能な場合は数量が加算されますが、そうでない場合はデータテーブルに行が追加されます。

if (HttpContext.Current.Session["Cart"] != null)
{
    DataTable shoppingcart = (DataTable)HttpContext.Current.Session["Cart"];
    for (int i = 0; i < shoppingcart.Rows.Count; i++)
    {
        String checktitle = shoppingcart.Rows[i]["Title"].ToString();
            if (title == checktitle)
            {
                //do something
            }
            else
            {

                ShoppingCart.DataSource = cart.cartrow(shoppingcart);
                ShoppingCart.DataBind();
            }
        }

    }

    else
    {
        HttpContext.Current.Session["Cart"] = cart.shoppingCart();
        ShoppingCart.DataSource = cart.shoppingCart();
        ShoppingCart.DataBind();
    }

}  

しかし、どういうわけか。量を追加することができませんでした。毎回新しい行を作成していました。アドバイスをありがとう。これは、行の追加またはテーブルの追加に使用していたクラスです

String title { get; set; }
decimal price { get; set; }
int quantity { get; set; }
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");


    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

2 に答える 2

0

多分あなたは foreach を使うことができます:

if (HttpContext.Current.Session["Cart"] != null)
{
    DataTable shoppingcart = (DataTable)HttpContext.Current.Session["Cart"];

    foreach (DataRow row in shoppingcart.Rows)
    {
            String checktitle = row["Title"].ToString();
            int price = row["price"].ToString();
            int quantity = row["quantity"].ToString();

            if (title == checktitle)
            {
                //do something
            }
            else
            {

                Session["Cart"] = cart.cartrow(shoppingcart,checktitle,price,quantity);
                ShoppingCart.DataSource = Session["Cart"]  as DataTable();
                ShoppingCart.DataBind();
            }
     }

 }

あなたのカート行

public DataTable cartrow(DataTable _cart,string title,int price,int quantity)
{

    tableRow = _cart.NewRow();
    tableRow["Title"] = title;
    tableRow["Price"] = price;
    tableRow["quantity"] = quantity;
    _cart.Rows.Add(tableRow);
    return _cart;

}
于 2012-05-02T02:50:06.347 に答える
0

このコードを実行します:

ShoppingCart.DataSource = cart.cartrow(shoppingcart);
ShoppingCart.DataBind();

条件が false になるたびに: title == checktitle

これがエラーかどうかはわかりませんが、次のように別のものを作成する必要があります。

if (HttpContext.Current.Session["Cart"] != null)
{
    DataTable shoppingcart = (DataTable)HttpContext.Current.Session["Cart"];
    //put here each row you need to bind
    DataTable toBind = new DataTable();  //do more to init the columns, rows, etc

    for (int i = 0; i < shoppingcart.Rows.Count; i++)
    {
        String checktitle = shoppingcart.Rows[i]["Title"].ToString();
            if (title == checktitle)
            {
                //do something
            }
            else
            {
                toBind.add(cart.cartrow(shoppingcart));  //the sintax here is incorect, I code directly here
                //ShoppingCart.DataSource = cart.cartrow(shoppingcart);
                //ShoppingCart.DataBind();
            }
        }
        //bind outside the for cicle
        ShoppingCart.DataSource = toBind ;
        ShoppingCart.DataBind();
    }

    else
    {
        HttpContext.Current.Session["Cart"] = cart.shoppingCart();
        ShoppingCart.DataSource = cart.shoppingCart();
        ShoppingCart.DataBind();
    }

}  

これにより、コードを修正する方向性が示されることを願っています。これをブラウザに直接コーディングしましたが、DataTable を初期化するための正確な構文や行を追加するための正確な構文を覚えていません。

于 2012-05-01T21:54:13.920 に答える