开心单人行:介绍MIX06.com

在Soapbox.msn.com上注册了一个帐号,开心也没有什么表演才能,不过经常讲Web cast,所以可以利用这个东东讲讲开心想讲而没有机会讲的东西,也就是当一次播客了。以前在MSDN Webcast上开了一个《开心三人行》系列,由我、鞠海洋、王晴三人共同来主持,不过由于工作原因,三人很难聚在一起,所以这个系列逐渐消失了。现在开心准备单人行了。

录制于2006年10月12日凌晨录制于青岛海景花园酒店(台湾同胞请注意,在大陆酒店就是饭店的意思)

Video: 开心播报

在 ASP.NET 上实现锁定表头、支持滚动的表格的做法

首先看看 CodeProject 上的两个东西

1、The Freeze Pane DataGridhttp://www.codeproject.com/aspnet/FreezePaneDatagrid.asp

利用文章中提到做法及代码,可以实现在 ASP.NET 1.1 上的、支持横向滚动与纵向滚动的表格,基本上是使用 CSS 实现的,比较简单。

在 ASP.NET 2.0 上,由于文档 HTML DOCKTYPE 发生了变化(HTML->XHTML),所以在使用原文中的横向滚动条会出现问题,但是使用纵向滚动条和锁定表头没有问题。

这种做法没有考虑页面 PostBack 时记录表格的滚动位置,使得用户不得不重新去寻找刚才选中/编辑的那条记录,这比较的不人性化。

2、ScrollingGrid: A cross-browser freeze-header two-way scrolling DataGridhttp://www.codeproject.com/aspnet/ScrollingGrid.asp

此文章利用 Panel 控件和 DataGrid 控件实现了 ASP.NET 1.1 下的完整的、可实现双向滚动、表头锁定的表格,而且它实现了可以记录表格的滚动位置,页面 PostBack 后,表格仍能自动滚动到原有位置。这个控件的一个最大优点是能够适应多种浏览器,如 Internet Explorer 、FireFox 等。

在 ASP.NET 平台上,由于 DataGrid 控件已经升级为 GridView ,所以此控件已不能使用,按照文章下面的讨论,作者声称会尽快升级控件,但似乎在实现时碰到一些麻烦(如何确实表头各列的宽度),目前还没有结果。

目前我的做法:

  1. 参照文章1中提到的作法,利用 CSS 来实现锁定表头的功能
  2. 利用 Panel 控件,设置 ScrollBar 为 Vertical,再在其中放入 GridView 控件 ,可以实现竖向滚动条的功能
  3. 利用 Atlas ,将上述 Panel 再放入 UpdatePanel ,以透明实现保持滚动条位置的功能

示例代码:

<h1>滚动条表格演示h1> <style type="text/css">...... th {...}{...}{...}{ border-right: 1px solid silver; position:relative; top: expression(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.scrollTop-2); /**//**//**//*IE5+ only*/ } style> <atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True"> atlas:ScriptManager> <br /> <asp:Panel ID="GridPanel" runat="server" Height="250px" ScrollBars="Auto" Width="562px"> <atlas:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" SkinID="GridView" Width="434px"> </asp:GridView> </ContentTemplate> </atlas:UpdatePanel> </asp:Panel>

这样能基本上实现一个能够锁定表头、竖向滚动、能够在页面PostBack时保持滚动位置的表格,能够满足大部分应用需要。

几种常见的 ASP.NET 平台上表格控件的简单评价

由于这次试用它们的目的主要是寻找一种能够简单实现滚动条的表格控件,所以关注重点也在这个方面,其他方面没有过多涉及。

