当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  一种快速存取订阅条目的方案

 一种快速存取订阅条目的方案

点击次数:18 次 发布日期:2008-11-26 10:57:02 作者:源代码网
源代码网推荐      引言:
源代码网推荐  
源代码网推荐    我们在做项目开发的过程中,经常会遇到把许多条目的信息的选择情况记录到用户的相关设置当中,比较笨的办法是每一个条目对应用户设置表中的一个属性字段,但这样的设计似乎扩展性很差,效率也好不到哪里去,这里提供一种快速存储N条记录的方案,即用一个整型数据来记录条目的选择状态。
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  内容:
源代码网推荐  
源代码网推荐  一、表结构:
源代码网推荐  
源代码网推荐   两个Table
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Item 项目表
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Key: ID
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Field name
源代码网推荐  
源代码网推荐  
源代码网推荐   Type
源代码网推荐  
源代码网推荐  
源代码网推荐   Length
源代码网推荐  
源代码网推荐  
源代码网推荐   Default
源代码网推荐  
源代码网推荐  
源代码网推荐   Description
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  ID
源代码网推荐  
源代码网推荐  
源代码网推荐   int
源代码网推荐  
源代码网推荐  
源代码网推荐   4
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   ID(自动编号)
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  ItemName
源代码网推荐  
源代码网推荐  
源代码网推荐   Nvarchar
源代码网推荐  
源代码网推荐  
源代码网推荐   50
源代码网推荐  
源代码网推荐  
源代码网推荐   0
源代码网推荐  
源代码网推荐  
源代码网推荐   条目名称
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  UserInfo 用户信息表
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Key: UserID
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  Field name
源代码网推荐  
源代码网推荐  
源代码网推荐   Type
源代码网推荐  
源代码网推荐  
源代码网推荐   Length
源代码网推荐  
源代码网推荐  
源代码网推荐   Default
源代码网推荐  
源代码网推荐  
源代码网推荐   Description
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  UserID
源代码网推荐  
源代码网推荐  
源代码网推荐   int
源代码网推荐  
源代码网推荐  
源代码网推荐   4
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   ID(自动编号)
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  ItemRecord
源代码网推荐  
源代码网推荐  
源代码网推荐   int
源代码网推荐  
源代码网推荐  
源代码网推荐   4
源代码网推荐  
源代码网推荐  
源代码网推荐   0
源代码网推荐  
源代码网推荐  
源代码网推荐   条目选择记录
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   一点说明:我们的目的就是要把用户对Item中所有的记录的选择情况进行记录,经过一定的处理存储到ItemRecord中。
源代码网推荐  
源代码网推荐  二、数据层类:
源代码网推荐  
源代码网推荐   四个:QuickItem、QuickItemCollection、UserInfo、UserInfoCollection
源代码网推荐  
源代码网推荐   一点说明:
源代码网推荐  
源代码网推荐  1、 QuicItem:对条目信息进行处理的类,包含四种方法,即对数据的添、删、改、读。
源代码网推荐  
源代码网推荐  2、 QuickItemCollection:这是个查询类,根据一定条件读取条目的集合。
源代码网推荐  
源代码网推荐  3、 UserInfo:对用户信息进行处理的类,包含四种方法,即对数据的添、删、改、读。
源代码网推荐  
源代码网推荐  4、 UserInfoCollection:这是个查询类,根据一定条件读取用户信息的集合。
源代码网推荐  
源代码网推荐  三、表示层调用处理:
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  //取得个人选中项目的信息
源代码网推荐  
源代码网推荐  UserInfo ui = new UserInfo();
源代码网推荐  
源代码网推荐  ui.ID=1;
源代码网推荐  
源代码网推荐  ui.GetInfoByID();
源代码网推荐  
源代码网推荐  int itemRecord=ui.ItemRecord;
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  //取得所有项目的ID数组
源代码网推荐  
源代码网推荐  QuickItemCollection qic = new QuickItemCollection();
源代码网推荐  
源代码网推荐  qic.GetAllInfo();
源代码网推荐  
源代码网推荐  int qicCount=qic.Count;
源代码网推荐  
源代码网推荐  string itemIDArrayString=null;
源代码网推荐  
源代码网推荐  for(int i=0;i
源代码网推荐  
源代码网推荐  {
源代码网推荐  
源代码网推荐   itemIDArrayString+=","+qic[i].ID;
源代码网推荐  
源代码网推荐  }
源代码网推荐  
源代码网推荐  itemIDArrayString=itemIDArrayString.Substring(1,itemIDArrayString.Length-1);
源代码网推荐  
源代码网推荐  char[] dot = new char[]{","};
源代码网推荐  
源代码网推荐  string[] itemIDArray = itemIDArrayString.Split(dot);
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  //调用方法返回选中的项目的ID数组
源代码网推荐  
源代码网推荐  string [] selectItemArray=SelectItemArray(itemIDArray,itemRecord);
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  一点说明:上面这段代码就是读取条目信息和个人设置进行相应的处理的,SelectItemArray是个私有方法,代码如下:
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  #region 取得选中项目记录集
源代码网推荐  
源代码网推荐  ///
源代码网推荐  
源代码网推荐  /// 取得选中项目记录集
源代码网推荐  
源代码网推荐  ///
源代码网推荐  
源代码网推荐  /// 所有项目记录集
源代码网推荐  
源代码网推荐  /// 项目选择信息
源代码网推荐  
源代码网推荐  /// 选中项目记录集
源代码网推荐  
源代码网推荐  private string[] SelectItemArray(string[] tempItemIDarray,int tempItemRecord)
源代码网推荐  
源代码网推荐  {
源代码网推荐  
源代码网推荐   //项目的ID数组元素个数
源代码网推荐  
源代码网推荐   int itemIDarrayCount=tempItemIDarray.Length;
源代码网推荐  
源代码网推荐   //将整形记录转化成二进制
源代码网推荐  
源代码网推荐   string itemRecordString = Convert.ToString(tempItemRecord,2);
源代码网推荐  
源代码网推荐   //存储的选择信息位个数
源代码网推荐  
源代码网推荐   int itemRecordStringCount=itemRecordString.Length;
源代码网推荐  
源代码网推荐   //需要补0的个数
源代码网推荐  
源代码网推荐   int addZeroCount=itemIDarrayCount-itemRecordStringCount;
源代码网推荐  
源代码网推荐   //开始往高位补0
源代码网推荐  
源代码网推荐   for(int i=0;i
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   itemRecordString="0"+itemRecordString;
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐   //选中ID字符串
源代码网推荐  
源代码网推荐   string selectItemString=null;
源代码网推荐  
源代码网推荐   //开始匹配选中项
源代码网推荐  
源代码网推荐   int count=itemRecordString.Length;
源代码网推荐  
源代码网推荐   for(int j=0;j
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   if(Int32.Parse(itemRecordString.Substring(j,1))==1)
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   selectItemString+=","+tempItemIDarray[j];
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   //剃除第一个","
源代码网推荐  
源代码网推荐   selectItemString=selectItemString.Substring(1,selectItemString.Length-1);
源代码网推荐  
源代码网推荐   char[] dot = new char[]{","};
源代码网推荐  
源代码网推荐   //返回选中的项目ID数组
源代码网推荐  
源代码网推荐   return selectItemString.Split(dot);
源代码网推荐  
源代码网推荐  }
源代码网推荐  
源代码网推荐  #endregion
源代码网推荐  
源代码网推荐  一点说明:
源代码网推荐  
源代码网推荐  如果你还没有看明白上面的代码,那么现在就看我来解释给你听。这里的方案其实是利用了二进制数据位的“0”“1”来标识是否选中某条目的,如果选中即为“1”,每一个条目都对应一个二进制位,如果Item中有五条数据,那么全是“11111”,这样的二进制数据,如果我们想选中第一条、第二条和第五条数据,那么对应的二进制代码表示为“10101”,然后我们把这个二进制数据转化成十进制数据就是:16+0+4+0+1=21,如此种种我们可以通过转换记录各种组合的记录。这里要注意的是新增条目的问题,如果现在条目变成了七条怎么办?不用担心,变成了七条,那么就有七个位“1111111”,那么这个时候我原来的选中三条数据是不要变化的,这增加的两个位是增加在高位上的,即现在的存储表示变成了“0010101”,就是:0+0+16+0+4+0+1=21,数值是没有变化的。一般情况下我们是添加条目,很少有减少条目的情况,如果要减少条目,肯定要另外写程序来重置ItemRecord的值的。
源代码网推荐  
源代码网推荐  那么用户重新选择条目后,如何重置ItemRecord值呢?下面听我慢慢道来,像这种多选的条目一般都会由CheckBoxList绑定出来进行选择操作的,我们也就是对这个对象的元素选中情况进行处理,代码片段如下:
源代码网推荐  
源代码网推荐  int itemCount=CheckBoxList_Item.Items.Count;
源代码网推荐  
源代码网推荐  for(int i=0;i
源代码网推荐  
源代码网推荐  {
源代码网推荐  
源代码网推荐   if(CheckBoxList_Item.Items[i].Selected)
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   itemSelect=itemSelect+"1";
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐   else
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   itemSelect=itemSelect+"0";
源代码网推荐  
源代码网推荐   }
源代码网推荐  
源代码网推荐  }
源代码网推荐  
源代码网推荐  int itemRecord=Convert.ToInt32(itemSelect, 2);
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  一点说明:首先获得条目的个数,然后做循环,判断是否选中,如果选中则相应的位值为“1”,否则为“0”,组合出来二进制字符串然后再进行个进制转换,然后再入库就一切搞定了。
源代码网推荐  
源代码网推荐  是不是很方便呢?不仅方便这种存储效率是非常高的,如果你有几百个条目要选择,这种方案便是一个不错的选择,不过,你如果真搞几百个条目让别人选,除非是被逼无奈的应付考试,否则一定会遭遇强烈的鄙视的,谁有耐心去做这个选择嘛,哈哈!
源代码网推荐  
源代码网推荐   不要急,再给一个提醒看看,千万不要把顺序搞错了,绑定CheckBoxList的时候,按照DESC的顺序来绑定元素列表,不然,吼吼……
源代码网推荐  
源代码网推荐   本篇没有提供完整代码,如果需要完整代码或者技术探讨的机会,可以通过下面的联系方式找偶,MSN:yubo@x263.net,拒绝闲聊。
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华