﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-逆水行船</title><link>http://www.cnblogs.com/admin11/</link><description>别人的天堂，是我的异乡；无端的繁华，倍添我的惆怅</description><language>zh-cn</language><lastBuildDate>Wed, 20 Aug 2008 16:40:06 GMT</lastBuildDate><pubDate>Wed, 20 Aug 2008 16:40:06 GMT</pubDate><ttl>60</ttl><item><title>如何设计类</title><link>http://www.cnblogs.com/admin11/archive/2008/08/08/1263868.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Fri, 08 Aug 2008 08:36:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/08/08/1263868.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1263868.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/08/08/1263868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1263868.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1263868.html</trackback:ping><description><![CDATA[在工作中，我们经常用到类，怎么写好类呢？这个问题我思考了很久。<BR><BR>如果想写好类，最好是站在类的使用者的角度上来看待类。我们既是类的实现者，也是类的使用者，所以这应该不难。<BR><BR>类有这样几个使用者：<BR>1：类的调用者<BR>2：类的维护者<BR>3：类的阅读者<BR><BR>站在这些使用者的角度上看，什么样的类是好的类呢？<BR>1：低扇入：调用的其他类很少<BR>&nbsp; 如果类调用的其他类越少，使用起来越方便，以为不用担心会受到其他类的影响。<BR>而且如果哪一天我们想把该类拷贝到其他地方用时，也不用再继续拷贝其他类才能使当前类运转起来。<BR>3：接口简洁<BR>一个类，提供的外部可见成员越少越好。一个有3个函数的类和一个有30个函数类给人的感觉就不一样，让人觉得有3个函数的类简单，好用，有30个函数的则相反。<BR>2：封装好：<BR>把private函数写成public类型的，会增加函数的数量。<BR><BR>4：函数参数少<BR>一个函数有5，6个参数，用的时候需要照顾参数的顺序，理解每个参数的含义，让人觉得这个函数很麻烦，很容易就把参数的顺序搞错了，或把第n个参数的含义和第n+1个函数的意义给搞混了。<BR><BR>5：参数多的函数，对参数进行结构化<BR>如果某个函数有多余6个的参数，则最好把它写成结构。例如调用某添加函数，拿职工来说吧，有部门、性别，姓名，工号...，在某个函数中，把这些信息用参数传进去很麻烦，但是把这些信息写成一个职工对象，添加的时候，传一个职工对象进去，则就方便多了，看起来也清爽啊，不会弄混参数的顺序和参数的含义。<BR><BR>6：函数的调用与调用顺序无关。<BR>在调用函数A之前，必须调用函数B，在调用函数B之前，必须调用函数C，这是不是很让人郁闷啊。<BR>命名调用函数A，就必须知道B，C是干什么的。让人觉得不爽。<BR><BR>7：注释明白，完整<BR>如果我是个看代码的，我觉得一行行看代码很累，往往要阅读很多的代码，才知道这个类，这个函数是干什么的，他们之间是如何跳转的。他们所隐含的含义往往需要猜测。<BR>为了看代码人着想，我们在每个类的头部，大体描述一下我们怎么想的，怎么构思的这个类。<BR>给每个变量，函数添加上正确的注释，是一件有功德的事情。<BR><BR>8：高扇出：将会被用在很多地方<BR>写同一段代码，使用的次数，地方越多，越有成就感。<BR>需要修改时，只修改这一个地方，就能对很多地方产生影响，多爽啊。<BR><img src ="http://www.cnblogs.com/admin11/aggbug/1263868.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41802/" target="_blank">[新闻]微软Office 14即将展开Alpha测试</a>]]></description></item><item><title>我的编码规范</title><link>http://www.cnblogs.com/admin11/archive/2008/08/08/1263701.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Fri, 08 Aug 2008 05:44:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/08/08/1263701.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1263701.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/08/08/1263701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1263701.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1263701.html</trackback:ping><description><![CDATA[1： 关于类成员的书写：<BR>在函数中，如果应用到了类成员（包括变量，属性，函数），一律需要加上this来表示其属于类成员，以区别于局部变量。<BR><BR>2：关于静态成员的书写<BR>在行数中，如果应用到静态成员，不管当前类的静态成员还是且他类的静态成员，前面一律添加上类名，以区别于类成员。<BR><BR>3：关于全局成员的书写：<BR>在C++中，如果应用到全局成员，一律应该在前面添加“::”，以显示其全局性。<BR><BR>4：编写类的时候，静态变量，方法，事件要放在类前边【放在类成员之前】，这样可以使类的结构更加明确。<BR><BR>5：类的变量应该放在方法与属性之前，这样可以使类的结构更加明确。<img src ="http://www.cnblogs.com/admin11/aggbug/1263701.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41802/" target="_blank">[新闻]微软Office 14即将展开Alpha测试</a>]]></description></item><item><title>礼平 《含风殿》 端的是好文章，找了好久找到的</title><link>http://www.cnblogs.com/admin11/archive/2008/08/06/1261925.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Wed, 06 Aug 2008 05:17:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/08/06/1261925.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1261925.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/08/06/1261925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1261925.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1261925.html</trackback:ping><description><![CDATA[摘要: 查看完整版本: [-- 电影剧本《含风殿》（1997年第6期的《十月》，作者礼平） --]凤舞大唐——贞观帝后论坛 -&gt; 【梦笔生花】 -&gt; 电影剧本《含风殿》（1997年第6期的《十月》，作者礼平） [打印本页] 登录 -&gt; 注册 -&gt; 回复主题 -&gt; 发表主题江霏雨2008-01-04 00:07^E6^bi 片头 :k%@*bmp 银灰的天空。白得耀&nbsp;&nbsp;<a href='http://www.cnblogs.com/admin11/archive/2008/08/06/1261925.html'>阅读全文</a><img src ="http://www.cnblogs.com/admin11/aggbug/1261925.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41801/" target="_blank">[新闻]《星际争霸2》新图</a>]]></description></item><item><title>扩展TextBox控件</title><link>http://www.cnblogs.com/admin11/archive/2008/08/04/1259577.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Mon, 04 Aug 2008 01:21:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/08/04/1259577.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1259577.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/08/04/1259577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1259577.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1259577.html</trackback:ping><description><![CDATA[<DIV class=cnblogs_code><SPAN style="COLOR: #000000"></SPAN>&nbsp;</DIV>在做B/S开发中，大家经常用到TextBox控件，而且经常需要对输入其中的数据进行合法性检查。<BR>这种检查可以通过多种方式来实现。我喜欢用Javascript来检查。<BR>但是，每一个控件都要用一段Javascript代码来检查，太麻烦，可以不可以来一下抽象呢？<BR>我希望通过扩展TextBox来实现该控件数据合法性JavaSript的抽象。<BR>思路：<BR>1：扩展TextBox控件：<BR>&nbsp; public class TextBoxEx : TextBox<BR>2：添加属性<BR>在类TextBoxEx中添加如下属性：<BR>输入的数据类型，有int，double/float/decimal,是否允许为空，最大长度,最小长度。<BR>下面是代码：<BR>
<DIV class=cnblogs_code><SPAN style="COLOR: #000000">[Bindable(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Category(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">是否必填</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultValue(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">false</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">是否必填</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">bool</SPAN><SPAN style="COLOR: #000000">&nbsp;IsNotNull;<BR><BR>&nbsp;[Bindable(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Category(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">数据类型</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultValue(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">string</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">数据类型</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;TypeName;<BR><BR>&nbsp;&nbsp;&nbsp;[Bindable(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Category(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">最小长度</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultValue(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">0</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">最小长度</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;MinValueLength;<BR>&nbsp;[Bindable(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Category(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">最大长度</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultValue(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">0</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">最大长度</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;MaxValueLength;<BR><BR>其实还可以扩展更多的属性，例如是否是邮件，是否是电话号码等。</SPAN></DIV>
<DIV class=cnblogs_code><SPAN style="COLOR: #000000">3：重写Render：<BR>1）判断控件的类型：<BR>2）根据不同的控件类型和属性生成相应的Javascript方法。</SPAN></DIV><SPAN style="COLOR: #000000">
<DIV class=cnblogs_code><BR>以数据类型为string，不可以为空 ，最大长度为20来举例：</DIV>
<DIV class=cnblogs_code>C#<BR></DIV>
<DIV class=cnblogs_code><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.TypeName.ToLower().Equals(</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">string</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;js&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">IsStringForControl(this,'姓名',</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">.MaxValueLength&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">,</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;isNull&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #800000">)</SPAN><SPAN style="COLOR: #800000">"</SPAN><SPAN style="COLOR: #000000">;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></DIV>
<DIV class=cnblogs_code><BR>3）将生成的Javascript方法设置为TextBox控件的onblur事件【Javascript事件】。</DIV>
<DIV class=cnblogs_code>举例：<BR>ASPX代码：<BR>
<DIV class=cnblogs_code><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@&nbsp;Register&nbsp;Assembly</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">DOTNET.Common</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Namespace</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">DOTNET.Web</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;TagPrefix</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">cc1</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">cc1:TextBoxEx&nbsp;</SPAN><SPAN style="COLOR: #ff0000">TypeName</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsNotNull</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;MaxValueLength</SPAN><SPAN style="COLOR: #0000ff">="20"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;runat</SPAN><SPAN style="COLOR: #0000ff">="server"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<IMG src="http://www.cnblogs.com/images/dot.gif">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;<BR><BR><FONT color=#000000>生成后的Javascript是：</FONT><BR><BR></DIV>
<DIV class=cnblogs_code><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">input&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #ff0000">onblur</SPAN><SPAN style="COLOR: #0000ff">="return&nbsp;IsStringForControl(this,'名称',20,false);"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></DIV>
<DIV class=cnblogs_code><BR><BR><FONT color=#000000>现在还有第四步：</FONT></DIV>
<DIV class=cnblogs_code><FONT color=#000000>添加IsStringForControl方法的实现代码：<BR>可以写在js文件中：【假设js文件为“CheckData.js”】<BR></FONT><BR></DIV>
<DIV class=cnblogs_code><SPAN style="COLOR: #008000">//<BR>//</SPAN><SPAN style="COLOR: #008000">&nbsp;检查整数控件值</SPAN><SPAN style="COLOR: #008000"><BR>//</SPAN><SPAN style="COLOR: #008000">&nbsp;control：&nbsp;&nbsp;&nbsp;&nbsp;控件</SPAN><SPAN style="COLOR: #008000"><BR>//</SPAN><SPAN style="COLOR: #008000">&nbsp;cnname：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;控件中文名</SPAN><SPAN style="COLOR: #008000"><BR>//</SPAN><SPAN style="COLOR: #008000">&nbsp;length：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最大长度</SPAN><SPAN style="COLOR: #008000"><BR>//</SPAN><SPAN style="COLOR: #008000">&nbsp;isNull：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否允许为空</SPAN><SPAN style="COLOR: #008000"><BR>//</SPAN><SPAN style="COLOR: #008000">&nbsp;返回值:&nbsp;&nbsp;&nbsp;&nbsp;true<IMG src="http://www.cnblogs.com/images/dot.gif">.&nbsp;false&nbsp;<IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #0000ff">function</SPAN><SPAN style="COLOR: #000000">&nbsp;IsStringForControl(control,&nbsp;cnname,&nbsp;length,&nbsp;isNull)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/images/dot.gif"><BR>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;出错操作：&nbsp;alert("“"&nbsp;+&nbsp;cnname&nbsp;+&nbsp;"”内容超过允许输入“"&nbsp;+&nbsp;length&nbsp;+&nbsp;"”长度!");</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">}</SPAN></DIV></SPAN></DIV>
<DIV class=cnblogs_code><SPAN style="COLOR: #0000ff"></SPAN>&nbsp;</DIV>
<DIV class=cnblogs_code><SPAN style="COLOR: #0000ff">OK,现在我们只要写一些像<BR></DIV>
<DIV class=cnblogs_code><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">cc1:TextBoxEx&nbsp;</SPAN><SPAN style="COLOR: #ff0000">TypeName</SPAN><SPAN style="COLOR: #0000ff">="string"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsNotNull</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;MaxValueLength</SPAN><SPAN style="COLOR: #0000ff">="20"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;runat</SPAN><SPAN style="COLOR: #0000ff">="server"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<IMG src="http://www.cnblogs.com/images/dot.gif">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></DIV>
<DIV class=cnblogs_code><BR><FONT color=#000000>的代码，程序就会自动的检测数据的合法性了，是不是现在我们已经不怎么需要与Javascript打交道了？<BR>【注意】：在ASPX中需要添加&lt;script src="CheckData.js"&gt;&lt;/script&gt;，作用如何相比一般大家都已知道。</FONT></DIV>
<DIV class=cnblogs_code><FONT color=#000000>再做扩展：<BR>拿一个添加页面来说，一般会有很多个TextBox，点击提交的时候，会同意对所有TextBox进行检查，那我们如何来适应这种功能呢？<BR>应对措施：<BR>当用户点击提交按钮的时候，便利页面【或某一页面元素】的所有控件【或子控件】，判断该控件是否实现了onblur事件，如果实现了，则<BR>执行该事件，如果返回false，则是数据验证不合法。</FONT></DIV>
<DIV class=cnblogs_code></SPAN></SPAN>&nbsp;</DIV><img src ="http://www.cnblogs.com/admin11/aggbug/1259577.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41800/" target="_blank">[新闻]Google放出Android开发路线图</a>]]></description></item><item><title>扩展DataGrid</title><link>http://www.cnblogs.com/admin11/archive/2008/08/02/1258613.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Sat, 02 Aug 2008 02:02:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/08/02/1258613.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1258613.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/08/02/1258613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1258613.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1258613.html</trackback:ping><description><![CDATA[<P>在ASP.NET编程中，经常会用到DataGrid（或GridView）。<BR>其实，用的时候，这个DataGrid与那个DataGrid，很多功能都几乎是相同的。<BR>例如，分页，排序。例如：一般情况下，Int列应该居中显示，字符串列应该靠左排序，<BR>double等应该靠右排序，且应该取到小数点后两位，时间格式应该居中，且应该按一定格式显示，例如“YYYY-MM-DD”；如果某列允许排序，则该列的排序字段一般与DataFeild相同。<BR>其实，我们可以扩展一下BoundColumn，让BoundColumn根据DataFeild的不同而显示不同的默认属性。<BR>设计：<BR><BR>1：扩展BoundColumn类：<BR>&nbsp;public class XMRBoundColumn : BoundColumn<BR><BR>2：在类中设置表示DataFeild数据类型的属性DataType。<BR><BR>3：重写Initialize()，在Initialize()中，设置列的默认属性：<BR>&nbsp; 1）如果是整型，则：<BR>if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ItemStyle.HorizontalAlign = HorizontalAlign.Center;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P><BR>2）如果是小数：<BR>if (this.DataFormatString == string.Empty || this.DataFormatString.Equals(""))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.DataFormatString = "{0:N2}";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ItemStyle.HorizontalAlign = HorizontalAlign.Right;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.HeaderStyle.HorizontalAlign = HorizontalAlign.Right;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>3）如果是日期：<BR>if (this.DataFormatString == string.Empty || this.DataFormatString.Equals(""))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.DataFormatString = "{0:yyyy-MM-dd}";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ItemStyle.HorizontalAlign = HorizontalAlign.Center;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>4）其他：<BR>if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ItemStyle.HorizontalAlign = HorizontalAlign.Left;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR><BR>4：在Initialize()中，设置列的排序字段：<BR>if (this.SortExpression == null || this.SortExpression == "")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.SortExpression = this.DataField;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR><BR>现在，把DataGrid中的BoundColumn，替换为XMRBoundColumn，则可是少写很多代码了。<BR><BR>当然，DataGrid也可以扩展，我们可以扩展一个DataGridEx：<BR>public class DataGridEx : DataGrid<BR><BR>至于DataGridEx怎么扩展，本节就不多讲，也无非是添加默认的翻页，排序事件，设置每一列的数据类型等。<BR><BR>扩展后的代码如下：<BR>皮肤代码：【Default.skin中】<BR><BR><BR></P>
<DIV class=cnblogs_code><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@&nbsp;Register&nbsp;Assembly</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">DOTNET.Common</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Namespace</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">DOTNET.Web</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;TagPrefix</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">cc1</SPAN><SPAN style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5">"</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</SPAN><SPAN style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">cc1:DataGridEx&nbsp;</SPAN><SPAN style="COLOR: #ff0000">SkinID</SPAN><SPAN style="COLOR: #0000ff">="dgdListEx"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;BorderWidth</SPAN><SPAN style="COLOR: #0000ff">="1px"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;PageSize</SPAN><SPAN style="COLOR: #0000ff">="15"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;Width</SPAN><SPAN style="COLOR: #0000ff">="98%"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;BorderColor</SPAN><SPAN style="COLOR: #0000ff">="#0083B9"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;HorizontalAlign</SPAN><SPAN style="COLOR: #0000ff">="Center"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;BorderStyle</SPAN><SPAN style="COLOR: #0000ff">="Ridge"</SPAN><SPAN style="COLOR: #ff0000"><BR>CssClass</SPAN><SPAN style="COLOR: #0000ff">="tableGrid"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;AutoGenerateColumns</SPAN><SPAN style="COLOR: #0000ff">="False"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;runat</SPAN><SPAN style="COLOR: #0000ff">="server"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;AllowSorting</SPAN><SPAN style="COLOR: #0000ff">="True"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;AllowPaging</SPAN><SPAN style="COLOR: #0000ff">="True"</SPAN><SPAN style="COLOR: #ff0000"><BR>GridLines</SPAN><SPAN style="COLOR: #0000ff">="Horizontal"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;SelectedItemStyle-Wrap</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;SelectedItemStyle-CssClass</SPAN><SPAN style="COLOR: #0000ff">="gridSelectedItem"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>EditItemStyle-CssClass</SPAN><SPAN style="COLOR: #0000ff">="gridEditItem"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;EditItemStyle-Wrap</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>AlternatingItemStyle-CssClass</SPAN><SPAN style="COLOR: #0000ff">="gridAltItem"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;AlternatingItemStyle-Wrap</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>ItemStyle-CssClass</SPAN><SPAN style="COLOR: #0000ff">="gridItem"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;ItemStyle-Wrap</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR>HeaderStyle-CssClass</SPAN><SPAN style="COLOR: #0000ff">="gridHeader"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;HeaderStyle-Wrap</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>FooterStyle-CssClass</SPAN><SPAN style="COLOR: #0000ff">="gridFooter"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;FooterStyle-Wrap</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>PagerStyle-VerticalAlign</SPAN><SPAN style="COLOR: #0000ff">="middle"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;PagerStyle-NextPageText</SPAN><SPAN style="COLOR: #0000ff">="下一页"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR>PagerStyle-PrevPageText</SPAN><SPAN style="COLOR: #0000ff">="上一页"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;PagerStyle-HorizontalAlign</SPAN><SPAN style="COLOR: #0000ff">="Left"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></DIV><BR><BR>页面代码：<BR>
<DIV class=cnblogs_code><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">cc1:DataGridEx&nbsp;</SPAN><SPAN style="COLOR: #ff0000">ID</SPAN><SPAN style="COLOR: #0000ff">="dgdList"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;SkinID</SPAN><SPAN style="COLOR: #0000ff">="dgdListEx"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;runat</SPAN><SPAN style="COLOR: #0000ff">="server"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><FONT color=#0000ff>&nbsp;&lt;Columns&gt;</FONT>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">cc1:XMRBoundColumn&nbsp;</SPAN><SPAN style="COLOR: #ff0000">DataField</SPAN><SPAN style="COLOR: #0000ff">="ClassName"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;HeaderTex</SPAN><SPAN style="COLOR: #0000ff">="ClassName"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">asp:BoundColumn&nbsp;</SPAN><SPAN style="COLOR: #ff0000">DataField</SPAN><SPAN style="COLOR: #0000ff">="StudentGUID"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;Visible</SPAN><SPAN style="COLOR: #0000ff">="False"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">cc1:XMRBoundColumn&nbsp;</SPAN><SPAN style="COLOR: #ff0000">DataField</SPAN><SPAN style="COLOR: #0000ff">="StudentName"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;HeaderText</SPAN><SPAN style="COLOR: #0000ff">="StudentName"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">asp:BoundColumn&nbsp;</SPAN><SPAN style="COLOR: #ff0000">DataField</SPAN><SPAN style="COLOR: #0000ff">="ClassGUID"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;Visible</SPAN><SPAN style="COLOR: #0000ff">="False"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">/&gt;<BR>&nbsp;&lt;/Columns&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cc1:DataGridEx&gt;<BR><BR>是不是和代码很简略啊。</SPAN></DIV><img src ="http://www.cnblogs.com/admin11/aggbug/1258613.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41799/" target="_blank">[新闻]番茄花园作者被警方逮捕</a>]]></description></item><item><title>站在人的角度写代码</title><link>http://www.cnblogs.com/admin11/archive/2008/07/04/1235319.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Fri, 04 Jul 2008 02:29:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/07/04/1235319.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1235319.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/07/04/1235319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1235319.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1235319.html</trackback:ping><description><![CDATA[<P>今天在写一个程序，其中有几个类是原来的项目中已经存在的，为了图方便我就把这几个类一个一个的拷贝过来了。</P>
<P>每当我拷贝一个的时候我都编译一遍。</P>
<P>当拷贝第一个类的时候，编译时出现错误，提示找不到A类，</P>
<P>把A类再拷贝过来，编译后又说找不到B类，找到B类又说找不到C类，</P>
<P>如此拷贝了半天才把所需要的东西拷贝过来，编译成功。</P>
<P>觉得：</P>
<P>&nbsp;&nbsp;&nbsp; 这样A类调用B类，B类调用C类，...他们之间的这些关系太让人郁闷了。应归程序是以前自己写的，少了类知道向哪儿找去，如果是别人写的，估计光找关联的类要找老半天。</P>
<P>&nbsp; 由此推想，不刚是拷贝类的时候会出现混乱，这样的时候毕竟很少。别人看代码的时候，出现这样的现象最让人郁闷，正在查看这A类，又要去B类看看怎么回事，很可能这下又从B类到了C类，想象也让人头大，特别是看代码喜欢看究竟的人。</P>
<P>为什么会出现这样的强耦合呢？</P>
<P>第一：缺少规划：</P>
<P>缺少规划是出现这样强耦合的原因之一，写程序很随意，写道哪儿是哪儿，哪儿有写好的函数名就直接拿来用。</P>
<P>第二：设计过度</P>
<P>能出现这么多一环套一环的类，还有一种可能就是设计过度了。自己觉得抽象的很好，把公共部分都抽象在相应的函类里了，越设计类越多，到最后就是这个样子了。</P>
<P>如果说这是设计过度也可以，但是，也可以说这是设计不到位，因为你只把精力放在代码上了，而忽略了设计服务的对象是人，是用代码看代码的人，设计应该是让用代码的人感觉好用，感觉方便，感觉易懂，而不是感觉每个类抽象的很好，但是每个类关联都很多。</P>
<P>所以，如果我们设计代码的时候发现类很多，相互关联【引用】很多，就应该是站在人的角度反思设计的时候了。</P>
<P>&nbsp;</P>
<P>设计过度其实还有一种情况就是把函数拆分成n个很小的函数，每个函数是很清楚，但让人理解一个功能却要跳来跳去找n个函数。</P>
<P>&nbsp;</P>
<P>第三：没有站在用户的角度考虑【用户：用代码和看代码的人】</P>
<P>我所说的用户是调用你的程序的程序员。</P>
<P>没有站在用户的角度来思考，而仅仅是站在面向对象，技术的角度来思考代码是不好的，就像第二条所说。</P>
<P>给类，函数，变量起一个好名字，添加好的注释，都应该站在用户的角度考虑。</P>
<P>为别人看代码着想，起个好名字，把注释写明白，明白到别人看到一个函数后，根据名称，根据注释就知道这个函数要干什么，不需要查看函数的每句代码去查看作者的意图。</P>
<P>第四：出现了杂烩类</P>
<P>一个类既要干这件事又要干那间事，这期间就可能要引用很多的类，增大了类耦合的可能性。</P><img src ="http://www.cnblogs.com/admin11/aggbug/1235319.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41792/" target="_blank">[新闻]WordPress和Movable Type影响社交网站的未来</a>]]></description></item><item><title>CommunityServer中的代码页面分离</title><link>http://www.cnblogs.com/admin11/archive/2008/06/21/1227240.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Sat, 21 Jun 2008 03:15:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/06/21/1227240.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1227240.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/06/21/1227240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1227240.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1227240.html</trackback:ping><description><![CDATA[摘要: 第一步：找一个页面。首先找到一个页面：CS2008_4.0.30417.1769.sdk\source\Web\Themes\calypso\Common\login.aspx第二步：找一个处理逻辑的控件发现该页面中有个控件：CSControl:LoginForm。代码如下：&lt;CSControl:LoginFormrunat="server"AutoLoginCheckBoxId="auto&nbsp;&nbsp;<a href='http://www.cnblogs.com/admin11/archive/2008/06/21/1227240.html'>阅读全文</a><img src ="http://www.cnblogs.com/admin11/aggbug/1227240.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41791/" target="_blank">[新闻]谷歌平台手机获准上市</a>]]></description></item><item><title>创建表空间，导出数据库，导入数据库</title><link>http://www.cnblogs.com/admin11/archive/2008/06/12/1218512.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Thu, 12 Jun 2008 09:13:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/06/12/1218512.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1218512.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/06/12/1218512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1218512.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1218512.html</trackback:ping><description><![CDATA[create&nbsp;&nbsp; tablespace&nbsp;&nbsp; TBS_ATIS&nbsp;&nbsp; datafile&nbsp;&nbsp; 'D:\oracle\product\10.2.0\oradata\ATIS\TBS_ATIS.dbf'&nbsp;&nbsp; size&nbsp;&nbsp; 100M&nbsp;&nbsp; <BR>&nbsp; autoextend&nbsp;&nbsp; on&nbsp;&nbsp; DEFAULT&nbsp;&nbsp; STORAGE&nbsp;&nbsp; (&nbsp;&nbsp; INITIAL&nbsp;&nbsp; 256k&nbsp;&nbsp; next&nbsp;&nbsp; 256k);;<BR><BR>imp <A href="mailto:userid=atis/atis@TONGSY">userid=atis/atis@TONGSY</A> full=y file=E:\oracle_backup\Atis.dmp<BR><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Tahoma">exp atis/atis@TONGSY file=E:/oracle_backup/atis.dmp log=E:/oracle_backup/atis.log grants=Y<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P><img src ="http://www.cnblogs.com/admin11/aggbug/1218512.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41790/" target="_blank">[新闻]微软自称传媒公司 强调搜索引擎三大趋势</a>]]></description></item><item><title>我写的C++控件基类</title><link>http://www.cnblogs.com/admin11/archive/2008/05/22/1204891.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Thu, 22 May 2008 07:12:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/05/22/1204891.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1204891.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/05/22/1204891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1204891.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1204891.html</trackback:ping><description><![CDATA[摘要: 属性类：存储控件属性的类：控件的属性从文本文件中读取。文本文件的案例为：ID_BTN_NAVI_SCALE=rect=10,80,50,80;type=button;text=30M;img_src=IDB_MAIN_CHS.BMP;img_num=14,1;forcolor=255,255,255;isshow=0;bgcolor=255,255,255;关键字=rect=左,右,上,80;下=&nbsp;&nbsp;<a href='http://www.cnblogs.com/admin11/archive/2008/05/22/1204891.html'>阅读全文</a><img src ="http://www.cnblogs.com/admin11/aggbug/1204891.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41789/" target="_blank">[新闻]亚洲社交网站Friendster将兼容竞争对手窗件</a>]]></description></item><item><title> C#中的修饰符     </title><link>http://www.cnblogs.com/admin11/archive/2008/03/18/1111794.html</link><dc:creator>逆水行船</dc:creator><author>逆水行船</author><pubDate>Tue, 18 Mar 2008 08:46:00 GMT</pubDate><guid>http://www.cnblogs.com/admin11/archive/2008/03/18/1111794.html</guid><wfw:comment>http://www.cnblogs.com/admin11/comments/1111794.html</wfw:comment><comments>http://www.cnblogs.com/admin11/archive/2008/03/18/1111794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/admin11/comments/commentRss/1111794.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/admin11/services/trackbacks/1111794.html</trackback:ping><description><![CDATA[摘要: C#中的修饰符有很多，可以分类：类修饰符，存取修饰符，成员修饰符。(一) 类及其类的存取修饰符有：public，inner，friend，abastruct，sealed1. public：public class ClassPublic{}如果一个类声明为public，则该类的应用不受限制。具体含义可与inner参考对比。2. inner：inner class ClassInner{}如果一个&nbsp;&nbsp;<a href='http://www.cnblogs.com/admin11/archive/2008/03/18/1111794.html'>阅读全文</a><img src ="http://www.cnblogs.com/admin11/aggbug/1111794.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41788/" target="_blank">[新闻]百度宣布服务器全面换装闪存 替代硬盘</a>]]></description></item></channel></rss>