随笔 - 27  文章 - 4 评论 - 46 trackbacks - 0
<2006年6月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678


与我联系

搜索

 

常用链接

留言簿(2)

我参与的团队

随笔分类

随笔档案

文章分类

文章档案

收藏夹

技术站点

日常站点

设计站点

最新评论

阅读排行榜

评论排行榜

  现在在公司的一个项目中使用到AtlasToolkit中的CacadingDropDown,有一些需要有多选框(即Asp.Net服务器控件中的ListBox,HTML代码中的<select multiple="true"></select>),但是CascadingDropDown并不支持多选,全部是单选. 经过一翻研究和尝试之后,终于给它增加了多选的功能,于是就有了这篇文章.

  AtlasToolkit中的控件由几个部分组成

  •   Bihavior:这是一个客户端Js文件,定义了控件在客户端的行为,应该是AtlasTookit控件的核心部分
  •   Extender:这是控件的服务端支持,用于支持控件的服务端操作
  •   Properties:这是服务端配置类
  •   Designer:设计时支持

 在开始之前,先看看效果(注意最下一行字,这就是多选的结果),

要改造CascadingDropDown,就要拿这几个部分分别开刀.现在一步一步来.

第一步,使它在服务端支持ListBox

  虽然多选框跟单选下拉框在客户端都是Select,但在服务端却是两个不同的控件.CascadingDropDown本身只支持DropDownList

public class CascadingDropDown : ExtenderControlBase<CascadingDropDownProperties, DropDownList>

  上面是Extender文件中CascadingDropDown的声明,它继承自ExtenderControlBase,注意红色部分,因为这里的声明使它仅仅支持DropDownList,现在我们要把它改成ListControl,这样就可以同时支持ListBox和DropDownList了,因为这两个都继承自ListControl.

除了这里,Properties和Designer中的相应的泛型声明都要改成ListControl.

  以上做的是在接口上支持ListBox,现在要使它在行为上支持ListBox.这个只需要改Extender一个文件就可以了.

 

protected override void OnLoad(EventArgs e)
{
 base.OnLoad(e);
 foreach (CascadingDropDownProperties cascadingDropDownProperties in TargetProperties)
 {
  ListControl ctrl = (ListControl)FindControlHelper(cascadingDropDownProperties.TargetControlID);
  if (ctrl is DropDownList)
  {
   DropDownList dropDownList = ctrl as DropDownList;
   dropDownList.Items.Clear();
   dropDownList.Items.Add(cascadingDropDownProperties.ClientState);
  }
  else if (ctrl is ListBox)
  {
   ListBox listBox = ctrl as ListBox;
   listBox.Items.Clear();
   if (cascadingDropDownProperties.ClientState == null)
    return;
   foreach (string item in cascadingDropDownProperties.ClientState.Split(','))
   {
    listBox.Items.Add(item);
   }
  }
 }
}

protected override void OnPreRender(EventArgs e)
{

 foreach (CascadingDropDownProperties cascadingDropDownProperties in TargetProperties)
 {
  ListControl ctrl = (ListControl)FindControlHelper(cascadingDropDownProperties.TargetControlID);
  if (ctrl is DropDownList)
  {
   DropDownList dropDownList = ctrl as DropDownList;
   dropDownList.Items.Clear();
  }
  else if (ctrl is ListBox)
  {
   ListBox listBox = ctrl as ListBox;
   listBox.Items.Clear();
  }
 }

 base.OnPreRender(e);
}

  好了,上面就是改变服务端的,使之确实地支持ListBox,到这里服务端就修改完成了.

第二步,修改Behavior,以下的修改后的Behavior文件中的set_SelectedValue, 只需要修改这个地方就可以了.

 

this.set_SelectedValue = function(value) {

if( this.control != null && this.control.element != null && this.control.element.multiple )
{
  var e = this.control.element;
  //是多选框,即ListBox
  _selectedValue = new Array();
  for( var i = 0; i < e.options.length; ++i )
  {
   if( e.options[i].selected )
     _selectedValue[ _selectedValue.length ] = e.options[i].value;
  }
  AtlasControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ _selectedValue.toString() ]);
}
else
{
  _selectedValue = value;
  AtlasControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ _selectedValue ]);
}
}

  好了,编译,控件的发行就完成了.接下来说使用.

  第一步:把ASPX文件中的DropDownList改成ListBox,并且加上SelectMode="Multiple"

  第二步:使用类似以下的代码来取值

 

