【问题标题】:Comparing value in the datatable比较数据表中的值
【发布时间】:2012-05-01 21:44:19
【问题描述】:

我正在尝试处理数据表以将新值与现有数据表进行比较,如果可用,数量将加起来,但如果没有,它将在数据表中添加一行。

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;

}

【问题讨论】:

  • 您的代码未显示您的要求。您在哪里比较该值、添加数量并创建新行?
  • 对不起,我是编程新手。我创建了一个类来运行我添加行和表

标签: c# asp.net datatable


【解决方案1】:

你运行这段代码:

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

每次你的条件为假时: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 或向其中添加一行的确切语法。

【讨论】:

    【解决方案2】:

    也许你可以使用 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;
    
    }
    

    【讨论】:

    • 收藏已修改;枚举操作可能不会执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多