1. Developer Express ASPxGrid

  1) 程序本身有 Bug ,有乱码现象
  2) 代码量很大
  3) 不能创建 DataSource ,但可以绑定已经建好的 DataSource
  4) Scroll 动作需要 Postback 到服务器上,较慢,横向的无须 CallBack
  5) 代码量较大,尤其是处理数据更新时(例子有 600 行代码)
  6) 不支持自动格式,在 UI 定制方面工作量较大
  7) 过于臃肿,更象是一个 WinForm 而非 WebForm 的控件

  价格: 1 Developer License  $265
  网站: www.devexpress.com

2. ComponetOne WebGrid

   1) 和 GridView 比较接近
   2) 有专用界面来定义列
   3) 可以横向或纵向滚动,但要求将 Grid 的大小(宽度和高度)设置为绝对值,不能设为百分比
   4) 可以设置模板
   5) 必须设置列宽,不便于自动调整

   价格: $999.99  Componet Studio Enterprise
   网站: www.componentone.com

3. ComponentArt Grid

   1) 不带设计器,所有属性和事件都需要手动设置,无法在 GUI 下设计
   2) 大多数效果都是以代码实现的
   3) 启用滚动条的方式比较复杂,如需要设置 Scrollbar 的宽度,图像等

   价格: 1 Developer License 799$ (共 13 个控件)
   网站: www.componentart.com

4. Telerik Grid

   1) 内置 AJAX Framework,有可能和 Atlas 冲突
   2) 可以方便地设置 Scroll
   3) 支持的绑定控件比较丰富,直接支持 普通/Button/Checkbox/DropDown/HyperLink 等
   4) 支持 Theme
   5) 与普通的 GridView 的对象模型不太一致,需要重新学习其使用方法

   价格: 1 Developer License $399 (17个控件)
   网站: http://www.telerik.com

———————————-

这次比较令人意外的是,ComponentArt 的 Grid 控件没有 DesignTime 的 UI 支持,远远不如 ASP.NET 的 GridView 使用起来方便。

LAMP? WISA+GRACE!

今天早上在家早餐时,与平常一样,看中央电视台的“马斌读报”栏目,其中有一条新闻是《马来西亚规范语言,滥用语言者将罚款》,马斌评曰:要搁咱这儿,那些跨国公司、IT企业的白领非罚得倾家荡产不可。我与太太看后忍俊不已,心想,如果真实施,微软员工可能真的都会在不长的时间内全都要倾家荡产了。

今年去台湾开会的时候,学了一个新词,就是LOVE,不是“爱”的意思,而是指微软今年即将发布的四款新产品,Live Platform、Office System 2007、Windows Vista以及Exchange 2007。是不是感觉挺标新立异的呀?

其实IT界使用缩略语是见怪不怪的,我相信圈里人都可以在五分钟之内列举出来十个以下的缩略语。而LAMP对于我们搞网站的人员来说,更是如雷贯耳了。所谓的LAMP,就是指Open Source的Linux+Apache+MySql+PHP(请注意,这其中并没有Java,因为截止到目前为止,Sun的Java实现还不是开源的)。我不想讨论LAMP与微软解决方案的是是非非,因为无论我如何说,都会带起一场论战。君不见,无论国内以及国外,只要一谈及此事,都会异常火爆,对发起者、辩论者、旁观者都是耗时耗力之活儿,而且陷入到细节中的,谩骂以及攻讦也会随之而来,实在是天下第一无聊之事也。

我想说的还是缩略词,有LAMP,现在又有WISA。什么是WISA呢?去网络上搜一下(1,2,3),突然发现,我是互联网上提出此定义的第一人。注意定语为“互联网上”,因为在现实中,我老板当然比我早,是他首先写在他Office的白板上的,他的定义为WISA=Windows+IIS+SQL Server+ASP.NET。出于对仗工整,我也不敢有异议。