foreach (ListItem item in DropDownList3.Items)
{
//if (item.Selected)
color += RemoveValueText(item.Value) + ","
}

  注意,我把红字部分,这一行是不需要的,因为传回来的所有Item都是被选中的,没有被选中的项并没有被传回来.

posted @ 2006-08-26 11:28 Lupin 阅读(1474) | 评论 (6)编辑

tags: , , , ,

  昨天才知道有ActionPack这个东西,据介绍说很多概念是从Ruby On Rails来的,但我对Ruby On Rails没有了解,所以也不知道是怎样,但我知道ActionPack真是是相当强的东西,即使它现在还不是足够的强大,但是经过发展,必然大有作为.

  闲话少说,到底ActionPack是个什么东西呢.说白了,它就是一个代码生成器,帮你生成访问数据库的代码. 但跟一般的代码生成器又有不同,ActionPack生成的代码并不存储在文件系统中,而是直接被编译在内存中,连Dll文件都没有.

  它是怎么做到这些的呢?

  最核心的就是BuildProvider了,它使用了Framework中的BuildProvider,在在生成的时候动态编译代码.这被编译的这些代码就是根据数据库中的表来生成的.而要让它做到这些,你只需要在配置文件中配置数据库连接字符串就可以了.

  以上是感性的认识,接下来看看它的结构.

  首先是一个BuildProvider,它继承自System.Web.Compilation.BuilderProvider,只要在Web.Config文件中配置,就可以让它在生成的时候直接运行里面的GenerateCode方法,跟HttpHandler有点类似.这是触发点.

  然后是CodeGeneration,看名字就明白了,它用来生成代码.

  然后是SchemaService,这个是用来读取数据库中的表信息的

  TableSchema,存放表信息,在进行代码生成的时候使用到.

  上面这几个,是ActionPack实现机制的主要部分.接下来的是一些配置和数据库访问的东西

  ActionPackConfig,ActionPackConfigurationSetting,这两个是读取配置文件的,比较简单.

  DBHelper和Query这两个是数据库操作的

  ActiveList,ActiveRecord,这两上是Entry的模板类.在这里封装DBHelper和Query中的操作,使用这两个模板类,使生成的代码变得十分简单.否则,生成代码的工作将变得十分繁琐.

ActionPack的结构就这样了,有空再继续深入剖析.

posted @ 2006-08-26 11:14 Lupin 阅读(181) | 评论 (1)编辑

This is a temporary post that was not deleted. Please delete this manually. (9c0ca929-af61-409a-ad8d-894d59464837)

posted @ 2006-08-14 21:11 Lupin 阅读(81) | 评论 (0)编辑
        发简历到这里,一方面想看看有没有朋友能给我提供暑假期间的实习。另一方面也想请大家指点一下,我这份简历有什么不足之处,应如何改进。谢谢!基于安全考虑,把手机号码和地址隐藏了。有实习工作推荐的话可以发邮件或者回复。PS:CSS乱了,有点乱,不好意思。
林XX (男 23岁)

  • 网络工程
  • 广东工业大学
  • hillywolf@gmail.com
  • xxxxxxx4747
  • 020-3932xxxx
  • 广州大学城广东工业大学
  • 1984年11月
  • 党员
林XX

 个人概述

