我做的是一个购物车,用table做临时存储的。
可是我这种循环,table中的数据越来越多,不过都是重复的希望各位大哥大姐给看下。
代码如下:
else
{//如果购物车存在,就遍历table中的spID 看有没有是已经存在table中的     
DataTable dt=(DataTable)Session["bus"];
int spID= Convert.ToInt32(this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
for(int i=0;i< Convert.ToInt32(dt.Rows.Count.ToString());i++) 
{
  if (Convert.ToInt32(dt.Rows[i]["spID"])==spID)
   {
    dt.Rows[i]["数量"]=Convert.ToInt32(dt.Rows[i]["数量"])+1;
    double total= Convert.ToDouble(dt.Rows[i]["jiage"])*Convert.ToDouble(dt.Rows[i]["数量"]);
    dt.Rows[i]["总价"]=total;
   }
    else
    {  int r =Convert.ToInt32(dt.Rows.Count.ToString());
       SqlConnection conn = DB.CreatCon();
       conn.Open();
      SqlCommand cmd1 = new SqlCommand("select * from sptable where spID= '"+spID+"'",conn);
       SqlDataAdapter sda1 = new SqlDataAdapter();
      DataSet ds1 = new DataSet();
      sda1.SelectCommand=cmd1;
      sda1.Fill(ds1,"sptable1");
      DataRow dr = dt.NewRow();
      dr.ItemArray = ds1.Tables["sptable1"].Rows[0].ItemArray;
      dt.Rows.Add(dr);
      dt.Rows[r]["数量"]=1;
      dt.Rows[r]["总价"]=Convert.ToDecimal(dt.Rows[r]["jiage"]);
      }

  }//for循环
    Session["bus"]=dt;
}//第一个else的

解决方案 »

  1.   

    这个写法,很新鲜
      for(int i=0;i< Convert.ToInt32(dt.Rows.Count.ToString());i++)   为何不写成
      for(int i=0;i<dt.Rows.Count;i++)   还不知这一个,所有本来是数字类型的,都经过 数字-> 字符串->数字 的转换。
      

  2.   

    这样写重复数据当然会越来越多了,你的思路本身就是有问题的,按你的代码,购物车内有两种商品,现在加入第三种商品,与前两种商品都不同,那么会比较两次,每一次都会加入一条第三种商品的数据,dt.Rows.Count值越大,重复数据就越多在数据库中建立一个临时表,记录购物车中的商品数据,每加入一种商品,去该表中查询,如果已存在,则数量加1,不存在,新增一条记录
      

  3.   

    购物车一般多会创建一个 和datatable一样的dataview
    然后用这个 dataview去操作。像你那里就不需要用
    for(int i=0;i< Convert.ToInt32(dt.Rows.Count.ToString());i++) 
    {
      if (Convert.ToInt32(dt.Rows[i]["spID"])==spID)
    去比较了dataview.Find() 方法直接给你返回包不包含
      

  4.   

    DataView CartView = new DataView(dt);
    CartView.Sort = "spID";
    int i;
    i = CartView.Find(spID);
    if (i ==-1 )   
     {
      //不存在
      DataRow myDv = Cart.NewRow();
      myDv["数量"] =1;
      ........
      dt.Rows.Add(myDv);
     }
    else  
    {
        //
    }
      

  5.   

    这样写重复数据当然会越来越多了,你的思路本身就是有问题的,按你的代码,购物车内有两种商品,现在加入第三种商品,与前两种商品都不同,那么会比较两次,每一次都会加入一条第三种商品的数据,dt.Rows.Count值越大,重复数据就越多在数据库中建立一个临时表,记录购物车中的商品数据,每加入一种商品,去该表中查询,如果已存在,则数量加1,不存在,新增一条记录