电子书店实例心得

1.把DataSet看成是XML.因为它的内部就是XML;所以他们之间在很多情况下完全可以互换;
比如设置一个DataGrid的数据源:
None.gif DataSet ds  =   new  DataSet();
None.gif.. .. ..
None.gifDataGrid.DataSource 
=  ds;
None.gif.. .. ..
None.gifds.ReadXML(
" XML.xml " );
None.gifDataGrid.DataSource 
=  ds;

2.一定要养成定义属性的习惯,内部变量必需封装.
特别是需要定义使用的常用类.

3.对一般的少量数据可以存储在数组内.
对于需要经常查询,或者根据某个键查找的数据组,用 值/键 对,比如Hashtable.
这些类都要实现一个接口: ICollection. 所以,可以定义此接口返回类型的值.比如:
None.gif          public  ICollection BookOrders
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return bookOrders.Values;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }
这就是一个返回内部Hashtable : bookOrders.Values的值组的属性, 实现了ICollection接口.

4.用foreach访问ICollection中每一个元素时,使用以下方法:
None.gif foreach  (DictionaryEntry entry  in  bookOrders)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    dot.gif.
ExpandedBlockEnd.gif}

5.属性也可以实现复杂计算,不要总错误的认为处理只有在方法中进行.
比如在get里面进行大量处理再输出.

6.Cache的使用非常简单,而且能实现很多复杂的功能,比如到时间自动处理任务,比如更新等等.
比如,我们可以对图书的资料DataSet缓存到Cache中,且3分钟更新一次.
None.gif Context.Cache.Insert( " Books " , ds,  null , DateTime.Now.AddMinutes( 3 ), Cache.NoSlidingExpiration, CacheItemPriority.Default,  new  CacheItemRemovedCallback(RefreshDataSet));
None.gif
None.gif
static   void  RefreshDataSet( string  key,  object  item, CacheItemRemovedReason reason)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    .. .. ..
ExpandedBlockEnd.gif}

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

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

转载于:https://www.cnblogs.com/wddavid/archive/2005/08/14/214894.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值