public class book
    {
        private List<BOOK> items=new List<BOOK>();
        public List<BOOK> Items
        {
            get {return items;}
        }        public string Sum()
        {
            return items.Count().ToString();
        }        public void RemoveBook(string p)
        {
           p.Remove(0);
        }        public void AddBook(string p, string author, decimal price)
        {
            BOOK a = new BOOK();
            a.BookTitle = p;
            a.Author = author;
            a.BookPrice = price;
            BOOK[] b={a};
           Items.Add(b[0]);

            
        }
    },其中用AddBook方法(自己写的)向gridview1加书籍记录,在gridview2按添加按钮时为何每次只有一条出现一条记录?请问我的addbook逻辑错在哪?

解决方案 »

  1.   

    你应该将items这个属性定义在主窗口中,并且为全局的staticpublic static List<BOOK> items=new List<BOOK>();不然,每次实例化Book的时候都会重新new List<BOOK>();
      

  2.   

    static 多用户操作会重叠不可取。可以用SESSION来存储 List<BOOK> 
    List<BOOK> items=(List<BOOK>)Session["books"];
    BOOK a = new BOOK();
    a.BookTitle = p;
    a.Author = author;
    a.BookPrice = price;
    BOOK[] b={a};
    Items.Add(b[0]);
    Session["books"]=Items;
      

  3.   

    我改为static就行了,但是不明白为什么?
      

  4.   

    static 全是全局的。程序运行都只有一个实例。 比如小王增加一本书。小明的购物车也会出现一本书
      

  5.   

    恩恩,问题看似解决但用static又导致了重叠
      

  6.   

    除了session,还有什么解决方法没?可否用一种方法避免每次实例化的干扰
      

  7.   

    或者干脆能不能不提供实例化的代码就实现AddBook??
      

  8.   


    asp.net每一次响应请求,都会重建一个新的page对象实例,所有变量都初始化了。因此asp.net程序使用ViewState来保存页面状态。在ViewState中不要保存过多的东西,因为它是在千里之外的客户端浏览器与web服务器之间来回传递的。因此你看GridView控件,它要自动化地保持状态,也不过仅仅保存Keys集合数据,而不是将源数据全都保存在ViewState。
      

  9.   

    当然这是假设你的“购物”应用程序仅仅是由同一个aspx来动态实现的,要求你的购物网页仅仅回发而不重定向。因此也需要搞懂回发机制,避免那种asp编程的“页面间跳来跳去”的重定向机制。假设购物过程中你要跨多个页面,那么不能使用ViewState,只能依据 SessionId+数据库 来管理购物车(提高性能可以通过数据缓存技术,但是前提仍然是依据数据库来保存购物车)。
      

  10.   

    我的AddBook方法是位于App_Data文件夹下的的类中的,可以直接用session或viewstate吗?
      

  11.   

    如何实现在app_data自己声明的类中实现addbook
      

  12.   

    参考:
    http://www.cnblogs.com/insus/archive/2011/12/08/2281000.html
      

  13.   

    问题解决了,profile本身就可以存储用户信息,不添加session等也行