<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Vincent.Q</title><subtitle type="text">重剑无锋，大巧不工    电话:13867408830;QQ:154538878;邮箱:xiyang-0@163.com</subtitle><id>http://feed.cnblogs.com/blog/u/58255/rss</id><updated>2012-02-09T00:34:14Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/58255/rss"/><entry><id>http://www.cnblogs.com/xiyang1011/archive/2012/02/09/2343453.html</id><title type="text">重温士兵突击之后</title><summary type="text">许三多和阿甘的成功在于知识所限，思维所限和视野所限。能在一个狭小的范围内做事情做到极致，能甘于那种生活，执着于某一生活；成才是以目标为导向，及时调整生存和生活的方式，迎头赶上，变化目标，不甘于寂寞，由此比较之深谙挖深井之道。</summary><published>2012-02-09T00:34:00Z</published><updated>2012-02-09T00:34:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2012/02/09/2343453.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2012/02/09/2343453.html"/><content type="html">&lt;p&gt;许三多和阿甘的成功在于知识所限，思维所限和视野所限。能在一个狭小的范围内做事情做到极致，能甘于那种生活，执着于某一生活；成才是以目标为导向，及时调整生存和生活的方式，迎头赶上，变化目标，不甘于寂寞，由此比较之深谙挖深井之道。&lt;/p&gt;&#xD;
&lt;p&gt;补充：但很多事情并不是这么简单，人嘴两张皮，看你怎么说：我们往往认为很多事情只要你说服别人，就是你有道理，实际很多时候往往相反，分析原因可能有：a，说服者表达能力好，善于使用说服技巧；b，听者容易认同，或者无所谓；c，听者表达能力不如说服者；d，说服者准备充分，听者准备不充分。。。如此都是与事情本身无关的因素，所以说服力很重要，同时也会掩盖客观道理。&lt;/p&gt;&#xD;
&lt;p&gt;挖深井之道，也分怎么看：如果柳传志继续在中科院搞科研，那就不会有现在的商界巨擘；如果张朝阳继续搞物理，也不会有搜狐。这说明啥呢？&lt;/p&gt;&#xD;
&lt;p&gt;说明在80，90年代，中国的经济是混沌的，只要敢干，就成功了一半，并不存在深挖井的问题，也就是成才那类人容易成功的年代；而到了21世纪，我们发现要成功必须具体很深厚的行业知识或专业技能才行，这个阶段到了市场细分的时候了，也就是说这个时候，许三多横空出世，往往会成功。&lt;/p&gt;&#xD;
&lt;p&gt;进一步讲，国外的发展步伐远高于国内，我们发现他们的思想直，表达直，从不做投机取巧的事情，国内说他们傻，不灵活。。。&lt;/p&gt;&#xD;
&lt;p&gt;这么多文字，就是在说大环境：这个年代需要深厚的专业化东西容易立足，容易成功。&lt;/p&gt;&#xD;
&lt;p&gt;接下来说说自身条件：&lt;/p&gt;&#xD;
&lt;p&gt;1，姿态。这个也结合下许三多来说，许一直在自己放到极低的地方，认为自己说话，做事都不靠谱，做对了一件事全班都替他高兴。。。所以能放低姿态，一直保持努力；成才，是我的，就是我的，不是我的，也是我的；然而很多时候对外界的东西难度估计不足，会造成失败，不像许三多那样老老实实的干，现实里有些表现为太拿自己当回事了。当然许三多这种状况，也不都是优点，只是表明人的姿态要放低，不要太拿自己当回事。盖茨也聊过：在你没啥成绩之前，你根本不需要尊严。&lt;/p&gt;&#xD;
&lt;p&gt;2，正确认识自己。也就是，了解你自己，你真正的了解你自己吗（可能看到这的很多人都认为理解自己，我以前也是这么认为的，呵呵）？其实你根本不了解你自己！看看乐嘉的性格色彩，你能知道你是什么人，你有何性格上的优势，略势，才能对自己有个相对准确的评估。&lt;/p&gt;&#xD;
&lt;p&gt;3，重体悟。接下来说的是，成功要么靠经历，要么是天才，为什么清华，北大的容易成功，因为他们接近发展最前沿，或是技术，或是人脉；而我们是凡夫俗子，只能靠经历来体悟。很多时候，我们都觉得自己很不凡，凡事讲的头头是道，然而事实往往相悖，而且事实的深度或复杂度往往都会超出我们的想象，所以体悟才是硬道理。&lt;/p&gt;&#xD;
&lt;p&gt;4，自身档次：从员工到组长，再到项目经理，再到部门经理，再到总监或是销售经理，再到。。。最后到副总，老板；或者是简单的由员工到销售，再到财务或老板。台阶一直是存在的，只有上去了，才有同一级的能力和水平，也会有更多的同一级的人脉，所以人的台阶要一直往前迈，圣斗士就是从青铜战士开打，不断向前，向前。。。同时谨记：青铜战士打赢黄金战士不是天天都存在，这种传奇极少发生，所以我们还是先提高到黄金战士水平再打！&lt;/p&gt;&#xD;
&lt;p&gt;这点很有意思，你可以把这点与上面的几点组合起来看：&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&#xD;
    &lt;tbody&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;自身档次&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;大环境&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;姿态&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;正确认识自己&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;重体悟&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;青铜战士&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;现代&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;低&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
            &lt;/span&gt;-&lt;/span&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;重&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;现代&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;低&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
            &lt;/span&gt;-&lt;/span&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;重&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;现代&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;高&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;否&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;轻&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;现代&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;高&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;!--[if !supportLists]--&gt;&lt;span&gt;&lt;span&gt;-&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
            &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&amp;nbsp;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#xD;
            &lt;/span&gt;-&lt;/span&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="710" colspan="5" valign="top"&gt;&#xD;
            &lt;p&gt;横向组合，我们能发现一些端倪&lt;/p&gt;&#xD;
            &lt;p&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;自身档次&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;档次1&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;档次2&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;档次3&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;档次4&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;青铜战士&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;白金战士&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;黄金战士&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;冥王&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="142" valign="top"&gt;&#xD;
            &lt;p&gt;天界&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="710" colspan="5" valign="top"&gt;&#xD;
            &lt;p&gt;纵向比较，我们发现低打高，困难，差距越大越困难；反之，高打低，太easy了。&lt;/p&gt;&#xD;
            &lt;p&gt;由此联想到，我们都喜欢回到古代，因为古代比现代落后，好欺负。。。&lt;/p&gt;&#xD;
            &lt;p&gt;再看，普通员工与老板的差距是很大的，兄弟们修炼吧。。。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
    &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;5，个人发展的生产力与生产关系。&lt;/p&gt;&#xD;
