Comparando valor en la tabla de datos

Estoy tratando de trabajar en una tabla de datos para comparar un nuevo valor con la tabla de datos existente, si está disponible, la cantidad se sumará, pero si no, agregará una fila en la tabla de datos.

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

}  

pero de alguna manera. No pude lograr agregar su cantidad. estaba creando una nueva fila cada vez. Gracias por el consejo. Esta es la clase que estaba usando para agregar una fila o agregar una tabla

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;

}

preguntado el 01 de mayo de 12 a las 22:05

Su código no muestra lo que está preguntando. ¿Dónde compara ese valor, agrega una cantidad y crea una nueva fila? -

Lo siento, soy un novato en programación. Creé una clase para ejecutar mi adición de filas y tablas:

2 Respuestas

ejecutas este código:

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

cada vez que su condición es falsa: title == checktitle

No estoy seguro de que este sea el error, pero deberías construir algo diferente, como esto:

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

}  

Espero que esto le dé una dirección para corregir su código. Codifiqué esto directamente en el navegador y no recuerdo la sintaxis exacta para iniciar un DataTable o agregarle una fila.

contestado el 01 de mayo de 12 a las 22:05

Tal vez puedas usar 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();
            }
     }

 }

Fila de su carrito

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;

}

contestado el 02 de mayo de 12 a las 03:05

Se modificó la colección; la operación de enumeración podría no ejecutarse. - eugene

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.