Dos时代接触电脑, 99年接触网络,01年接触编程,03年开始进行实际项目开发。不同程度掌握多种编程语言(C#,C/ C++, Java, Perl),具有大多同龄人没有的多个实际项目经验。在实际项目开发过程锻炼了程序开发能力,学习了UML,设计模式,单元测试等相关知识。

能使用Java 和 .Net 多个流行框架(如:Hibernate, Luence, Structs, Enterprise Library)等,并曾对其中部分的运行机制进行研究。从中学习到各种高效的设计方式,和优雅的编程习惯

通过对专业课的学习,对计算机各层次原理有一定了解,有助于对高级语言更深地理解。

对计算机有浓厚兴趣和高度热情,乐于学习应用新知识。热爱工作,以成就感为最大的快乐源泉

 求职意向

希望能从事软件开发方面的工作。凭着几年的开发经验,可以从事C#,C/C++,Java方面的开发工作,尤其对C/C++的开发感兴趣!

 主要项目经验

  • 炽点搜索引擎优化系统(Asp.Net) 2005年4月-2006年6月

    使用Visual Studio.Net开发,基于.Net 1.1,使用MSSQL数据库

    一个用于网站访问统计的Web应用程序,除了一般的访问统计功能之外,它还具有追踪网站在被搜索引擎收录情况及排名,PageRank等变化的功能。还提供多种查看统计数据的方式,使用者可以方便的利用它所展示的数据对网站流量,搜索引擎优化情况进行分析。

    负责系统设计和编码工作

    使用Asp.Net1.1开发,大量使用了缓存技术

    由于数据显示方式多,使数据表之间的耦合度较大,要进行大量的连接运行,而且数据量巨大,对数据库性能要求比较高。写出合适的SQL语句是最困难的工作。

    后来得知这是一个数据仓库与商业智能的典型应用。这类应用的特点就是必须以空间换取效率。在该项目的数据库设计中,我适当了增加了数据冗余来减少数据表外部连接数量,以及降低SQL语句的复杂程度。

  • 塔内网络管理系统(Asp.Net) 2005年7月-2006年2月

    这是一个类似的OA的在线Web应用系统,包括人事管理,产品管理,业务管理三个主要模块。

    参与需求分析,系统设计和编码工作,跟踪管理整个项目。

    基于Enterprise Library,使用asp.net1.1进行开发。使用了UML来辅助需求调研和系统设计。

    这 个项目中最大的难点是权限的控制。它不仅要求有功能的控制,还要求信息的控制。比如:主管具有审核注册成员的权限,而普通成员没有,这是功能控制;主管可 以查看本学校的所有业务信息,而普通成员只能查看自己的业务信息,区域主管可以查看本区域的业务信息。更困难的需求是,这一切都必须是可设置的,不能硬编 码。比如:可以在后台添加一个叫“主管”的角色,添加之后,可以修改该主管查看业务信息的范围,可以是区域级,学校级,或是仅仅查看自己的业务信息。因此 这个权限系统的设置必须十分细化。

    在这个项目中使我收获最大的就是权限管理部分的设计。以下我的设计的概述。如下图,其中“范围”用于信息控制,“权限”用于功能控制,一个“权限项”对应一个功能。一个人员可以被任命为多个角色,同样的角色又可指定不同的范围,实现信息控制的需要。

  • vClass班级管理系统(Asp.Net) 2006年4月-2006年4月

    一个面向班级的在线管理系统。类似于多班级的班级同学录,但功能更偏向于就读期间而非毕业之后,比如有作业发布,在线调查等功能。

    完成除了界面设计之外的全部工作

    使用asp.net1.1,基于Hibernate ORM框架开发,使用了许多现成组件,用以加快开发速度。

    在需求上,这个项目并没有什么难点。它最大的难点在于时间要求非常紧,必须尽一切可能加快开发速度,同时又要保证质量

    更深刻地理解了敏捷开发的思想。

 教育背景

广东工业大学 2003年9月-2007年7月

网络工程 本科

C++程序设计,数据结构(c),操作系统原理,计算机系统结构,计算机接口,计算机组成原理,单片机基础,计算机网络,面向对象的思考过程,数据库系统原理及应用,线性代数,高等数学,离散数学,概率论与数理统计

 在校信息

获奖记录
  • 2004年2月 优秀学生干部
  • 2004年5月 校社联周年庆积极分子
  • 2004年12月 校网页设计大赛第二名
社会活动
  • 曾任班长、校学生会科技实践部副部长
  • 曾参与组织校园活动多次
  • 曾任塔内网络科技有限公司广工业务主管

 语言能力

普通话 惯用

广州话 能听/发音不准

英语四级 通过

英语六级 442分

posted @ 2006-06-09 17:28 Lupin 阅读(1988) | 评论 (6)编辑
    刚刚在看Google Analytics,发现有从Google黑板报过来的访问者,于是就过去看看是哪个页面链过来的。 让我发现Google Toolbar4发布了的消息。于是赶紧下下来试用了一下,发现增加了网页翻译的功能,还把书签BloggerGmail的部分功能整合进来了。
    可惜,没把NotebookCalendar也整合进来。最好能添加像MSN Toolbar那样的标签栏功能,那就比赛完美了。
posted @ 2006-06-03 02:12 Lupin 阅读(123) | 评论 (0)编辑