我做的是一个购物车,用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的
可是我这种循环,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的
for(int i=0;i< Convert.ToInt32(dt.Rows.Count.ToString());i++) 为何不写成
for(int i=0;i<dt.Rows.Count;i++) 还不知这一个,所有本来是数字类型的,都经过 数字-> 字符串->数字 的转换。
然后用这个 dataview去操作。像你那里就不需要用
for(int i=0;i< Convert.ToInt32(dt.Rows.Count.ToString());i++)
{
if (Convert.ToInt32(dt.Rows[i]["spID"])==spID)
去比较了dataview.Find() 方法直接给你返回包不包含
CartView.Sort = "spID";
int i;
i = CartView.Find(spID);
if (i ==-1 )
{
//不存在
DataRow myDv = Cart.NewRow();
myDv["数量"] =1;
........
dt.Rows.Add(myDv);
}
else
{
//
}