&lt;p&gt;这点是上一点的延伸和深入，其核心就是人在不同阶段会有不同的瓶颈，通过瓶颈以后会有个极大的发展，再之后就是适应期，再之后又会出现瓶颈，如此。&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&#xD;
    &lt;tbody&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="104" valign="top"&gt;&#xD;
            &lt;p align="center"&gt;&lt;strong&gt;阶段&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="295" valign="top"&gt;&#xD;
            &lt;p align="center"&gt;&lt;strong&gt;瓶颈&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="307" valign="top"&gt;&#xD;
            &lt;p align="center"&gt;&lt;strong&gt;发展了哪些&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="104" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;大学毕业&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="295" valign="top"&gt;&#xD;
            &lt;p&gt;由大学学到的专业知识，到企业中应用的商业产品需要有个适应阶段，不存在完全理论化的东西，能满足客户的东西才是有价值的东西&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="307" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;!--[if !supportLists]--&gt;1， &lt;!--[endif]--&gt;知道了企业是什么样子；&lt;/p&gt;&#xD;
            &lt;p&gt;&lt;!--[if !supportLists]--&gt;2， &lt;!--[endif]--&gt;知道了自己该做点什么事情&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="104" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;工作2~4&lt;/strong&gt;&lt;strong&gt;年&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="295" valign="top"&gt;&#xD;
            &lt;p&gt;怎么能变成小团队的领导&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="307" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;!--[if !supportLists]--&gt;1， &lt;!--[endif]--&gt;具有了一定目标和目的性；&lt;/p&gt;&#xD;
            &lt;p&gt;&lt;!--[if !supportLists]--&gt;2， &lt;!--[endif]--&gt;知道了公司，团队和客户相关东西&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="104" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;工作5~7&lt;/strong&gt;&lt;strong&gt;年&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="295" valign="top"&gt;&#xD;
            &lt;p&gt;逐渐进入中高层，怎么能让企业变得更好，团队获得更好工资&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="307" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;!--[if !supportLists]--&gt;1， &lt;!--[endif]--&gt;视野升高，意识到企业发展问题；&lt;/p&gt;&#xD;
            &lt;p&gt;&lt;!--[if !supportLists]--&gt;2， &lt;!--[endif]--&gt;影响力和各种意识提高了&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="104" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;工作8&lt;/strong&gt;&lt;strong&gt;年以后&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="295" valign="top"&gt;&#xD;
            &lt;p&gt;是否要转型&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="307" valign="top"&gt;&#xD;
            &lt;p&gt;意识到企业发展核心不是靠技术，而是靠营销和销售。&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
        &lt;tr&gt;&#xD;
            &lt;td width="104" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="295" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
            &lt;td width="307" valign="top"&gt;&#xD;
            &lt;p&gt;&lt;/p&gt;&#xD;
            &lt;/td&gt;&#xD;
        &lt;/tr&gt;&#xD;
    &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;这其中还有一个隐含关键因素：大小公司的问题。大公司强调员工的专业化，而小公司强调员工的多面手，这也会很大程度上影响我们的职业发展。&lt;/p&gt;&#xD;
