asp.net购物车实现-------结合session方式 
原文地址:http://blog.csdn.net/w809026418/archive/2009/03/08/3969272.aspx
我改良了一下代码如下:protected void Button1_Click(object sender, EventArgs e)
        {
            if (Session["Cart"] == null)
            {
                this.BuildCart();
            }
            else
            {
                DataTable cart = Session["Cart"] as DataTable;
                if (this.ExistBook(cart))
                {
                    this.BuildSession(cart);
                }
            }
            GridView1.DataSource = Session["Cart"];
            GridView1.DataBind();
        }
        public bool ExistBook(DataTable cart)
        {
            foreach (DataRow dr in cart.Rows)
            {
                if (dr["BookName"].ToString().Equals(this.txtKeyWord.Text.Trim()))
                {
                    Session["Cart"] = cart;
                }
            }
            return true;
        }
        //新建购物车表
        public void BuildCart()
        {
            DataTable cart = new DataTable();
            cart.Columns.Add("BookName");
            this.BuildSession(cart);
        }
        // 添加新书
        public void BuildSession(DataTable cart)
        {
            DataRow dr = cart.NewRow();
            dr["BookName"] = this.txtKeyWord.Text.Trim();
            cart.Rows.Add(dr);
            Session["Cart"] = cart;
        }   ===================
现在问题是,我每次点击Button1_Click事件,都可以添加的,但不能过滤重复的,即if (this.ExistBook(cart))
这个代码没有做到“如果有重复数据,就添加不了”的效果。
所以请大侠们看看错在哪儿?

解决方案 »

  1.   

     public bool ExistBook(DataTable cart)
            {
                foreach (DataRow dr in cart.Rows)
                {
                    if (dr["BookName"].ToString().Equals(this.txtKeyWord.Text.Trim()))
                    {
                        Session["Cart"] = cart;
                    }
                }
                return true;
            }你始终返回 true 啊
      

  2.   

     public bool ExistBook(DataTable cart)
            {
                foreach (DataRow dr in cart.Rows)
                {
                    if (dr["BookName"].ToString().Equals(this.txtKeyWord.Text.Trim()))
                    {
                        Session["Cart"] = cart;
                    }
                }
                return true;
            }
    光有true的返回,没有FALSE的返回啊
      

  3.   

            public bool ExistBook(DataTable cart)
            {
                foreach (DataRow dr in cart.Rows)
                {
                    if (dr["BookName"].ToString().Equals(this.txtKeyWord.Text.Trim()))
                    {
                        Session["Cart"] = cart;
                    }
                    else
                    {
                        return false;
                    }            }
                return true;
            }试试。
      

  4.   


    public int ExistBook(DataTable cart)
            {
                int i=0; 
                foreach (DataRow dr in cart.Rows)
                {
                    if (dr["BookName"].ToString().Equals(this.txtKeyWord.Text.Trim()))
                    {
                        Session["Cart"] = cart;
                        i=1;
                    }
                }
            }protected void Button1_Click(object sender, EventArgs e)
            {
                if (Session["Cart"] == null)
                {
                    this.BuildCart();
                }
                else
                {
                    DataTable cart = Session["Cart"] as DataTable;
                    if (this.ExistBook(cart)==0)//不存在重复数据
                    {
                        this.BuildSession(cart);
                    }
                }
                GridView1.DataSource = Session["Cart"];
                GridView1.DataBind();
            }
      

  5.   

    还是不对啊,提示“int i = 0;”重来没有使用过,public int ExistBook(DataTable cart)
    这里提示“并非所有的代码路径都返回值”
      

  6.   


    忘写了一句
    public int ExistBook(DataTable cart)
            {
                int i=0; 
                foreach (DataRow dr in cart.Rows)
                {
                    if (dr["BookName"].ToString().Equals(this.txtKeyWord.Text.Trim()))
                    {
                        Session["Cart"] = cart;
                        i=1;
                    }
                }
                return i;
            }
      

  7.   


    if (!this.ExistBook(cart))
                {
                    this.BuildSession(cart);
                }
     public bool ExistBook(DataTable cart)
        {
            foreach (DataRow dr in cart.Rows)
            {
                if (dr["BookName"].ToString().Equals(this.txtKeyWord.Text.Trim()))
                {
                    return true;
                }
                
            }
            return false;
        }
      

  8.   

    GridView1.DataSource = Session["Cart"];
                GridView1.DataBind();
    这两句楼主好像放错位置了,好像应该放在else里面吧
    if (Session["Cart"] == null)
                {
                    this.BuildCart();
                }
                else
                {
                    DataTable cart = Session["Cart"] as DataTable;
                    if (this.ExistBook(cart))
                    {
                        this.BuildSession(cart);
                    }
                   GridView1.DataSource = Session["Cart"];
                    GridView1.DataBind();            }
           }