I LOVE WISA!But WISA is not enough. 对于Web 1.0来说,网站的技术决策人员所关心的无非如下:

  1. 使用广度:使用的人越多,则越好招人,越好招人,人力资本越低,又可以省下下大笔来做广告或者其它的事情了。
  2. 快速开发:在越短的时间内开发出来产品,对于公司来说也是一个非常好的缩减时间成本的地方,尤其在做C2C(Copy To China)业务的时候,抢占先机非常重要;
  3. 维护成本:网站在开发完上线后,其维护成本如何?所选用的技术更新换代时,向前兼容性如何?这些也是网站技术决策人员所关心的。如果“代沟”太大,或者被其主人轻易抛弃,都可能会影响技术选型的决策。

当然,还有性能问题等因素,不过性能问题无论是LAMP还是WISA,大部分都出现在设计阶段。而且性能问题也与带宽、网络拓扑、数据库设计、网络互通等有关系,所以在我这儿就不列为因素了。

以上这些因素,无论WISA还是LAMP,均可胜任,剩下的就看大家的需求了!

除此之外,在Web 2.0时代,我们提出了Web 2.0的三项基本原则,即开放、分享、平台。TechED 2006的课程当中,我也介绍了相对于这些原则所对应的微软技术,即:

So,我自己的独一无二的缩略语定义也出来了,在Web 2.0时代,微软的技术方案应该是GRACE,而GRACE就是Gadgets+RSS+Atlas+CardSpace+Expression。

I love WISA and GRACE。

呵呵,政府不会罚我款吧?

我们需要什么样的培训

开心经常在各种活动中担任讲师,有时候会经常碰到一些熟悉的朋友,基本上是逢会必参加。无论在什么地方都可以见到,可能就是俗话说的“会虫”吧,当然,我没有任何对这些朋友的不敬。当然,讲课讲多了之后,我也收到很多大家的反馈,比如在TechED上有人就告诉我,听完课后,对这个技术还是不太了解云云。

我不知道大家是如何看待这个问题的。对于TechED这样的活动,我在加入MS之前,都是抱着交朋识友、朋友聚会以及了解微软未来技术方向去参加的。因为通过60分钟或者75分钟的课程,一个讲师很难把一个技术的方方面面讲清楚。不知道各位是否有这种感觉。所以我认为来TechED听课,应该抱着来感觉微软未来的技术方向,并且借此机会认识一下业界的朋友,毕竟天南海北的朋友一年见次面也不容易。

那么我们需要什么样的培训呢?我个人把所有的培训形式罗列了一下:

1. 大型峰会:微软的TechED,英特尔的IDF均是属于这种情况。各厂商的峰会均是总结厂商的过去的进展,分享该公司未来的发展。通过这种峰会,可以得到厂商Overview层次的技术方向。

2. 深度式培训:类似于我去年做过的TechReady(1, 2,评论)以及其它同事所做的Workshop,均是此种培训,通过此种活动,可以非常专注的就某一专题得到相关的学习,但一般来说,这种培训均是需要收费的。另外,很多的CTEC(微软认证培训中心)或者相应的其它厂商的培训中心也提供类似的培训,但培训效果有些参差不齐,所以需要认真选择。

3. On-site培训:有些公司会投入一些资金来邀请一些讲师到公司来进行讲授。我个人认为这种培训会非常有效果。因为在培训之前,讲师一般会进行课前准备,就实际情况选择内容,并且会认真准备Q&A的内容,从而达到因材施教的效果。

4. 产品推广会:厂商的产品发布大会或者路演活动均属于此类,通过这种培训可以了解某一产品的基本特性。但同样也不适合深度学习。

5. Tech Talk: 有些公司会在每周或者每月组织公司内部的技术人员,进行技术探讨。这种内部交流我个人认为效果会非常好,讨论的问题均是单位内部最显著的问题,但如果没有人认真准备,勇于担当主讲,此类活动容易流于形式,最终不了了之。

应该还有其它的培训形式,欢迎大家补充。所以在选择各种培训活动的时候,大家应该事先了解这种培训的目的,对活动形式、活动内容均需要了解,然后再根据个人的实际情况决定是否参加。