&lt;p&gt;6，有些东西是通过学习学会的，有些不是。&lt;/p&gt;&#xD;
&lt;p&gt;这里说的就是天分或机会。绝大多数的东西通过学习和实践是可以学会或者做好的，但也有一些东西再努力也是做不到极致的。这可能是一个瓶颈，也可能根本就不能达到：像性格上的缺点，只能尽量避免；像艺术天分等。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;style type="text/css" isprelink="true"&gt;@import url(http://www.cnblogs.com/Load.ashx?type=style&amp;file=SyntaxHighlighter.css);&lt;/style&gt;&lt;style type="text/css"&gt;@import url(/css/cuteeditor.css);&lt;/style&gt;&lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2343453.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2012/02/09/2343453.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2012/01/29/2330867.html</id><title type="text">编码方式使用CodeSmith</title><summary type="text">CodeSmith的作用是不言而喻的,用过的人都会觉得它非常强大.根据自定义模板,快速生成代码.只是我们使用的时候,要在它提供的CodeSmith Studio环境下使用模板,再传入相应参...</summary><published>2012-01-29T02:09:00Z</published><updated>2012-01-29T02:09:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2012/01/29/2330867.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2012/01/29/2330867.html"/><content type="html">&lt;p&gt;CodeSmith的作用是不言而喻的,用过的人都会觉得它非常强大.根据自定义模板,快速生成代码.只是我们使用的时候,要在它提供的CodeSmith Studio环境下使用模板,再传入相应参数,最终生成NET的类文件.&lt;/p&gt;&#xD;
&lt;p&gt;如果我们可以通过编码方式,把CodeSmith功能融入NET代码中,这样就会比较灵活,方便我们控制了.根据下面的操作步骤我们就可以实现.&lt;/p&gt;&#xD;
&lt;p&gt;先说下环境,我安装的CodeSmith版本是5.1,当然是破解版(你懂的).居说CodeSmith注册费用还是比较昂贵滴.我们需要如下几个DLL文件,这几个文件在安装路径下都可以找到.&lt;/p&gt;&#xD;
&lt;p&gt;CodeSmith.Engine.dll&lt;/p&gt;&#xD;
&lt;p&gt;CodeSmith.Feedback.Client&lt;/p&gt;&#xD;
&lt;p&gt;SchemaExploer.dll&lt;/p&gt;&#xD;
&lt;p&gt;SchemaExploer.SqlSchemaProvider.dll&lt;/p&gt;&#xD;
&lt;p&gt;把这几个DLL文件引入项目文件之后,接下来就需要制作模板了,我们也可以直接使用CodeSmith自带的模板.打开CodeSmith Studio,右侧就是Template Exploer部分,选择一个模板,右键,选择Open Folder In Window Exploer菜单项,确定好模板路径后,就可以开始编码了.&lt;/p&gt;&#xD;
&lt;p&gt;在写代码之前,我们还是先看下模板的组成,如图-1所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009026151.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009044712.jpg" width="557" height="307" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-1&lt;/p&gt;&#xD;
&lt;p&gt;代码第2句,Property关键字,就表示这个模板的属性,也是需要我们传入的参数,看类型是SchemaExploer.DataBaseSchema,也就是说,我们只要传入这个类型的参数值即可&lt;/p&gt;&#xD;
&lt;p&gt;代码如图-2所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009065957.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009071629.jpg" width="557" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-2&lt;/p&gt;&#xD;
&lt;p&gt;代码非常简单,先要加载模板再编译,然后传入属性值,再输出就OK了.模板编译部分是CompileTemplate方法,如图-3所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009088697.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009091304.jpg" width="558" height="329" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-3&lt;/p&gt;&#xD;
&lt;p&gt;传入属性值的代码是CodeTemplate.SetProperty;&lt;/p&gt;&#xD;
&lt;p&gt;输出类文件的代码是RenderToFile;&lt;/p&gt;&#xD;
&lt;p&gt;OK,整个过程结束,看看我们的成果吧,如图-4所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009117009.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009123586.jpg" width="420" height="472" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-4&lt;/p&gt;&#xD;
&lt;p&gt;这个模板的作用是生成Db数据库中所有Db表的枚举类.&lt;/p&gt;&#xD;
&lt;p&gt;编码方式使用CodeSmith还是非常灵活的,比如我想生成数据库中Db表的CreateSQL语句,以前我们可能是自己拼写字符串实现,现在使用CodeSmith模板,就非常简单了.如图-5所示,大家参考这个代码自己试下,是不是非常简单呢?&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009137306.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image009" border="0" alt="clip_image009" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201201/201201291009151342.jpg" width="558" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;代码文件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="编码方式使用CodeSmith.Files" href="http://files.cnblogs.com/xiyang1011/编码方式使用CodeSmith.Files.rar"&gt;编码方式使用CodeSmith.Files&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-5&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2330867.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2012/01/29/2330867.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2012/01/27/2330077.html</id><title type="text">2011年度总结</title><summary type="text">2011年,对我来说是非常充实的一年,尽管仍然走在路上,但是走在了属于自己的路上,我很满足,我感谢所有认识我的人,是你们帮助我成长,谢谢.</summary><published>2012-01-27T04:00:00Z</published><updated>2012-01-27T04:00:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2012/01/27/2330077.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2012/01/27/2330077.html"/><content type="html">&lt;p&gt;2011&lt;span style="font-family: 宋体"&gt;年度总结&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;2011&lt;span style="font-family: 宋体"&gt;年&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;对我来说是非常充实的一年&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;尽管仍然走在路上&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;但是走在了属于自己的路上&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;我很满足&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;我感谢所有认识我的人&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;是你们帮助我成长&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;谢谢&lt;/span&gt;.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;体会&lt;/span&gt;1:&lt;span style="font-family: 宋体"&gt;用户体验决定软件成败&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;做&lt;/span&gt;IT&lt;span style="font-family: 宋体"&gt;也有几年了&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;其间也做过不少软件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;越来越感觉用户体验非常重要&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;这里要提及一下腾迅&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;尽管很多人都&lt;/span&gt;BS&lt;span style="font-family: 宋体"&gt;它山寨&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;没有创建&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;但它在用户体验方面&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;做得非常专业&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;从它不断升级的&lt;/span&gt;QQ&lt;span style="font-family: 宋体"&gt;软件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;如&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;邮箱&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;输入法&lt;/span&gt;,QQ&lt;span style="font-family: 宋体"&gt;音乐等&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;不经意间&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;它已经改变了我们的些许习惯&lt;/span&gt;.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;体会&lt;/span&gt;2:&lt;span style="font-family: 宋体"&gt;软件精细化&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;做管理类软件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;尤其是&lt;/span&gt;ERP&lt;span style="font-family: 宋体"&gt;或&lt;/span&gt;HIS&lt;span style="font-family: 宋体"&gt;等&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;随着开发工具的不断提升&lt;/span&gt;, &lt;span style="font-family: 宋体"&gt;我们想实现一个功能的时候&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;技术对软件的影响越来越少&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而业务的分析&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;融合&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;实现对于软件是否好用&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;适用的影响越来越大&lt;/span&gt;.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;曾经一个企业&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;一般只上一套&lt;/span&gt;ERP&lt;span style="font-family: 宋体"&gt;就可以了&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;而现在&lt;/span&gt;OA,&lt;span style="font-family: 宋体"&gt;财务&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;人事&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;库存等&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;工作流的引用&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;企业已经不是只需要上一套&lt;/span&gt;ERP&lt;span style="font-family: 宋体"&gt;就可以解决的&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;这说明我们的企业信息化程度大大增加&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;这就要求我们加强对业务的需求把控能力&lt;/span&gt;.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;体会&lt;/span&gt;3:&lt;span style="font-family: 宋体"&gt;平台&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;架构的使用&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;曾经比较迷恋所谓的平台&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;架构&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;尽管自己也有一套&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;经过这一年的尝试&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;发现平台&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;架构的作用&lt;/span&gt;:&lt;span style="font-family: 宋体"&gt;简单&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;稳定&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;好用&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;其他神马都是浮云&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;一个管理类软件&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;必须要有一套所谓的平台&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;架构&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;不要求多复杂&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;好用&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;简单即可&lt;/span&gt;.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;&lt;span style="font-family: 宋体"&gt;体会&lt;/span&gt;4:&lt;span style="font-family: 宋体"&gt;创建公司是一件非常不容易的事情&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;虽说自己没有亲身经历创建公司的完整过程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;但也经历了维持公司的过程&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;不容易&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;非常不容易&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;每天如果不去辛苦工作&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;可能就直接喝西北风了&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;况且下面还有一大帮人等着发工资&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;作为一个老板&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;所承受的压力&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;没有做过老板的人&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;真的无法想像&lt;/span&gt;.&lt;span style="font-family: 宋体"&gt;还有&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;作为一个老板&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;所考虑问题的方式&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;层次都和一般人有所不同&lt;/span&gt;.&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;2011&lt;span style="font-family: 宋体"&gt;年&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;我是知足的&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt"&gt;2012&lt;span style="font-family: 宋体"&gt;年&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;我很有信心&lt;/span&gt;,&lt;span style="font-family: 宋体"&gt;完成我的目标&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2330077.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2012/01/27/2330077.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2011/11/08/2240580.html</id><title type="text">基于NET3.5的JSON操作(提供源码)</title><summary type="text">前几天把类库由Net2.0升级到3.5,过程还是比较顺利的,只是其中一个DLL出了点问题,就Newtonsoft.Json.DLL,原来,它有2个版本,一个是基于Net2.0类库的,另一个...</summary><published>2011-11-07T23:53:00Z</published><updated>2011-11-07T23:53:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2011/11/08/2240580.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2011/11/08/2240580.html"/><content type="html">&lt;p&gt;前几天把类库由Net2.0升级到3.5,过程还是比较顺利的,只是其中一个DLL出了点问题,就Newtonsoft.Json.DLL,原来,它有2个版本,一个是基于Net2.0类库的,另一个是基于Net3.5类库,目前有没有基于4.0的版本,不清楚.可能是由于代码不规范,导致这个DLL引用失败.&lt;/p&gt;&#xD;
&lt;p&gt;之后,找到对应的3.5版本的DLL覆盖以后,编译通过,似乎正常了.但在进行JSON格式转换的时候,提示转换失败,经过调用和跟踪,发现2.0和3.5在语法上还是有差别的,在博客园里搜索了一圈,发现资料确实不少,但都比较杂,有的只说了某个点.趁着周末时间,把基于3.5的JSON操作整理了一下,现公布出来,方便大家以后使用.&lt;/p&gt;&#xD;
&lt;p&gt;JSON操作的使用场景,包括两个方面,即Web的客户端和服务端,Newtonsoft.Json是在服务端使用,客户端我使用了json.js文件,这个文件也是开源,而且在我提供的下载包里也有,大家可直接下载.它们2个类库配合使用,解析JSON就比较简单了.&lt;/p&gt;&#xD;
&lt;p&gt;下面再说下支持的数据类库,目前支持如图-1所示的类型.当然,其他数据类型也是可以支持的,大家可以自行扩展,只是下面的数据对我来说,已经够用了.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111080753033212.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111080753047573.jpg" width="342" height="428" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-1&lt;/p&gt;&#xD;
&lt;p&gt;OK,下面我们就要根据这些数据类型来操作JSON了,应该说,NET3.5版本比2.0要简单些,而且还支持Linq语言.整个解析过程还是比较顺利的,只要大家注意如下几个类就可以了.如何使用在提供的源码中已经有所说明了.&lt;/p&gt;&#xD;
&lt;p&gt;Newsonsoft.Json.Linq.JObject&lt;/p&gt;&#xD;
&lt;p&gt;Newsonsoft.Json.Linq.JProperty&lt;/p&gt;&#xD;
&lt;p&gt;Newsonsoft.Json.Linq.JArray&lt;/p&gt;&#xD;
&lt;p&gt;Newsonsoft.Json.Linq.JValue&lt;/p&gt;&#xD;
&lt;p&gt;这里有一点需要描述下,就是我们打算在前台生成JSON格式字符串,在后台直接生成DataTable对象,这个功能是可以实现的.上述的JsonDataType枚举中ClientDataTable就是这个类型.简单说,是由客户端的Array+Object组成,即Array[0]=Object模式,这样我们在后台解析的时候,就可以直接生成DataTable了.当然,不止这一种格式,我们可以自己定义格式,自己解析&lt;/p&gt;&#xD;
&lt;p&gt;最后看下示例好了,根据上述的数据类型做的示例,如图-2所示.示例可以直接运行,大家直接看好了.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111080753055771.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111080753074734.jpg" width="557" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-2&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;源文件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="基于NET3.5的JSON操作.Files" href="http://files.cnblogs.com/xiyang1011/基于NET3.5的JSON操作.Files.rar"&gt;基于NET3.5的JSON操作.Files&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2240580.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2011/11/08/2240580.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2011/11/01/2230936.html</id><title type="text">反射已经&amp;quot;Out&amp;quot;,动态编译才能&amp;quot;Hold&amp;quot;住</title><summary type="text">Net支持反射功能以后,确实使我们Net程序眼前一亮啊,真是太神奇了,只需要传入字符串就可以完成功能.可以说,反射功能的引入,使我们在处理某些问题上更加得心应手. 传统的Db...</summary><published>2011-10-31T23:25:00Z</published><updated>2011-10-31T23:25:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2011/11/01/2230936.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2011/11/01/2230936.html"/><content type="html">&lt;p&gt;Net支持反射功能以后,确实使我们Net程序眼前一亮啊,真是太神奇了,只需要传入字符串就可以完成功能.可以说,反射功能的引入,使我们在处理某些问题上更加得心应手.&lt;/p&gt;&#xD;
&lt;p&gt;传统的Db管理软件中,数据库字段的频繁改动,前台实体类的不断修改,使我们大为头痛.并不是说我们设计的Db结构不合理,而且客户的需求变动十分频繁,而且非常不可控,当然,如果对行业业务非常精通的话,是可以避免这个问题的.&lt;/p&gt;&#xD;
&lt;p&gt;使用反射功能,虽然可以传入字符串来解决某些问题,但如果遇到上述提到的数据库字段增删的问题,我们常用的方法是写入给客户升级的SQL语句,然后在公司修改某个DLL文件中的实体类以后,重新编译,打包测试通过后.将前台DLL文件和后台SQL语句一并发至各户处,实施员或客户的系统管理员将最新的文件覆盖,SQL语句生成,反射功能我们在生成实体类对象时会用到.&lt;/p&gt;&#xD;
&lt;p&gt;整个过程基本如此,其中,重新生成DLL文件的步骤,如果采用动态编译的方法处理,似乎就变得简单多了.大致思路如下&lt;/p&gt;&#xD;
&lt;p&gt;1. 修改Db表结构的步骤依旧没有变化.&lt;/p&gt;&#xD;
&lt;p&gt;2. 生成DLL文件,采用动态编译.即在系统打开时,根据Db中的对象生成实体类,再直接编译生成DLL文件,与上个方法相比,编译DLL的过程由系统自动执行了,而不需要我们在公司编译.这样我们只需要保证SQL语句升级正确就可以了.&lt;/p&gt;&#xD;
&lt;p&gt;3. 根据生成好的DLL文件,我们再使用反射就OK了&lt;/p&gt;&#xD;
&lt;p&gt;当然,动态编译的功能还远远不止于此,比如:生成一段NET字符串,动态执行等.有兴趣的童鞋,可以在博客园里搜索下,这里推荐一下这篇文章,确实不错.&lt;/p&gt;&#xD;
&lt;p&gt;地址:http://www.cnblogs.com/lichdr/archive/2004/10/20/54569.html&lt;/p&gt;&#xD;
&lt;p&gt;实现动态编译的方法其他很简单,如图-1所示.在我提供的下载文件中,有完整的方法,直接使用即可&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111010724568688.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111010724571064.jpg" width="557" height="258" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-1&lt;/p&gt;&#xD;
&lt;p&gt;我们再看看是如何使用这个方法来编译文件的,我们现在实现这样一个业务,客户需要新增加一张表,对应的实体也要增加,并实现实体的增删改查操作.如图-2所示,首先要制作好实体类的字符串&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111010724585915.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111010725007943.jpg" width="557" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-2&lt;/p&gt;&#xD;
&lt;p&gt;然后直接编译即可,如果编译成功,我们就直接可以使用反射对其操作了.如图-3所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/20111101072501319.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201111/201111010725021059.jpg" width="557" height="358" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-3&lt;/p&gt;&#xD;
&lt;p&gt;效果怎么样?这样处理的话,如果再遇到类似需求,我们需要做的事情,就是提供字符串就可以了,而不需要在公司生成DLL,由实施员负责覆盖.&lt;/p&gt;&#xD;
&lt;p&gt;技术的更新,会使我们在处理某些问题上变得更加容易和简单.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;源文件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="反射已经Out动态编译才能Hold住.Files" href="http://files.cnblogs.com/xiyang1011/反射已经Out动态编译才能Hold住.Files.rar"&gt;反射已经Out动态编译才能Hold住.Files&lt;/a&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2230936.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2011/11/01/2230936.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2011/10/31/2229745.html</id><title type="text">1分钟生成Net对象的注释</title><summary type="text">我们在开发过程中,肯定会有几个项目作为基础项目,存放一些比较常用的类和方法,供其他项目使用.一般来说,方法实现以后,就不想再去管它了,以致于新加入的某个伙计问这个项目里的方法有没注释或说明...</summary><published>2011-10-30T23:54:00Z</published><updated>2011-10-30T23:54:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2011/10/31/2229745.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2011/10/31/2229745.html"/><content type="html">&lt;p&gt;我们在开发过程中,肯定会有几个项目作为基础项目,存放一些比较常用的类和方法,供其他项目使用.一般来说,方法实现以后,就不想再去管它了,以致于新加入的某个伙计问这个项目里的方法有没注释或说明啊,一般的答案都是木有.之后的事情,大家就都知道了,不再描述了.&lt;/p&gt;&#xD;
&lt;p&gt;其实生成项目里类或接口的注释,方法有很多,前几天还在园子里看到一篇使用Sandcastle软件生成DLL文件的CHM帮助文档,我目前也是使用这个软件生成API文档,地址没有找到.感兴趣的朋友可以去搜索下,本篇重点不是讲解这个软件如何使用.&lt;/p&gt;&#xD;
&lt;p&gt;下面说一下业务场景,根据客户的业务需求,需要在NET程序里,展示某个类库中类的属性或方法列表供客户查看,如图-1所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753445594.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753453859.jpg" width="288" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-1&lt;/p&gt;&#xD;
&lt;p&gt;使用反射方式,可以非常简单的生成如上图所示的结构,如果就这样拿过去给客户看的话,客户估计直接啥眼了,这些是什么东东呢?接着,经过你长时间耐心的教导和解释这些方法如何使用,最后终于功夫不负有心人啊,客户说:这个需求先不做了&amp;#8230;.额,不知道你是该高兴还是该悲催呢?&lt;/p&gt;&#xD;
&lt;p&gt;OK,业务场景有了,我们就要找到方法解决它?起初,我采用的方法是通过Net的Attribute自定义属性来实现的.简单说下思路,就是创建如图-2所示的这些类,并且这些类均继承自Attribute类&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753461808.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753473345.jpg" width="217" height="224" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-2&lt;/p&gt;&#xD;
&lt;p&gt;目前,这些类中,均定义了两个属性,DisplayText和Descrip,即各对象的中文显示名称和描述性文字,如图-3所示.这样我们就可以在反射获取类或方法的过程中,获取它的自定义属性信息,使用这种方式,解决了我们的大部分问题,可以说是基本可以实现的.不过,它需要对DLL文件中的每个类或方法加上我们刚刚创建好的自定义属性类,工作量也确实不小.而且,在描述方法的参数信息时,由于参数个数不确定性,导致自定义属性编辑比较麻烦.最终,这个方法Over掉,没有被采纳.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753485755.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753492624.jpg" width="366" height="304" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-3&lt;/p&gt;&#xD;
&lt;p&gt;前几天忽然想起,我们可以将DLL中的类或方法的注释,直接生成XML文件,即在生成DLL的配置项中,勾选XML documention file这个选项即可,它就会生成这个DLL文件的XML注释文件.如图-4所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753506985.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753506396.jpg" width="244" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-4&lt;/p&gt;&#xD;
&lt;p&gt;我们现在来看看这个XML文件的格式,如图-5所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/20111031075352657.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753545999.jpg" width="565" height="367" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-5&lt;/p&gt;&#xD;
&lt;p&gt;解析这个XML文件,对于我们来说,简直是小儿科了,而且我们需要做的事情,就是补齐每个类或方法的注释信息,而不必额外再使用自定义属性来记录注释信息了.如果你之前有比较好的习惯,类或方法都有注释的话,那么恭喜你.你的任务已经完成了.解析方法如图-6所示,在我提供的文件中是完整的,大家可以直接下载.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753555278.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753577272.jpg" width="557" height="374" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-6&lt;/p&gt;&#xD;
&lt;p&gt;看看我们解析的效果吧,如图-7所示.得到下面的数据后,在反射过程中,就可以在这里查找了,包括类名称,方法名称,还包括方法所需的参数名称,这里应有尽有啊.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310753594042.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201110/201110310754014716.jpg" width="557" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;源文件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="1分钟生成Net对象的注释.Files" href="http://files.cnblogs.com/xiyang1011/1分钟生成Net对象的注释.Files.rar"&gt;1分钟生成Net对象的注释.Files&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2229745.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2011/10/31/2229745.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2011/07/16/2108130.html</id><title type="text">WebForm客户端调试工具log4javascript</title><summary type="text">上网查资料,无意间找到了这个小东东,在博客园里搜了下,相关资料不多.这里我写下,希望给更多的朋友带来便利.  从字面上很明显,它属于日志记录的工具,在WebForm客户端使用,这个我们就可以避免在需...</summary><published>2011-07-16T04:49:00Z</published><updated>2011-07-16T04:49:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2011/07/16/2108130.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2011/07/16/2108130.html"/><content type="html">&lt;p&gt;上网查资料,无意间找到了这个小东东,在博客园里搜了下,相关资料不多.这里我写下,希望给更多的朋友带来便利.&lt;/p&gt;&#xD;
&lt;p&gt;从字面上很明显,它属于日志记录的工具,在WebForm客户端使用,这个我们就可以避免在需要调试的时候加Window.Alert()方法来查看调试结果了.是不是和log4j和log4net很相似啊,没错,就是按照这个类库设计的,而且是支持多浏览器的&lt;/p&gt;&#xD;
&lt;p&gt;官网地址:http://log4javascript.org/index.html目前最新版本是1.4.1,在我提供的压缩文件中也有的&lt;/p&gt;&#xD;
&lt;p&gt;先看下如何使用吧?调用方式很简单!如图-1所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201107/201107161248531298.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201107/20110716124853676.jpg" width="557" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-1&lt;/p&gt;&#xD;
&lt;p&gt;引入js文件后,在页面级别定义变量,就可以了,结果如图-2所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201107/201107161248541972.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201107/20110716124856445.jpg" width="557" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-2&lt;/p&gt;&#xD;
&lt;p&gt;再发一篇参考博文:http://j2ee.blog.sohu.com/62086962.html&lt;/p&gt;&#xD;
&lt;p&gt;在看demo过程中,发现还可以将信息输入至后台,使用Ajax方法,如图-3所示.这种写法确实可以触发后台代码的事件.这里我使用的是Generic Handler文件,比较方便.&lt;/p&gt;&#xD;
&lt;p&gt;AjaxAppender方法的参数是url,即后台页面地址.本来我以为直接写log.degub的话,degub字符串的信息会直接传递到后台的,试了一下发现没有.如果通过图-3所示的方法是可行的,不过,是不是有些画蛇添足呢?有兴趣的童鞋可以继续研究下!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201107/201107161248569299.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201107/201107161248563410.jpg" width="244" height="53" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-3&lt;/p&gt;&#xD;
&lt;p&gt;总得来说,我们又可以轻松了一些,有这个工具,调试WebForm前台页面代码就方便很多的.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;文件&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="log4javascript-1.4.1" href="http://files.cnblogs.com/xiyang1011/log4javascript-1.4.1.zip"&gt;log4javascript-1.4.1&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="ExampleWebForm(VS2010)" href="http://files.cnblogs.com/xiyang1011/ExampleWebForm.rar"&gt;ExampleWebForm(VS2010)&lt;/a&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2108130.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2011/07/16/2108130.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2011/07/06/2099600.html</id><title type="text">管理软件开发.工具篇</title><summary type="text">管理类软件,尤其是和Db交互非常紧密的软件,一般都是从Db中取出数据,在前台UI界面做操作,然后再保存至Db.当然其中的过程是非常复杂的,这个过程我们已经非常清晰.从零代码开发,慢慢积累,形成自己公...</summary><published>2011-07-06T14:22:00Z</published><updated>2011-07-06T14:22:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2011/07/06/2099600.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2011/07/06/2099600.html"/><content type="html">&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 管理类软件,尤其是和Db交互非常紧密的软件,一般都是从Db中取出数据,在前台UI界面做操作,然后再保存至Db.当然其中的过程是非常复杂的,这个过程我们已经非常清晰.从零代码开发,慢慢积累,形成自己公司的类库,方法集或框架,也是可以的. 若其中有辅助开发工具协助的话,开发效率肯定会事半功倍.本节主要讨论辅助开发工具&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 首先会和Db打交道,这其中会涉及Db库的创建,备份和还原,Db对象的创建及维护,数据的导入和导出,生成SQL语句等系列操作,而且要支持多Db的.目前,支持SqlServer的此类工具是SqlServer05或08的查询分析器,支持Oracle的此类工具是PL/SQL,需要将这两个工具整合至一起,方便我们同时操作多种Db.   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="154"&gt;           &lt;p&gt;&lt;b&gt;辅助工具名称&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;p&gt;&lt;b&gt;Db&lt;/b&gt;&lt;b&gt;管理分析器&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="154"&gt;           &lt;p&gt;&lt;b&gt;基本功能&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;支持Db&lt;/b&gt;&lt;b&gt;创建和Db&lt;/b&gt;&lt;b&gt;对象的创建及维护,&lt;/b&gt;&lt;b&gt;数据导入和导出,SQL&lt;/b&gt;&lt;b&gt;语句生成&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;仿SqlServer&lt;/b&gt;&lt;b&gt;的查询分析器,&lt;/b&gt;&lt;b&gt;同时要支持Oracle&lt;/b&gt;&lt;b&gt;的Db&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="154"&gt;           &lt;p&gt;&lt;b&gt;扩展功能&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;自PowerDesigner&lt;/b&gt;&lt;b&gt;文件中生成Db&lt;/b&gt;&lt;b&gt;对象结构&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Db&lt;/b&gt;&lt;b&gt;对象,&lt;/b&gt;&lt;b&gt;以表对象为主,&lt;/b&gt;&lt;b&gt;生成实体类文件&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Db对象创建成功以后,我们需要在前台来维护数据,即UI界面的创建.比较传统的方式是在VS开发环境中,生成一个webform/winform页面,往其中拖控件,后台编写代码用于控件绑定和获取数据,数据操作等.如果一个系统有很多模块,而每个模块又包含很多页面,采用这种方式无非会增加工作量,即重复劳动过多.因此,UI界面的快速生成,控件值的绑定和获取,最好有个工具可能快速生成.   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="154"&gt;           &lt;p&gt;&lt;b&gt;辅助工具名称&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;p&gt;&lt;b&gt;UI&lt;/b&gt;&lt;b&gt;设计器&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="154"&gt;           &lt;p&gt;&lt;b&gt;基本功能&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;根据Db&lt;/b&gt;&lt;b&gt;表/&lt;/b&gt;&lt;b&gt;视图,&lt;/b&gt;&lt;b&gt;生成UI&lt;/b&gt;&lt;b&gt;界面,&lt;/b&gt;&lt;b&gt;可以调整控件的位置,&lt;/b&gt;&lt;b&gt;大小等属性.&lt;/b&gt;&lt;b&gt;下拉菜单的绑定数据可动态修改&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;根据实体类,&lt;/b&gt;&lt;b&gt;生成UI&lt;/b&gt;&lt;b&gt;界面,&lt;/b&gt;&lt;b&gt;功能如上所述&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="154"&gt;           &lt;p&gt;&lt;b&gt;扩展功能&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="379"&gt;           &lt;p&gt;1. &lt;b&gt;多张Db&lt;/b&gt;&lt;b&gt;表/&lt;/b&gt;&lt;b&gt;视图,&lt;/b&gt;&lt;b&gt;可生成至同一UI&lt;/b&gt;&lt;b&gt;界面,&lt;/b&gt;&lt;b&gt;即一个UI&lt;/b&gt;&lt;b&gt;界面的数据,&lt;/b&gt;&lt;b&gt;可能会涉及多个Db&lt;/b&gt;&lt;b&gt;表或实体&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;2. &lt;b&gt;设计方式支持&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;a) &lt;/b&gt;&lt;b&gt;拖拉式,&lt;/b&gt;&lt;b&gt;即微软VS&lt;/b&gt;&lt;b&gt;环境模式&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;b) &lt;/b&gt;&lt;b&gt;Word&lt;/b&gt;&lt;b&gt;文档生成表格,&lt;/b&gt;&lt;b&gt;表格内增加控件关键字模式&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;c) &lt;/b&gt;&lt;b&gt;Db&lt;/b&gt;&lt;b&gt;表直接根据列顺序列名称生成Word&lt;/b&gt;&lt;b&gt;文档&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UI界面设计完成以后,就需要有人对此页面操作.在操作的过程中,可能会出现同一页面被多人操作,即每人只完成页面其中的一部分操作.这就需要工作流来完成这项操作.工作流的作用,可以梳理业务流程,即可以确定某个业务单据的下一任操作者,也可以确定某个操作者可以操作哪些业务单据.   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;辅助工具名称&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;Flow&lt;/b&gt;&lt;b&gt;流程设计器&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;基本功能&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;确定一个单据由哪些操作员维护&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;一个业务场景由哪些业务单据组成,&lt;/b&gt;&lt;b&gt;每个业务单据如何分配&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;扩展功能&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;对业务流程可监控,&lt;/b&gt;&lt;b&gt;查看每个业务流程的所处状态&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;记录每个业务流程的操作日志&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UI设计器,只是完成了界面的生成,简单的控件值收集和赋值.对于UI页面某个事件内的执行代码,是否也可以通过设计器来完成.举例说明,Page_Load事件中,我们可能会做如下操作:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i. 绑定下拉菜单控件数据&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ii. 设置控件初始值&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; iii. 根据页面编辑类型,若为Update或View类型,则需要从Db中加载数据,绑定至控件&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 以上步骤只是整个页面中的某个事件的执行代码逻辑,如果有一个图形化的事件设计器,来定义这些操作步骤,即通过拖拉控件的方式实现上述代码,而不再是开发员手工编写代码这种方式.工作效率会得到明显提升.这里有个问题需要考虑:事件划分的颗粒度.它将直接影响事件规则设计器的复杂难易程度   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;辅助工具名称&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;事件规则设计器&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;基本功能&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;确定一个页面中,&lt;/b&gt;&lt;b&gt;可以执行哪些事件&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;每个事件的流程定义,&lt;/b&gt;&lt;b&gt;即不通过编写代码方式,&lt;/b&gt;&lt;b&gt;直接可以进行图形化设计&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;扩展功能&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;业务规则图形化设计,&lt;/b&gt;&lt;b&gt;举例:&lt;/b&gt;&lt;b&gt;前台页面下拉菜单控件,&lt;/b&gt;&lt;b&gt;需要绑定数据,&lt;/b&gt;&lt;b&gt;这是一个方法,&lt;/b&gt;&lt;b&gt;也可以认为是业务规则,&lt;/b&gt;&lt;b&gt;它的作用是从Db&lt;/b&gt;&lt;b&gt;中获取数据,&lt;/b&gt;&lt;b&gt;再把数据绑定到某个下拉菜单,&lt;/b&gt;&lt;b&gt;同时,&lt;/b&gt;&lt;b&gt;定义好数据列和显示列名称.&lt;/b&gt;&lt;b&gt;这个操作也可以图形化设计&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 对于已经保存至Db中的数据,有时,不仅需要维护(CUID)操作,更重要的是要对数据进行统计和分析,即需要以另外一种方式展现数据,即报表,比如录入的销售订单数据,我们需要对订单进行分析,得出哪些产品容易销售,哪些产品单价过高等.这也需要一个非常灵活的设计工具来实现,即报表设计器.报表的展示方式除了数据之外,还有就是图表,如柱状图,饼图等,这些也是要可以支持的.目前RLDC是个不错的东东,微软也在力推这个技术.   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;辅助工具名称&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;报表设计器&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;基本功能&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;格式比较固定的报表,&lt;/b&gt;&lt;b&gt;可以通过设计器实现,&lt;/b&gt;&lt;b&gt;包括取数据,&lt;/b&gt;&lt;b&gt;展现数据方式等&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;提供向导,&lt;/b&gt;&lt;b&gt;仿制作RLDC&lt;/b&gt;&lt;b&gt;文件&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;扩展功能&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;Webform&lt;/b&gt;&lt;b&gt;和Winform&lt;/b&gt;&lt;b&gt;等报表设计器可以共用一套&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 系统的数据,大都存储在Db或某个文件中,有时需要将它打印,以纸制文件保存.这就涉及数据的打印等.打印格式,也是需要经常调整的,如果调整频繁由开发员修改代码调整,工作效率会降低不少,如果提供一个图形化的打印设计器,可以解决上述此问题,最好同时支持Webform和Winform等多种软件类型   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;辅助工具名称&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;打印设计器&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;基本功能&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;打印格式可以自由调整,&lt;/b&gt;&lt;b&gt;控件位置变化不必由代码修改实现&lt;/b&gt;&lt;/p&gt;            &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;同时支持webform&lt;/b&gt;&lt;b&gt;和winform&lt;/b&gt;&lt;b&gt;两种打印&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="151"&gt;           &lt;p&gt;&lt;b&gt;扩展功能&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="381"&gt;           &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 以上只是对每个辅助开发工具的概括介绍,后面的文章中会对每个工具做更为详细的介绍,敬请期待!&lt;/p&gt; &lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2099600.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2011/07/06/2099600.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2011/06/21/2086400.html</id><title type="text">拖延-程序员最大的敌人</title><summary type="text">今天发生了一连串非常悲催的事情.经过如下:  昨天约好客户今天早上8:30见面,由于距离较近,准备骑自行车前往.前段时间骑过,有点小问题,没太在意.终于在今天早上,它怒了,嫌我这些天没搭理它,给了我...</summary><published>2011-06-21T13:58:00Z</published><updated>2011-06-21T13:58:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2011/06/21/2086400.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2011/06/21/2086400.html"/><content type="html">&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 今天发生了一连串非常悲催的事情.经过如下:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 昨天约好客户今天早上8:30见面,由于距离较近,准备骑自行车前往.前段时间骑过,有点小问题,没太在意.终于在今天早上,它怒了,嫌我这些天没搭理它,给了我一个下马威. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 早上7:45出发,大约半小时就可以到达目的地,可车链子掉了,这个问题以前曾经发生过,装上就可以了.可今天非常不幸,装上不出10米,又掉了.大概100米的距离,掉了不下10次…(注1)&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 为了不迟到,立即调整战略,步行到最近的修车点,到达修车点,时间指向了8:15,满心欢喜的以为车修好也可以赶上,刚刚好.谁知更为悲催的事情发生了,修车的老板还没开门,莫非他们的工作时间也是早九晚五了?白领啊!&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 没办法,继续调整战略,把车停到一个菜市场门口(停的车很多,被偷的可能性很小,嘿嘿),直接骑公共自行车(杭州一项比较好的福利),时间是8:25(注2).骑车还算顺利,8:35达到目的地,如果及时把车还掉,与客户见面还算顺利.谁知更更为悲催的事情发生,没有空车位,而且旁边有四五个人也在等车,轮到我的话,估计需要更多的时间.没办法,去附近其他的还车点吧,在第6个还车点终于找到了还车位,时间已经指向了8:50.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 最后走到客户那里,时间最后定格在9:10,额,整整迟到了40分钟,本来骑车25分钟就可以解决的事情,被我的拖延,额外增加了一个小时.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 在外面跑了一天,本以为事情会就此告一段落, 下午修好车回家.结果下午又去修车的地方,发现门还是关着的,隔壁的人说关门了.额,瞬间石化,莫非他们也是8小时工作制,早上九点上班,下午5点下班.貌似这是程序员最幸福的日子啊.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 现在的程序员,头顶星星出门,脚踩月亮回家.引用刚哥的话:起得比鸡早,睡得比鸡晚.不是我不明白,这世界变化快啊!&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 纵观整个事情,悲催的经过是次要的,重要的是我们要从中吸取经验啊.有以下几点我们来分析下&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 注1:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1. 小问题如果不及时解决,以后可能会酿成致命的大问题.就好比一个很不起眼的小bug,如果某天给一个大佬演示,被大佬发现了.后果你们懂的.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2. 拖延,一定要改掉这个坏习惯.我们有时候会想,下周,下个月做好更好的功能出来.可往往到了下周或下个月,却发现什么也没有做.最好的方法是今天就开始行动.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 注2:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1. 本来有其他几种选择,比如乘坐公交车,打的.最后选择的是自行车,没有预料到目的地还车难的情况.只凭以往的经验判断,还车会比较容易.并没有认真考虑目的地所处的地段以及车位的紧缺&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2. 我们在遇到问题时,往往先是从本来的经验入手,查找关于这个问题的曾结解决方法,并没有从问题本身出发.最后的结果可能就是路没有走对.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2086400.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2011/06/21/2086400.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiyang1011/archive/2011/06/07/2074025.html</id><title type="text">VSTO+WinForm+WebService+WCF+WPF示例</title><summary type="text">前段时间去图书馆借书,无意中发现这样一本书,书名是”新一代 .NET Office开发 Excel篇”,书名比较有意思,就借出来看看.看完以后,发现确实不错.它挖掘了Office产品中我们经常忽略的...</summary><published>2011-06-07T00:57:00Z</published><updated>2011-06-07T00:57:00Z</updated><author><name>Vincent.Q</name><uri>http://www.cnblogs.com/xiyang1011/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiyang1011/archive/2011/06/07/2074025.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiyang1011/archive/2011/06/07/2074025.html"/><content type="html">&lt;p&gt;前段时间去图书馆借书,无意中发现这样一本书,书名是&amp;#8221;新一代 .NET Office开发 Excel篇&amp;#8221;,书名比较有意思,就借出来看看.看完以后,发现确实不错.它挖掘了Office产品中我们经常忽略的部分.比如图表,透视表等.下面根据我对这本书的笔记来看看VSTO这个被微软偷偷发布,而被我们遗弃的东东到底是什么样子?由于这本书只针对Excel部分做操作,所以这是重点,不过后面还有一个示例是基于Word的.&lt;/p&gt;&#xD;
&lt;p&gt;我们首先创建一个WindowApplication程序,然后引入必要的类库.如图-1所示.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856048405.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856053323.jpg" width="296" height="284" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-1&lt;/p&gt;&#xD;
&lt;p&gt;创建WindowApplication的目的是熟悉Office操作的语法.我们现在用代码来实际操作一下Excel文件,代码比较简单,这里不再详述,如图-2所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856069254.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856088499.jpg" width="558" height="583" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-2&lt;/p&gt;&#xD;
&lt;p&gt;需要注意的地方&lt;/p&gt;&#xD;
&lt;p&gt;1. 在循环获取单元格值的时候,我们可以先将值放在一个二维数组中,再从二维数据中获取单元格值,效果会提升好几个档次.推荐使用&lt;/p&gt;&#xD;
&lt;p&gt;2. 使用完毕以后,或者窗体关闭时,一定要调用app1.Quit()方法,直接对Excel文件操作的话,进程方面还需要控制和处理,因为这里有隐患.&lt;/p&gt;&#xD;
&lt;p&gt;以上讲述的是最基本的操作,包括单元格取值和赋值等.&lt;/p&gt;&#xD;
&lt;p&gt;下面看一个VSTO的程序,VSTO的程序环境好像需要打个补丁之类的,具体情况记不清了.先说下我的环境VS2008 SP1+NET3.5SP1,环境搭好以后,我们直接创建一个项目文件,我的Office版本是2007.如图-3所示.如果没出现的话,请自行解决.博客园也有不少这方面的贴子,搜索下就OK了.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856094256.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856108825.jpg" width="557" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-3&lt;/p&gt;&#xD;
&lt;p&gt;这里的项目文件是ExcelWorkBook1,这演示了如下几个功能.&lt;/p&gt;&#xD;
&lt;p&gt;功能1:Sheet1表单的录入,其数据取自Sheet2,并实现单元格下拉菜单功能(没有使用控件),并根据下拉菜单选中项联动生成其他单元格值,并计算单价和数量,生成金额的单元格值.如图-4所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856118759.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856128693.jpg" width="557" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-4&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856139466.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image009" border="0" alt="clip_image009" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856139923.jpg" width="558" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-5&lt;/p&gt;&#xD;
&lt;p&gt;功能2:使用代码调用打印功能.是Excel自身的打印功能.如图-5所示&lt;/p&gt;&#xD;
&lt;p&gt;功能3:生成某一年日历&lt;/p&gt;&#xD;
&lt;p&gt;功能4:获取系统颜色,颜色取自System.Drawing.KnownColor[]对象&lt;/p&gt;&#xD;
&lt;p&gt;功能5:获取图形,注意是图形,不是图表&lt;/p&gt;&#xD;
&lt;p&gt;功能6:增加winform控件,对的,是WinForm控件(确定一定以及肯定).而且还可以动态创建.代码自行参考&lt;/p&gt;&#xD;
&lt;p&gt;功能7:还增加了一个这样的控件,如图-6所示.估计大家以前很少用到吧,呵呵.我看完这本书才知道的.它的作用是扩展Office项目文件的功能.比如:可以利用这个控件,拖动一些Winform控件,做些Office项目文件不能做的事情.比如:可以在Excel放置一些待播放的视频或音频文件.使用这个控件调用播放器,或显示其详细信息等.最常用的场景就是单据页面.使用Excel加载列表数据,这个控件做为单据页面,再搞个保存,取消按钮,也挺简单的.控件效果图如图-7所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/20110607085614413.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856149268.jpg" width="520" height="97" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-6&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856151710.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image011" border="0" alt="clip_image011" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856166312.jpg" width="332" height="561" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-7&lt;/p&gt;&#xD;
&lt;p&gt;ExcelWorkbook1的示例文件,我们只是小试牛刀一下.下面的示例更加强大.很佩服微软,将事情简单化.只是我们自己总把事情复杂化.唉,悲催.&lt;/p&gt;&#xD;
&lt;p&gt;继续看ExcelWorkbook3的项目文件,项目布局如图-8所示. 这个项目文件包含如下几个功能&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856163181.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856173638.jpg" width="308" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-8&lt;/p&gt;&#xD;
&lt;p&gt;它所包含的功能如下&lt;/p&gt;&#xD;
&lt;p&gt;功能1:代码方式增加单元格批注功能&lt;/p&gt;&#xD;
&lt;p&gt;功能2:动态增加菜单栏,工具栏,事件可自行绑定&lt;/p&gt;&#xD;
&lt;p&gt;功能3:更改Application级别的属性&lt;/p&gt;&#xD;
&lt;p&gt;功能4:单元格或Sheet级别的复制&lt;/p&gt;&#xD;
&lt;p&gt;功能5:图表,整个Sheet就是一个图表,它与Sheet的级别相同,数据源可取自Excel文件本身,也可获取外部数据源.如图-9所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856197933.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image013" border="0" alt="clip_image013" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856219164.jpg" width="573" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-9&lt;/p&gt;&#xD;
&lt;p&gt;功能6:图表,某个Sheet中,即包含数据也包含图表,如图-10所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856227014.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image015" border="0" alt="clip_image015" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856242355.jpg" width="557" height="394" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-10&lt;/p&gt;&#xD;
&lt;p&gt;功能7:透视表.哈,这个功能要重点说下,这个功能有点像BI里的功能.可以钻取其下面的数据.如图-11所示.左侧部分是原始数据,右侧是已透视过的数据,而且生成的数据,字段列还可以自行显示/隐藏等.而且还可以根据透视数据生成图表,在示例代码中也包含的,可自行参数.这个功能可以用在含有决策功能的功能系统里,比如:某个部门的销售额,某个科室的日收入支出表等.使用Excel的这个功能,比起那些图表控件,不知道要方便多少.有篇参考文章,地址如下:&lt;/p&gt;&#xD;
&lt;p&gt;http://www.cnblogs.com/cameo/archive/2008/12/01/1344956.html&lt;/p&gt;&#xD;
&lt;p&gt;不过,有个技术点没有研究清楚.就是VSTO的项目文件,发布好以后,如何在Web程序里显示.有知道的童鞋,请点拔一二.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856269682.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image017" border="0" alt="clip_image017" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856288960.jpg" width="557" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-11&lt;/p&gt;&#xD;
&lt;p&gt;功能8:调用WebService功能.一开始感觉会非常复杂.尝试之后,才发现其实和WinForm调用WebService方式是一样的.如图-12所示.WebService的地址是我在网上找的,貌似不太稳定,有时会连不上.大家可以自己另外找个.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856282482.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image018" border="0" alt="clip_image018" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856294368.jpg" width="419" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-12&lt;/p&gt;&#xD;
&lt;p&gt;以上是关于Excel部分的示例.下面说一个更加重量级的,基于Word的插件式功能.它使用了WPF和WCF技术,算是很潮吧.它包括3个项目文件.如图-13所示.&lt;/p&gt;&#xD;
&lt;p&gt;这个项目参考地址如下&lt;a href="http://msdn.microsoft.com/zh-cn/magazine/cc163292.aspx"&gt;http://msdn.microsoft.com/zh-cn/magazine/cc163292.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;有示例demo可以直接下载,我是将其中的代码自已写了一遍!这里要注意的是WCF的发布!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856303746.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image019" border="0" alt="clip_image019" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856308663.jpg" width="233" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-13&lt;/p&gt;&#xD;
&lt;p&gt;先说下这个Word插件的功能,是将一组图片以幻灯片方式加载到Word文档中,选中某张图片,将图片描述显示到Word文档中.基中,展示图片的控件就是WPF,它被用在了WinForm控件中(有点意思吧).图片描述文字放在XML文件中,通过WCF方式获取(更有点意思吧).先看下最终的效果图,如图-14所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856328531.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image021" border="0" alt="clip_image021" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/20110607085633351.jpg" width="558" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-14&lt;/p&gt;&#xD;
&lt;p&gt;简单说下项目的功能&lt;/p&gt;&#xD;
&lt;p&gt;WCFServiceLibrary项目,功能是定义WCF服务,有点意思的是,这个类库是Net2.0的,加载一下WCF的相关类库,也是可以用的.我之前一直以为只有3.5才可以呢.&lt;/p&gt;&#xD;
&lt;p&gt;WPFControlLibrary是WPF的用户控件,类库是3.5的.创建好WPF控件以后,如何转为WinForm控件呢?是通过创建WinForm的用户控件,然后里面再加载WPF控件就可以了.如图-15所示&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856348333.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image022" border="0" alt="clip_image022" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856344679.jpg" width="278" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图-15&lt;/p&gt;&#xD;
&lt;p&gt;WordAddIn1项目文件创建的是&lt;a href="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856346839.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image023" border="0" alt="clip_image023" src="http://images.cnblogs.com/cnblogs_com/xiyang1011/201106/201106070856353774.jpg" width="145" height="30" /&gt;&lt;/a&gt;类型的项目文件.其中的WinFishEyeByWPF控件就是包装了WPF控件的WinForm自定义控件.里面的代码不详细讲了.大家自己看吧,感觉不是很复杂的.有VSTO基础的人看起来会更容易理解!&lt;/p&gt;&#xD;
&lt;p&gt;好了,这个示例就讲这么多,之所以要讲一篇VSTO的文章,是因为它其实可以代替我们做很多事情的,只是我们平常忽略了他,只是把Excel文件用来存储数据.导入导出数据使用,如果合理运用,我们完整可以基于Office文档开发出一套管理系统,功能不比使用VS开发出的WinForm或WebForm逊色的.&lt;/p&gt;&#xD;
&lt;p&gt;端午节,吃粽子去了,祝各位节日快乐!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;示例代码&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="ExampleVSTO" href="http://files.cnblogs.com/xiyang1011/ExampleVSTO.rar"&gt;ExampleVSTO&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xiyang1011/aggbug/2074025.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiyang1011/archive/2011/06/07/2074025.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
