public void addtocart(string bookid)
    {
        SqlConnection conn = new SqlConnection("server=localhost;database=book;uid=aaa;pwd=123456");
        String sql = "select * from book where bookid='" + bookid + "'";
        SqlDataAdapter adp = new SqlDataAdapter(sql, conn);
        DataSet ds = new DataSet();
        DataTable dt;
        adp.Fill(ds, "book");
        dt = ds.Tables["book"];
        DataRow dr = cart.NewRow();
        dr[0] = dt.Rows[0]["bookid"];
        dr[1] = dt.Rows[0]["bookname"];
        dr[2] = dt.Rows[0]["price"];
        for (int i = 0; i <= cart.Rows.Count - 1; i++)
        {
            if (cart.Rows[i][0].ToString() == bookid)
            {
                dr[3] = int.Parse(dr[3].ToString()) + 1;
            }            else
            {
                dr[3] = 1;
                
            }
        }
        dr[4] = Double.Parse(dr[2].ToString()) * int.Parse(dr[3].ToString());
        cart.Rows.Add(dr);
}
这是购物车其中一部分代码,dr[3]表示的是购买数量。它的初始值为1, 当用户选择的商品已经在datatable中,也就是购物车时,会自动加1。但是当执行到 dr[4] = Double.Parse(dr[2].ToString()) * int.Parse(dr[3].ToString());这句时就会出错,提示输入的字符串格式有问题。我想应该是dr[3]没有获得值,请大家帮忙看一下到底是哪儿错了,还需要什么改进?

解决方案 »

  1.   

     if   (cart.Rows[i][0].ToString()   ==  “ bookid” 
                            { 
                                    dr[3]   =   int.Parse(dr[3].ToString())   +   1; 
                            } 跟一下看if语句能不能进去?是不是都到了else了?
      

  2.   

    哦,上面的错了,bookid是个字符串,不好意思啊。
      

  3.   

    判断的时候应该判断一下dr[3]是不是有值:
    if   (cart.Rows[i][0].ToString()   ==   bookid&&dr[3]。ToString()!=“”) 
                            { 
                                    dr[3]   =   int.Parse(dr[3].ToString())   +   1; 
                            }
    只能想到这么多了,帮你顶。
      

  4.   

    做购物车最好用对象和hasTable来做
      

  5.   


    dr[4]   =   Double.Parse(dr[2].ToString())   *   Double.Parse(dr[3].ToString());