比如设置一个DataGrid的数据源:






2.一定要养成定义属性的习惯,内部变量必需封装.
特别是需要定义使用的常用类.
3.对一般的少量数据可以存储在数组内.
对于需要经常查询,或者根据某个键查找的数据组,用 值/键 对,比如Hashtable.
这些类都要实现一个接口: ICollection. 所以,可以定义此接口返回类型的值.比如:











4.用foreach访问ICollection中每一个元素时,使用以下方法:







5.属性也可以实现复杂计算,不要总错误的认为处理只有在方法中进行.
比如在get里面进行大量处理再输出.
6.Cache的使用非常简单,而且能实现很多复杂的功能,比如到时间自动处理任务,比如更新等等.
比如,我们可以对图书的资料DataSet缓存到Cache中,且3分钟更新一次.








7.我们可以动态加载控件,和自定义控件.
但是,我们必需注意一个很重要的问题: 由于控件是动态代码产生,而并不是属于窗体本身初始化的一部分,所以当页面PostBack时(比如点任何一个按钮)会重载页面,也一定要写好相应的处理代码.


8.DataGrid中的按钮事件,是DataGrid.ItemCommand事件处理的,我们常常在事件内判断e.CommandName来进行相应的处理,同时可以调用同一行(条记录)的相关数据进行处理,比如的一行的数据就是e.Item.Cells[0].Text .
9.DataGrid.DataSource实现的对象,它包含用于为此控件提供数据的值集合。
数据源必须是实现 System.Collections.IEnumerable 接口(如 System.Data.DataView、 System.Collections.ArrayList 和 System.Collections.Hashtable)的对象,才能绑定到从 BaseDataList 类派生的控件。
同样,这里也是,例子中购物车DataGrid绑定了ICollection返回的对象,它是一个以类为元素的集合,我们在DataGrid里设置相应的列绑定到类里面的属性名,它会自动识别,非常智能.因为属性是类的一个下级(也就是所谓的"."关系,都适用).
这个例子很简单,和实际的系统也相去甚远,因为它用的的是动态控件,缓存和会话状态技术,而真正的这些都还是主要用数据库,中间可能插一些缓存层.
这里只是技术的应用例子,速度奇快,占用内存也奇高.
下载: http://www.cnblogs.com/Files/wddavid/ElectronicBookShop.rar
SQL数据库: http://www.cnblogs.com/Files/wddavid/ElectronicBookShopDatabase.rar