<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>开源 ASP.Net/C# 博客平台 V3.2</title><link>http://blog.entlib.com/MainFeed.aspx?GroupID=1</link><description>http://blog.entlib.com</description><generator>EntLib.com Blog Version 3.0.0.0</generator><item><title>关于11. 26至12. 1-- EntLib.com服务器中断公告</title><link>http://blog.entlib.com/EntLib/archive/2009/12/01/11.-2612.-1-entlib.com.aspx</link><pubDate>Mon, 30 Nov 2009 19:41:57 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/12/01/11.-2612.-1-entlib.com.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/228.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/228.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/12/01/11.-2612.-1-entlib.com.aspx#comment</comments><slash:comments>3</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/228.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">关于11. 26至12. 1-- EntLib.com服务器中断公告</source><description>&lt;div align="center"&gt;&lt;span style="color: #ff0000"&gt;&lt;b&gt;关于11. 26&lt;/b&gt;&lt;b&gt;至12. 1-- EntLib.com&lt;/b&gt;&lt;b&gt;服务器中断公告&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;近日央视对移动机房相关涉黄问题进行报道，中国移动因信息安全检查工作需要，对机房进行整治，于11.26日早8点开始，中国移动全面暂停怒江路机房所有服务器的接入服务，并要检查每个IP地址对应的网站信息。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;11.26日移动已经明确封网，此次扫黄打非活动会持续到年底。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;可怜、无辜的EntLib.com 服务器也受到牵连，短期内也看不到解封的希望，欲哭无泪 …….&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;12. 1日 EntLib.com将服务器搬迁至电信机房，下午5：00网站已全面恢复！&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;因此给您带来了不便，在此EntLib.com向广大用户表示深深的歉意，并感觉大家对EntLib.com一如既往的支持！&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;相关链接：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://home.cnblogs.com/group/topic/34453.html"&gt;EntLib.com&lt;span&gt;&lt;span&gt;官方网站无法访问疑受移动机房涉黄牵连&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/228.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>比较Windows Workflow Foundation和BizTalk Server</title><link>http://blog.entlib.com/EntLib/archive/2009/09/26/windows-workflow-foundationbiztalk-server.aspx</link><pubDate>Fri, 25 Sep 2009 20:47:20 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/09/26/windows-workflow-foundationbiztalk-server.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/216.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/216.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/09/26/windows-workflow-foundationbiztalk-server.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/216.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">比较Windows Workflow Foundation和BizTalk Server</source><description>&lt;div align="center"&gt;&lt;b&gt;比较Windows Workflow Foundation&lt;/b&gt;&lt;b&gt;和BizTalk Server&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;简介&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;WF和BizTalk Server 有很多相似性，下面分析、比较WF和BizTalk，和大家一起分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Windows Workflow Foundation&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;WF 是一种编程模型、一组工具控件、和运行时，在Windows平台上实现工作流。WF运行时是.NET Framework的一部分，首先出现在.NET Framework 3.0，随后在.NET Framework 3.5 中进行改进。关于WF的范例学习程序，&lt;a href="http://forum.entlib.com/Default.aspx?g=topics&amp;amp;f=14"&gt;&lt;span&gt;&lt;span&gt;请参考如下链接&lt;/span&gt;&lt;/span&gt;。&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Microsoft BizTalk Server&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Microsoft BizTalk Server提供了高效的方式，通过可管理的业务流程来实现系统和业务集成，让不同的系统和业务之间进行灵活地、自动地交互。关于BizTalk 的范例学习程序，&lt;a href="http://forum.entlib.com/Default.aspx?g=topics&amp;amp;f=13"&gt;&lt;span&gt;&lt;span&gt;请参考如下链接&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;。BizTalk Server 提供了对业务流程管理（Business Process Management, BPM）和自动化的开发和运行环境。&lt;/div&gt;
&lt;div align="center"&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="486" height="282" src="/userfiles/EntLib/image/BiztalkServer/biztalk_2009_1.jpg" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;WF&lt;/b&gt;&lt;b&gt;和BizTalk Server&lt;/b&gt;&lt;b&gt;的本质区别&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;WF和BizTalk Server并不是相互竞争的技术，而是互补的技术，用来满足不同的需要。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="667" height="324" src="/userfiles/EntLib/image/BiztalkServer/biztalk_WF_comparison_1.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: left"&gt;
&lt;div&gt;&lt;b&gt;WF &lt;/b&gt;&lt;b&gt;和BizTalk Server&lt;/b&gt;&lt;b&gt;的功能比较&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;下表显示了WF和BizTalk Server的功能比较。&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="667" height="951" src="/userfiles/EntLib/image/BiztalkServer/biztalk_WF_comparison_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文由&lt;a href="http://forum.entlib.com/"&gt;http://forum.EntLib.com&lt;/a&gt; 开源ASP.NET论坛小组编译，原文链接如下:&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.codeproject.com/KB/biztalk/BizTalk-WF-Compare.aspx"&gt;Comparison between Windows Workflow Foundation and Biz Talk Serve&lt;/a&gt;r&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/216.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>ASP.NET MVC 最佳实践向导（Best Practices ）</title><link>http://blog.entlib.com/EntLib/archive/2009/09/20/asp.net-mvc-best-practices.aspx</link><pubDate>Sat, 19 Sep 2009 19:03:54 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/09/20/asp.net-mvc-best-practices.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/214.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/214.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/09/20/asp.net-mvc-best-practices.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/214.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">ASP.NET MVC 最佳实践向导（Best Practices ）</source><description>&lt;div align="center"&gt;&lt;b&gt;ASP.NET MVC &lt;/b&gt;&lt;b&gt;最佳实践向导（Best Practices &lt;/b&gt;&lt;b&gt;）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ASP.NET MVC 是微软官方提供的一个新的开发框架，下面有一些博客帖子介绍了使用ASP.NET MVC 框架开发Web Applications的推荐最佳实践。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a target="_blank" href="http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx"&gt;Part I&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a target="_blank" href="http://weblogs.asp.net/rashid/archive/2009/04/03/asp-net-mvc-best-practices-part-2.aspx"&gt;Part II&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;ASP.NET MVC &lt;/b&gt;&lt;b&gt;资源&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=476"&gt;&lt;span&gt;&lt;span&gt;中文&lt;/span&gt;Professional ASP.NET MVC 1.0 – Nerd Dinner &lt;span&gt;范例程序&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCSampleApplicationsOpenSourceExamplesTutorials"&gt;ASP.NET MVC Sample Applications - Open-Source Examples and Tutorials&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCScreencastsVideosWebcastsLearnASPNETMVCFramework"&gt;&lt;font color="#034af3"&gt;ASP.NET MVC Screencasts Videos and Webcasts - Learn ASP.NET MVC Framework&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCVideosScreencastsMIX09SessionsFreeTraining"&gt;&lt;font color="#034af3"&gt;ASP.NET MVC Videos and Screencasts from MIX 09 Sessions - Free Training&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/DownloadASPNETMVCSampleMovieDatabaseApplicationDevConnections"&gt;&lt;font color="#034af3"&gt;Download ASP.NET MVC Sample Movie Database Application from DevConnections&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: #343434; font-size: 9pt"&gt;&lt;a href="http://www.tampadev.org/News/Details/ASPNETMVCTrainingKitHandOnLabsSamplesTutorialsPresentations"&gt;ASP.NET MVC Training Kit - Hand-On Labs Samples Tutorials Presentations&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/214.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>业务逻辑层（ASP.NET 3.5 Enterprise Application Development）读书笔记</title><link>http://blog.entlib.com/EntLib/archive/2009/07/04/asp.net-3.5-enterprise-application-development-again.aspx</link><pubDate>Fri, 03 Jul 2009 08:50:30 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/07/04/asp.net-3.5-enterprise-application-development-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/195.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/195.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/07/04/asp.net-3.5-enterprise-application-development-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/195.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">业务逻辑层（ASP.NET 3.5 Enterprise Application Development）读书笔记</source><description>&lt;div align="center"&gt;&lt;b&gt;业务逻辑层（ASP.NET 3.5 Enterprise Application Development&lt;/b&gt;&lt;b&gt;）读书笔记&lt;/b&gt;&lt;/div&gt;
&lt;div align="center"&gt;&lt;b&gt;-- Problem – Design – Solution&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文是针对Wrox出版的《ASP.NET 3.5 Enterprise Application Development With Visual Studio 2008 Problem Design Solution》该书第三章Business Logic Layer（业务逻辑层）读书笔记。&lt;a href="http://forum.entlib.com/"&gt;http://forum.EntLib.com&lt;/a&gt; 开源论坛小组提供，欢迎交流，分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上一篇文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx"&gt;数据访问层（ASP.NET 3.5 Enterprise Application Development）读书笔记&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;原文介绍在三层架构应用中业务逻辑层的设计。在业务逻辑层中，定义了四个基类，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="538" height="477" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter3_1.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="" width="535" height="225" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter3_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;ENTBaseBO &lt;/b&gt;&lt;b&gt;是业务对象的基类，不允许用户改变。&lt;/b&gt;通常，这一类型的业务对象显示在用户界面的下拉列表框。该类中包含了一些所有业务对象共同的属性，如ID、InsertDate、InsertENTUserAccountId…等等。另外，增加了一个有用的只读属性 DisplayText，以及一个对应的抽象方法GetDisplayText()，必须在继承子类中实现该方法。&lt;/div&gt;
&lt;div&gt;public string DisplayText&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div style="text-indent: 21pt"&gt;get { return GetDisplayText(); }&lt;/div&gt;
&lt;div&gt;}&lt;/div&gt;
&lt;div&gt;protected abstract string GetDisplayText();&lt;/div&gt;
&lt;div&gt;这一属性可用来将对象显示在UI层或者任何数据绑定控件。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;该类唯一的公有方法Load，用来从数据库中检索数据 – 没有增加、更新、或删除操作。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #region&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Abstract Methods&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; Load(&lt;span style="color: blue"&gt;int&lt;/span&gt; id);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MapEntityToCustomProperties(&lt;span style="color: #2b91af"&gt;IENTBaseEntity&lt;/span&gt; entity);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; GetDisplayText();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #endregion&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Abstratct Methods&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #region&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Public Methods&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MapEntityToProperties(&lt;span style="color: #2b91af"&gt;IENTBaseEntity&lt;/span&gt; entity)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {            &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (entity != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                InsertDate = entity.InsertDate;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                InsertENTUserAccountId = entity.InsertENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                UpdateDate = entity.UpdateDate;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                UpdateENTUserAccountId = entity.UpdateENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                Version = entity.Version;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;this&lt;/span&gt;.MapEntityToCustomProperties(entity);&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 9pt"&gt;        #endregion&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; Public Methods&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;任何继承ENTBaseBO 的业务类必须事先Load和MapentityToCustomProperties 方法。在实现Load方法时，从DAL检索一个单一的实体，并调用MapEntityToProperties 方法。MapEntityToProperties 方法负责将5个公共的字典赋值给当前的对象实例，并接着调用MapEntityToCustomProperties 方法。MapEntityToCustomProperties 方法则负责将其他的实体对象的属性赋值给业务对象的属性，这是因为这些属性不是基类中的共用的属性。 --- &lt;a href="http://forum.entlib.com/"&gt;http://forum.EntLib.com&lt;/a&gt; 开源小组注：作者使用的业务对象（Business Object）是自己编写的，不是LINQ to SQL 设计器自动创建的实体对象（Entity Object）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面是业务对象中，Load和MapEntityToCustomProperties 方法的一段范例代码：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;bool&lt;/span&gt; Load(&lt;span style="color: blue"&gt;int&lt;/span&gt; id)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt; userAccount = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ENTUserAccountData&lt;/span&gt;().Select(id);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (userAccount != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;                MapEntityToProperties(userAccount);&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }        &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MapEntityToCustomProperties(&lt;span style="color: #2b91af"&gt;IENTBaseEntity&lt;/span&gt; entity)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt; userAccount = (&lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt;)entity;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            ID = userAccount.ENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            WindowsAccountName = userAccount.WindowsAccountName;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            FirstName = userAccount.FirstName;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            LastName = userAccount.LastName;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            Email = userAccount.Email;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            IsActive = userAccount.IsActive;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ENTBaseBOList 集合类表示ENTBaseBO 基类集合，包含唯一的一个抽象方法Load，该方法负责从数据库中检索所有的记录。如果你需要过滤部分记录，你可以在继承类中重载Load方法。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;ENTBaseEO &lt;/b&gt;&lt;b&gt;是另一个抽象类，EO&lt;/b&gt;&lt;b&gt;表示“可编辑对象（Edit Object&lt;/b&gt;&lt;b&gt;）”，表示一个单一实例的特定业务对象。&lt;/b&gt;ENTBaseEO 和 ENTBaseBO的区别是：ENTBaseEO 允许对象使用者增加、更新和删除数据库记录。ENTBaseEO继承自ENTBaseBO。&lt;/div&gt;
&lt;div&gt;ENTBaseEO 类中添加了一个枚举类型DBActionEnum：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;DBActionEnum&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            Save,&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            Delete&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;同时，也包含DBActionEnum的公有属性DBAction：&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 9pt"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: #2b91af"&gt;DBActionEnum&lt;/span&gt; DBAction { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于Save方法，其中一个在基类中实现，并调用另一个抽象的Save方法，该方法必须在继承子类中实现，因为至少需要传入具体的参数。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在保存记录到数据库之前，必须调用Validate方法进行业务数据和规则的验证。其中，会涉及到ENTValidationError 类和ENTValidationErros 集合类。验证业务数据和规则一定与具体的业务对象相关，因此Validate抽象方法一定要在业务子类中来实现。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="427" height="200" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter3_3.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;另一个Init抽象方法，主要是实现一些数据的初始化操作。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面是Delete操作相关的一些方法。首先是下面的两个抽象方法：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; DeleteForReal(&lt;span style="color: #2b91af"&gt;HRPaidTimeOffDataContext&lt;/span&gt; db);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ValidateDelete(&lt;span style="color: #2b91af"&gt;HRPaidTimeOffDataContext&lt;/span&gt; db, &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ENTValidationErrors&lt;/span&gt; validationErrors);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DeleteForReal方法会调用DAL的Delete方法。ValidateDelete 方法类似于前面的Validate方法，主要是在执行删除操作之前，进行必要的数据检查。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Delete方法在基类中实现，并调用DeleteForReal方法，与Save方法比较类似，有2个重载的Delete方法。第一个Delete方法启动事务，并调用第二个Delete方法，传入HRPaidTimeOffDataContext 对象。第二个Delete方法在调用DeleteForReal方法之前，先调用ValidateDelete 方法，进行数据验证。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;IsNewRecord 方法比较简单，只是用来返回对象是否为新纪录，用在Save方法中判断对象是插入或者更新操作。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;最后一个是UpdateFailed方法，在更新记录发生异常时，该方法用来添加一条信息到validationErrors 集合对象中，并最终显示在UI界面上。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;最后一个基类是ENTBaseEOList&lt;/b&gt;&lt;b&gt;，表示可编辑的业务对象集合，该类继承自ENTBaseBOList&lt;/b&gt;&lt;b&gt;类。&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;[Serializable()]&lt;/div&gt;
&lt;div&gt;public abstract class ENTBaseEOList&amp;lt;T&amp;gt; : ENTBaseBOList&amp;lt;T&amp;gt;&lt;/div&gt;
&lt;div style="text-indent: 21pt"&gt;where T : ENTBaseEO, new()&lt;/div&gt;
&lt;div&gt;{ … }&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ENTBaseEOList 类主要有2个方法：Save 和 GetAll。其中，Save 方法将增加或删除集合对象到数据库中（&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源小组注：根据ENTBaseEO.DBActionEnum 属性值，来执行Save或Delete操作），Save方法有2个重载。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;GetAll方法比较简单，调用基类ENTBaseBOList 的Load方法，检索所有的业务对象实例，返回集合对象自身。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt; GetAll()&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;this&lt;/span&gt;.Load();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;this&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;到现在为止，我们已经创建了所有的基类。下一步，创建一个可编辑的业务对象ENTUserAccountEO。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;    [&lt;span style="color: #2b91af"&gt;Serializable&lt;/span&gt;()]&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;    &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ENTUserAccountEO&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ENTBaseEO&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;关于该类的具体实现，可以查看原文。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;总结&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt; Summary&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本文集中介绍了业务逻辑层和创建了4个基类，本书的后面章节都将使用都这些基类。其中，在BLL层，将业务对象分为两类：静态业务对象和可编辑业务对象。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;BLL&lt;/b&gt;&lt;b&gt;和DAL&lt;/b&gt;&lt;b&gt;的交互：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 从DAL检索数据，以单一实体对象（Entity Object）、实体对象计划、或数值（Scalar values）传递给BLL。&lt;/div&gt;
&lt;div&gt;2. 以数值（Scalar values）的形式传递数据到DAL层。（&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源论坛小组注：是以数值的形式传递，还是以实体对象的形式传递，各有优缺点。不过，在具体项目中，我们一般多采用传递实体对象，这样，方法的signature 不需要发生变化。）&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;BLL&lt;/b&gt;&lt;b&gt;和UI&lt;/b&gt;&lt;b&gt;层的交互：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. UI层创建业务对象实例，并调用Load 方法检索数据。&lt;/div&gt;
&lt;div&gt;2. UI层创建业务对象实例，并给对象属性赋值，然后调用Save方法，增加或更新记录；或者调用Delete方法删除记录。&lt;/div&gt;
&lt;div&gt;3. 冲突的验证规则会以ENTValidationErrors集合类的形式传递到UI层。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自ENTBaseBO&lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 定义类为 Serializable。&lt;/div&gt;
&lt;div&gt;2. 创建业务对象（business object）的自有属性。&lt;/div&gt;
&lt;div&gt;3. 实现GetDisplayText 方法，返回对象在下拉列表或ListBox 中显示的文本。&lt;/div&gt;
&lt;div&gt;4. 实现Load 方法，从DAL返回单一的实体对象（Entity Object）。&lt;/div&gt;
&lt;div&gt;5. 实现MapEntityToCustomProperties 方法，将实体对象的属性赋值给业务对象的对应属性。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自ENTBaseBoList&lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 定义类为 Serializable。&lt;/div&gt;
&lt;div&gt;2. 实现Load方法，从DAL返回所有的实体对象。&lt;/div&gt;
&lt;div&gt;3. 重载Load方法，过滤从DAL返回的实体对象。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自 ENTBaseEO &lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 按照上述实现ENTBaseBo基类的相同步骤。&lt;/div&gt;
&lt;div&gt;2. 实现Save方法，并调用Validate方法进行数据验证，同时确定是新增或更新记录，然后以数值（Scalar value）的形式传递给DAL中相应的方法。&lt;/div&gt;
&lt;div&gt;3. 实现Validate 方法，对业务对象的数据进行验证。任何冲突的数据将添加到validationErrors集合中。&lt;/div&gt;
&lt;div&gt;4. 实现DeleteForReal方法，该方法调用DAL层的Delete方法，进行数据删除操作。&lt;/div&gt;
&lt;div&gt;5. 实现ValidateDelete 方法，在删除记录之前，进行强制数据规则验证，一般为数据完整性验证。&lt;/div&gt;
&lt;div&gt;6. 实现Init方法，该方法在用户创建一条新纪录是，设置对象的默认属性。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建继承自ENTBaseEOList &lt;/b&gt;&lt;b&gt;基类的关键点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1. 完全按照实现ENTBaseBOList基类的步骤即可。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下一节将介绍用户界面层（User Interface Layer）的设计，欢迎交流。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/195.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>数据访问层（ASP.NET 3.5 Enterprise Application Development）读书笔记</title><link>http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx</link><pubDate>Wed, 10 Jun 2009 19:58:21 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/193.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/193.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/06/11/asp.net-3.5-enterprise-application-development.aspx#comment</comments><slash:comments>7</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/193.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">数据访问层（ASP.NET 3.5 Enterprise Application Development）读书笔记</source><description>&lt;div align="center"&gt;&lt;b&gt;数据访问层（ASP.NET 3.5 Enterprise Application Development&lt;/b&gt;&lt;b&gt;）读书笔记&lt;/b&gt;&lt;/div&gt;
&lt;div align="center"&gt;&lt;b&gt;-- Problem – Design – Solution&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文是针对Wrox出版的《ASP.NET 3.5 Enterprise Application Development With Visual Studio 2008 Problem Design Solution》该书第二章Data Access Layer（数据访问层）读书笔记。&lt;a href="http://forum.entlib.com/"&gt;http://forum.EntLib.com&lt;/a&gt; 开源论坛小组提供，欢迎交流，分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;原文介绍在三层架构应用中使用 LINQ to SQL技术。该设计模式使用DataContext 和数据库交互，ORM Designer设计器生成的实体对象（Entity Object）则负责与BLL（业务逻辑层）交互。&lt;/div&gt;
&lt;div&gt;该架构的设计图如下所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="626" height="550" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_1.gif" /&gt; &lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;在原文中通过将存储过程拖拉到ORM 设计器中，并使用存储过程来访问数据，如Insert、Update、Delete、Select等等方法。如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="672" height="363" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;将Method Panel中的方法与ORM 设计器中实体对象进行的关联的步骤如下。&lt;/div&gt;
&lt;div&gt;首先，选择ORM 设计器中的实体对象，如上图中的ENTUserAccount。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;然后，查看属性列表，比如点击Insert 属性后的弹出按钮，弹出如下对话框。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="666" height="645" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_3.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;经过上述设置后，DataContext 将调用存储过程来插入记录，而不是想之前的创建动态的SQL脚本。在DBML自动创建的cs文件中，可以看到如下2个方法：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; InsertENTUserAccount(&lt;span style="color: #2b91af"&gt;ENTUserAccount&lt;/span&gt; obj)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; p1 = obj.ENTUserAccountId;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              &lt;span style="color: blue"&gt;this&lt;/span&gt;.ENTUserAccountInsert(&lt;span style="color: blue"&gt;ref&lt;/span&gt; p1, obj.WindowsAccountName, obj.FirstName, obj.LastName, obj.Email, ((System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;bool&lt;/span&gt;&amp;gt;)(obj.IsActive)), ((System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;)(obj.InsertENTUserAccountId)));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              obj.ENTUserAccountId = p1.GetValueOrDefault();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;         }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         [&lt;span style="color: #2b91af"&gt;Function&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"dbo.ENTUserAccountInsert"&lt;/span&gt;)]&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; ENTUserAccountInsert([&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"ENTUserAccountId"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"Int"&lt;/span&gt;)] &lt;span style="color: blue"&gt;ref&lt;/span&gt; System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; eNTUserAccountId, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"WindowsAccountName"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(50)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; windowsAccountName, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"FirstName"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(50)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; firstName, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"LastName"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(50)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; lastName, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"Email"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"VarChar(100)"&lt;/span&gt;)] &lt;span style="color: blue"&gt;string&lt;/span&gt; email, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"IsActive"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"Bit"&lt;/span&gt;)] System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;bool&lt;/span&gt;&amp;gt; isActive, [&lt;span style="color: #2b91af"&gt;Parameter&lt;/span&gt;(Name=&lt;span style="color: #a31515"&gt;"InsertENTUserAccountId"&lt;/span&gt;, DbType=&lt;span style="color: #a31515"&gt;"Int"&lt;/span&gt;)] System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; insertENTUserAccountId)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;         {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              &lt;span style="color: #2b91af"&gt;IExecuteResult&lt;/span&gt; result = &lt;span style="color: blue"&gt;this&lt;/span&gt;.ExecuteMethodCall(&lt;span style="color: blue"&gt;this&lt;/span&gt;, ((&lt;span style="color: #2b91af"&gt;MethodInfo&lt;/span&gt;)(&lt;span style="color: #2b91af"&gt;MethodInfo&lt;/span&gt;.GetCurrentMethod())), eNTUserAccountId, windowsAccountName, firstName, lastName, email, isActive, insertENTUserAccountId);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              eNTUserAccountId = ((System.&lt;span style="color: #2b91af"&gt;Nullable&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;)(result.GetParameterValue(0)));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;              &lt;span style="color: blue"&gt;return&lt;/span&gt; ((&lt;span style="color: blue"&gt;int&lt;/span&gt;)(result.ReturnValue));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;         }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;其中第一个方法接收一个ENTUserAccount 对象的参数，并调用第二个方法，将对象的属性作为参数传入。第二个方法接收存储过程的每一个参数，接着调用DataContext对象的ExecuteMethodCall方法，该方法知道如何调用存储过程，并返回结果。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;另外的Delete、Update属性操作相似。操作完成后，ENTUserAccount 实体对象的属性列表如下所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="691" height="277" src="/userfiles/EntLib/image/ASP.NET/EntAppDev_Chapter2_4.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;客户端调用的示例代码如下：&lt;/div&gt;
&lt;div&gt;//Create an instance of the data context&lt;/div&gt;
&lt;div&gt;HRPaidTimeOffDataContext db = new HRPaidTimeOffDataContext();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;//Create a new ENTUserAccount object and set the properties&lt;/div&gt;
&lt;div&gt;ENTUserAccount userAccount = new ENTUserAccount&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;WindowsAccountName = @”VARALLO1\VaralloMadison”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;FirstName = “Madison”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;LastName = “Varallo”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;Email = “madison.varallo@v2.com”,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;IsActive = true,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;InsertDate = DateTime.Now,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;InsertENTUserAccountId = 1,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;UpdateDate = DateTime.Now,&lt;/div&gt;
&lt;div style="margin: 0cm 0cm 0pt 10.5pt"&gt;UpdateENTUserAccountId = 1&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt;//Signal the context to insert this record&lt;/div&gt;
&lt;div&gt;db.ENTUserAccounts.InsertOnSubmit(userAccount);&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;//Save the changes to the database&lt;/div&gt;
&lt;div&gt;db.SubmitChanges();&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;为什么要这样设计呢？我不是很认同这种设计。&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;1. 任何对表ENTUserAccount的修改，都需要重新将EntUserAccount表拖拉到ORM设计器中，并重新设置Insert、Update、Delete 等等属性。&lt;/div&gt;
&lt;div&gt;2. 需要编写很多琐碎的存储过程，如上述的Insert、Update、Delete、Select等等，相信很多开发人员不喜欢编写这么多简单的Stored Procedure。&lt;/div&gt;
&lt;div&gt;3. 这样设计增加很多工作量，并且不便于后期的维护开发，也影响工作效率。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本章后面部分定义的一些接口类、抽象基类是针对该项目设计的特性提取的一些共用特征。这种设计方法值得推荐，但并不一定适合于实际的开发项目。&lt;/div&gt;
&lt;div&gt;public interface IENTBaseEntity&lt;/div&gt;
&lt;div&gt;public abstract class ENTBaseData&amp;lt;T&amp;gt; where T : IENTBaseEntity&lt;/div&gt;
&lt;div&gt;在数据访问层DAL仅仅只有2个上述的基类。&lt;/div&gt;
&lt;div&gt;public class ENTUserAccountData : ENTBaseData&amp;lt;ENTUserAccount&amp;gt;&lt;/div&gt;
&lt;div&gt;上述的Data类封装出来ENTUserAccount实体对象，ENTUserAccountData类继承自ENTBaseData基类，实现基类中的抽象方法。&lt;/div&gt;
&lt;div&gt;ORM设计器负责为数据库中每一个表生成一个对应的实体类，对应Data类则负责与数据库和业务逻辑层交互。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下一篇是关于业务逻辑层BLL的设计探讨。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/193.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>WF 状态机工作流构建订单处理流程-范例程序分析 Part 2</title><link>http://blog.entlib.com/EntLib/archive/2009/06/02/wf-part-2.aspx</link><pubDate>Mon, 01 Jun 2009 19:43:20 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/06/02/wf-part-2.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/192.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/192.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/06/02/wf-part-2.aspx#comment</comments><slash:comments>2</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/192.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">WF 状态机工作流构建订单处理流程-范例程序分析 Part 2</source><description>&lt;div align="center"&gt;&lt;b&gt;WF &lt;/b&gt;&lt;b&gt;状态机工作流构建订单处理流程-&lt;/b&gt;&lt;b&gt;范例程序分析 Part 2&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;状态机工作流（State Machine Workflow）是以状态的变化为驱动而进行业务流转的，且一定需要人为的干预，而不像顺序类型工作流（Sequential Workflow）那样按照事先设计好的业务流程一步一步依次执行下去。本范例程序由&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源ASP.NET/C# 论坛小组提供。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/23/wf-part-1.aspx"&gt;WF &lt;span&gt;&lt;span&gt;状态机工作流构建订单处理流程&lt;/span&gt;-&lt;span&gt;范例程序分析&lt;/span&gt; Part 1&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;实现IOrder &lt;/b&gt;&lt;b&gt;接口&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;下面实现IOrder 接口，下面的代码Order类实现IOrder 接口。这里，仅仅在控制台显示一些简单的提示信息。该Order类将由Client端程序调用，其中内部的调用，将触发工作流中相应的活动。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="609" height="318" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_Part2_1.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建工作流实例&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;下面基于workflow runtime 创建并启动工作流实例，并添加Order 对象作为服务。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;WorkflowInstance&lt;/span&gt; objWorkFlowInstance;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;WorkflowRuntime&lt;/span&gt; objWorkFlowRuntime = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WorkflowRuntime&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Order&lt;/span&gt; objOrder = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Order&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ExternalDataExchangeService&lt;/span&gt; objService = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ExternalDataExchangeService&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt; InstanceId = &lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt;.NewGuid();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            objWorkFlowRuntime.AddService(objService);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            objService.AddService(objOrder);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            objWorkFlowInstance = objWorkFlowRuntime.CreateWorkflow(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(OrderWorkFlow.&lt;span style="color: #2b91af"&gt;WorkflowOrder&lt;/span&gt;), &lt;span style="color: blue"&gt;null&lt;/span&gt;, InstanceId);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            objWorkFlowInstance.Start();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;工作流启动啦 -- Work flow started"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面是Client端调用代码，根据用户输入的数值，调用Order 对象的相应方法，触发工作流中相应的活动。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ExternalDataEventArgs&lt;/span&gt; objDataEventArgs = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ExternalDataEventArgs&lt;/span&gt;(InstanceId);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            objDataEventArgs.WaitForIdle = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"1 - &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;订单尚未付款"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"2 - &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;产品入库"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"3 - &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;对订单付款"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"4 - &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;订单发货"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"5 - &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;送货地址错误"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"6 - &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;送货地址正确"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"7 - &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;产品有库存"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #a31515; font-size: 9pt"&gt;请输入上述数字： "&lt;/span&gt;&lt;span style="font-size: 9pt"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;int&lt;/span&gt; intValueEntered=0;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;while&lt;/span&gt;(intValueEntered &amp;lt; 7)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                intValueEntered = &lt;span style="color: #2b91af"&gt;Convert&lt;/span&gt;.ToInt16(&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine().ToString());&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;if&lt;/span&gt; (intValueEntered == 1)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    objOrder.CallNotPaid(objDataEventArgs);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; (intValueEntered == 2)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    objOrder.CallInStock(objDataEventArgs);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; (intValueEntered == 3)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    objOrder.CallPaymentMade(objDataEventArgs);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; (intValueEntered == 4)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    objOrder.CallDispatch(objDataEventArgs);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; (intValueEntered == 5)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    objOrder.CallAddressNotProper(objDataEventArgs);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; (intValueEntered == 6)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    objOrder.CallAddressCorrected(objDataEventArgs);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; (intValueEntered == 7)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    objOrder.CallProductStocked(objDataEventArgs);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;该工作流演示界面如下：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="677" height="440" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_Part2_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;欢迎下载该范例程序源代码。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/192.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>SQL Server XML 代码编写示例</title><link>http://blog.entlib.com/EntLib/archive/2009/05/16/sql-server-xml.aspx</link><pubDate>Fri, 15 May 2009 10:11:59 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/05/16/sql-server-xml.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/191.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/191.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/05/16/sql-server-xml.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/191.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">SQL Server XML 代码编写示例</source><description>&lt;div align="center"&gt;&lt;b&gt;SQL Server XML &lt;/b&gt;&lt;b&gt;代码编写示例&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;XML 数据类型有很多内置的方法，这些方法只针对XML数据类型。比较常用的有.query、.value、.modify、.nodes、.exist 等等方法。本文中所有的SQL 脚本范例都基于AdventureWorks 数据库进行过测试。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(1) .query &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;允许用户通过运行基于XQuery 格式化的查询来访问XML。XQuery 允许返回多个数据片段，而不是一个离散的值。.Query要求一个参数，运行在XML数据实例之上有效的XQuery。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如下是提取Production.ProductModel 表中ProductModelID 为 66 的产品文档：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'declare namespace PI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: red; font-size: 10pt"&gt;    /PI:root/PI:Location/PI:step'&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'declare default element namespace "http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: red; font-size: 10pt"&gt;    /root/Location/step'&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述2个SQL 脚本在定义XML namespace有一些细微的差异，可以比较一下执行产生的结果。也可以在 XQuery 之外使用 With XMLNamespaces ('http://xxx' as XX)，提高XML 查询的可读性。上述代码通过WITH XMLNamespaces() 声明编写功能相同的代码：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: fuchsia"&gt;PI&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/PI:root/PI:Location/PI:step'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;设置默认命名空间：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/root/Location/step'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(2) .value &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;是查询离散数据的方法，使用一个XPath 的语法来定位指定的结点，并得到标量值。需要确保指定的XPath 真正返回一个离散值。&lt;/div&gt;
&lt;div&gt;查询ProductModelID为 66 的第一个Location元素中LabelHours 属性的值。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'(/root/Location/@LaborHours)[1]'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: red"&gt;'decimal (5,2)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Steps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;From&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如果不是属性，而是子元素，则应该去掉@符号。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(3) .modify &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;是对XQuery 的扩展，以提供XQuery 的数据修改能力。这种对XQuery的扩展称作XML数据处理语言（XML Data Manipulation Language），或者XML DML。XML DML向XQuery 中添加了3条新命令：insert / delete / replace value of。其中replace value of 替代了SQL的UPDATE语句。&lt;/div&gt;
&lt;div&gt;例如，将上述查询的LabelHours属性值，由原来的1.5小时更新为1.75小时。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;UPDATE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SET&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;modify&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'replace value of (/root/Location/@LaborHours)[1] with 1.75'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在UPDATE语句中，使用 replace value of 关键字来指定更新中的XML部分。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(4) .nodes &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;用来获取XML块，并将之拆分多个数据行，以关系的形式存储。通过.nodes 所做的工作，本质上是将一个XML 数据的实例拆分到自己的表中。这意味着，我们需要将.nodes 的结果作为一个表，而不是一个列来看待。在.nodes 和一个数据库表之间的主要差别是，必须将.nodes 的结果交叉应用（cross apply）回指定的XML数据的来源表中。可以将cross apply 想象成某种连接，只不过使用的是cross apply关键字，而不是JOIN关键字，并且.nodes 替代了ON子句。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;pm&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;pmi&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Location&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'./@LocationID'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: red"&gt;'int'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;LocationID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: teal"&gt;pmi&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Location&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'./@LaborHours'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: red"&gt;'decimal(5,2)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;LaborHours&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt; &lt;span style="color: teal"&gt;pm&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: gray; font-size: 10pt"&gt;CROSS&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;APPLY&lt;/span&gt; &lt;span style="color: teal"&gt;pm&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;nodes&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/root/Location'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;pmi&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;Location&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;将LocationID和LaborHours 信息拆分到列上，就好像它们位于关系表中一样。通过使用.nodes 方法，本质上将一个表 ProductModel 转换成了2个表（源表，以及ProductModel表中的Instructions 列所生成的.nodes 结果）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面的范例脚本将Instructions XML数据中material 子节点的数据库取出，转为以数据表n的字段 c 来显示，其中字段c 的数据类型也是XML，进一步取出c的值，并转换为nvarchar数据类型。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@xml&lt;/span&gt; &lt;span style="color: blue"&gt;XML&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@xml&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;&lt;span style="color: teal"&gt;Instructions&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;=&lt;/span&gt;66&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;ns&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'.'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;NewCol&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@xml&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;nodes&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/ns:root/ns:Location/ns:step/ns:material'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: teal"&gt;n&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="524" height="179" alt="" src="/userfiles/EntLib/image/SQLServer/SQLServer_XML_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;(5) .exist &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 14pt"&gt;方法&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;.exist 方法有点像SQL中的EXISTS 语句，接受一个XQuery 表达式，并返回一个布尔值。&lt;/div&gt;
&lt;div&gt;查询Instructions XML数据中存在LaborHours属性的数据记录。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WITH&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;XMLNAMESPACES&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'(/root/Location/@LaborHours)[1]'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt;'decimal(5,2)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductModel&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Instructions&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;exist&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/root/Location/@LaborHours'&lt;/span&gt;&lt;span style="color: gray"&gt;)=&lt;/span&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;总结一下SQL Server 2005/2008 为XML数据类型提供的函数：&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="607" height="163" alt="" src="/userfiles/EntLib/image/SQLServer/SQLServer_XML_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/191.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>SQL Server 高级查询 – 学习笔记</title><link>http://blog.entlib.com/EntLib/archive/2009/04/29/sql-server.aspx</link><pubDate>Tue, 28 Apr 2009 21:23:45 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/04/29/sql-server.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/190.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/190.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/04/29/sql-server.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/190.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">SQL Server 高级查询 – 学习笔记</source><description>&lt;div align="center"&gt;&lt;b&gt;SQL Server &lt;/b&gt;&lt;b&gt;高级查询 – &lt;/b&gt;&lt;b&gt;学习笔记&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文是《SQL Server 2005 高级程序设计》, Professional SQL Server 2005 Programming – 第六章：高级查询的学习笔记。主要包含如下内容：&lt;/div&gt;
&lt;div&gt;1. 嵌套的子查询；&lt;/div&gt;
&lt;div&gt;2. 相关子查询；&lt;/div&gt;
&lt;div&gt;3. 派生表；&lt;/div&gt;
&lt;div&gt;4. EXISTS 运算符的使用；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;大部分的子查询（当然不是全部）也能够用联接（Join）来实现，关于联接和子查询的性能比较，需要具体分析。本文所有的范例SQL 脚本使用&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=394"&gt;&lt;font color="#0000ff"&gt;AdventureWorks &lt;span&gt;&lt;span&gt;数据库&lt;/span&gt;&lt;/span&gt;。&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;构建嵌套的子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;嵌套的子查询（nested subquery） - 要么返回一个用于外部查询的值，要么返回一个与IN运算符一起使用的值的列表。当想要明确使用 = 运算符时，则使用返回一个值的查询，也就是从一行返回一列。如果要返回一个列表，则必须在外部查询中使用 IN 运算符。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;（1&lt;/b&gt;&lt;b&gt;）创建使用单值的嵌套子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;查询系统中购买产品的第一天所销售的所有产品项的ProductID，SQL 脚本如下：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;SELECT&lt;/span&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;内部查询（&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt;&lt;/span&gt;）获取一个值，该值将在外部查询中使用。由于这里使用了 = ，因此内部查询只能返回一个值，也就是一行中返回一列，否则将在运行时产生错误。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="673" height="362" alt="" src="/userfiles/EntLib/image/SQLServer/ProSQLServer2005_Programming_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;（2&lt;/b&gt;&lt;b&gt;）创建返回多个值列表的嵌套子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在实际的应用中，最常见的是这种子查询，返回某种类型的范围列表，并在查询中作为一种判断标准来使用。&lt;/div&gt;
&lt;div&gt;下面查询条件：查询应征了公司另一个职位的所有雇员的列表。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: gray"&gt;IN&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt; &lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;JobCandidate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述代码返回2条记录：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="615" height="256" alt="" src="/userfiles/EntLib/image/SQLServer/ProSQLServer2005_Programming_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述的查询脚本也可以使用内部联接而非嵌套的子查询来实现，脚本如下所示：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;JobCandidate&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;on&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;构建相关子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;相关子查询与前面的嵌套子查询的不同之处在于，在相关子查询中，信息是双向而非单向的。在嵌套子查询中，内部查询只处理一次，信息被传出以用于外部查询，外部查询也只执行一次。&lt;/div&gt;
&lt;div&gt;在相关子查询中，按以下3个步骤来进行：&lt;/div&gt;
&lt;div&gt;（1）外部查询得到一条记录并将其传入到内部查询。&lt;/div&gt;
&lt;div&gt;（2）内部查询基于传入的值执行。&lt;/div&gt;
&lt;div&gt;（3）内部查询从其结果中把值传回到外部查询，外部查询使用这些值来完成其处理。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;WHERE &lt;/b&gt;&lt;b&gt;子句中的相关子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;查询每一位顾客在系统中的第一张订单中的OrderID 和 OrderDate，也就是要知道顾客在第一天下订单的日期和订单的ID。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;CustomerID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;=(&lt;/span&gt;&lt;span style="color: blue"&gt;SELECT&lt;/span&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;soh2&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;                  &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;soh2&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;                  &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;soh2&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;CustomerID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;CustomerID&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;ORDER&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; &lt;span style="color: teal"&gt;CustomerID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;SELECT &lt;/b&gt;&lt;b&gt;列表中的相关子查询&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;查询顾客的名字以及首次订购的日期。因为要获得顾客的名字，这意味着必须用到Person.Contact表，另外还需要知道第一次订购的日期。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述查询结果中，OrderDate列会有NULL值。这是由于Sales.SalesOrderHeader 表中没有与Person.Contact 表（外部查询）中的记录相匹配的记录。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述查询也可以通过Join联接来实现：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;LEFT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;JOIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;SELECT&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;OrderDate&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;GROUP&lt;/span&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;o&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;派生表&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;派生表（derived table），有时也称为内联视图，是由查询结果集的列和行组成，与常规的表一样。&lt;/div&gt;
&lt;div&gt;假设要获取订购过某种产品的顾客列表，如Minipump：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Product&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'Minipump'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述查询很容易，但是如果想要获得同时订购过Minipump产品，又订购过 AWC Logo Cap 产品的所有顾客，就有点麻烦了。&lt;/div&gt;
&lt;div&gt;需要把Minipump的订购者和AWC Logo Cap产品的订购者的查询结果联接起来，可以通过派生表来实现。要创建派生表，需要注意如下事项：&lt;/div&gt;
&lt;div&gt;1. 用圆括号包围产生结果集的查询结果；&lt;/div&gt;
&lt;div&gt;2. 给查询的结果赋予别名；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面通过派生表，实现 - 获得同时订购过Minipump产品，又订购过 AWC Logo Cap 产品的所有顾客：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Product&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'Minipump'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: teal"&gt;pumps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;ON&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;pumps&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderHeader&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Sales&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderDetail&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;soh&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;SalesOrderID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; &lt;span style="color: teal"&gt;Production&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Product&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;       &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;sod&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ProductID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Name&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'AWC Logo Cap'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: teal"&gt;caps&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 10pt"&gt;ON&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;caps&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;但需要注意的是，派生表并不能解决所有的问题。当结果集相当庞大且需要联接大量的记录时，可能要考虑使用临时表，并在其上创建索引（派生表没有索引）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;4. EXISTS &lt;/b&gt;&lt;b&gt;运算符&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;当使用EXISTS 时，并不真正返回数据 – 返回的是关于数据是否存在的TRUE/FALSE，数据满足在EXISTS 语句运行所基于的查询中建立的条件。&lt;/div&gt;
&lt;div&gt; --- 查询应征了该公司另一个职位的雇员列表：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;FirstName&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: teal"&gt;LastName&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: gray; font-size: 10pt"&gt;JOIN&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;Person&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Contact&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;ON&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;c&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;EXISTS&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="color: blue; font-size: 10pt"&gt;    &lt;/span&gt;&lt;span style="color: gray; font-size: 10pt"&gt;(&lt;/span&gt;&lt;span style="color: blue; font-size: 10pt"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;FROM&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;JobCandidate&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt"&gt;    &lt;span style="color: blue"&gt;WHERE&lt;/span&gt; &lt;span style="color: teal"&gt;jc&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;e&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;EmployeeID&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;使用EXISTS 关键字时，SQL Server 不必在所有的行上进行连接。实际上，SQL Server将浏览记录，直到找到第一个满足条件的记录然后停止于那里。只要有一条记录满足条件，EXISTS 将为真，因此不再需要继续浏览。在进行内部连接时，性能差异将更为显著。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/190.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Enterprise Library for .NET Framework 3.5 (EntLib v4.1) 微软企业库v4.1实验手册发布啦！</title><link>http://blog.entlib.com/EntLib/archive/2009/03/30/enterprise-library-for-.net-framework-3.5-entlib-v4.1-v4.1.aspx</link><pubDate>Sun, 29 Mar 2009 21:01:45 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/30/enterprise-library-for-.net-framework-3.5-entlib-v4.1-v4.1.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/165.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/165.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/30/enterprise-library-for-.net-framework-3.5-entlib-v4.1-v4.1.aspx#comment</comments><slash:comments>3</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/165.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Enterprise Library for .NET Framework 3.5 (EntLib v4.1) 微软企业库v4.1实验手册发布啦！</source><description>&lt;div align="center"&gt;&lt;b&gt;Enterprise Library for .NET Framework 3.5 (EntLib v4.1) &lt;/b&gt;&lt;b&gt;微软企业库v4.1&lt;/b&gt;&lt;b&gt;实验手册发布啦！&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Enterprise Library for .Net Framework 3.5 – EntLib v4.1 是patterns &amp;amp; practices 小组为.NET Framework 3.5 开发一套企业库，目前最新版本为v4.1，共包括9个Application Block，包括数据访问（Data Access Application Block）、异常管理（Exception Handling Application Block）、数据验证（Validation Application Block）等等，对企业应用开发非常有帮助，也非常实用。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Enterprise Library v4.1 实验手册包括全部9个Application Block，如下图所示。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img width="509" height="396" alt="" src="/userfiles/EntLib/image/EnterpriseLibrary/EntLib_HandsOnLab_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;EntLib v4.1 下载地址，包括EntLib v4.1安装包和实验手册：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://entlib.codeplex.com/"&gt;&lt;font color="#0000ff"&gt;http://entlib.codeplex.com&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;希望有兴趣一起翻译的朋友，欢迎和我们联系：&lt;a href="mailto:entlib@hotmail.com"&gt;&lt;font color="#0000ff"&gt;entlib@hotmail.com&lt;/font&gt;&lt;/a&gt;。&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;&lt;a href="http://msdn.microsoft.com/practices"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left"&gt; &lt;img width="322" height="87" alt="" src="/userfiles/EntLib/image/EnterpriseLibrary/pnp_logo.gif" /&gt;&lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/165.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>WF 状态机工作流构建订单处理流程-范例程序分析 Part 1</title><link>http://blog.entlib.com/EntLib/archive/2009/03/23/wf-part-1.aspx</link><pubDate>Sun, 22 Mar 2009 01:32:29 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/23/wf-part-1.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/157.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/157.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/23/wf-part-1.aspx#comment</comments><slash:comments>7</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/157.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">WF 状态机工作流构建订单处理流程-范例程序分析 Part 1</source><description>&lt;div align="center"&gt;&lt;b&gt;WF &lt;/b&gt;&lt;b&gt;状态机工作流构建订单处理流程-&lt;/b&gt;&lt;b&gt;范例程序分析 Part 1&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;状态机工作流（State Machine Workflow）是以状态的变化为驱动而进行业务流转的，且一定需要人为的干预，而不像顺序类型工作流（Sequential Workflow）那样按照事先设计好的业务流程一步一步依次执行下去。本范例程序由&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源ASP.NET/C# 论坛小组提供。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;State活动有3种类型的状态：起始状态（Initial State）、业务逻辑过程状态、终止状态（Completed State），在一个状态机工作流中起始状态和终止状态只能有一个。状态机工作流是从起始状态开始执行，在运行过程中通过业务逻辑状态的变化来进行工作流的流转，最终由终止状态标志工作流的结束。因此在状态机工作流设计界面上只能添加 State 状态活动，另外，在该状态中还可以添加一个或多个EventDriven 活动。下面通过一个订单处理流程的范例，详细介绍状态机工作流的使用。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下图简要描述了订单处理流程，你会发现许多地方需要用户参与或输入，来改变工作流。例如，财务部门依赖于支付情况来改变工作流，采购部门依赖于库存情况来改变工作流等等。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="443" alt="" width="690" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_1.gif" /&gt; &lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;按照下面具体的操作步骤，一步一步实现上述状态机工作流演示程序。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;创建接口程序&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;由于状态机工作流中大量使用HandleExternalEvent 活动来接收应用程序的操作事件，从而改进该工作流上运行的业务实体的状态，因此需要定义一个接口程序作为工作流和应用程序之间沟通的桥梁。本范例程序中将通过接口中的7个事件来模拟状态机工作流的触发，接口IOrder.cs 如下所示。需要注意的是：我们引用System.Workflow.Activities，并且接口添加了[ExternalDataExchange]属性。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="373" alt="" width="684" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2. 创建Class Library项目，并添加State Machine Workflow（状态机工作流）文件。如下图所示。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="465" alt="" width="690" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_3.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在添加State Machine Workflow文件后，Workflow设计器自动打开。工作流的每一个State都有事件，因此在State Activity 添加EventDriven组件。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="363" alt="" width="549" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_4.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在事件Event触发后，State状态进入下一个状态。因此，双击EventDriven组件，添加HandleExternalEvent组件和SetState组件，其中HandleExternalEvent定义监听的事件，SetState定义将进入的下一个状态。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="445" alt="" width="690" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_5.gif" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img height="431" alt="" width="690" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_6.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;按照上面的步骤，重复创建OrderPlaced、OrderApproved、OrderPending、OrderDelivered、OrderCancelled状态，并添加相应的EventDriven组件，最终实现的状态机工作流如下所示：&lt;/div&gt;
&lt;div style="text-align: center"&gt;  &lt;img height="474" alt="" width="680" src="/userfiles/EntLib/image/WF/WF_OrderWorkflow_7.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/157.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>简要分析WF 状态机工作流的部分代码</title><link>http://blog.entlib.com/EntLib/archive/2009/03/21/wf-again.aspx</link><pubDate>Fri, 20 Mar 2009 23:58:26 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/21/wf-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/156.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/156.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/21/wf-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/156.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">简要分析WF 状态机工作流的部分代码</source><description>&lt;div align="center"&gt;&lt;b&gt;简要分析WF &lt;/b&gt;&lt;b&gt;状态机工作流的部分代码&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;这里简要分析WF 状态机工作流的部分代码。&lt;/div&gt;
&lt;div&gt;首先，看看下面的代码：&lt;/div&gt;
&lt;div align="left"&gt;    public class clsOrder : IOrder&lt;br /&gt;
    {&lt;br /&gt;
        #region IOrder Members&lt;br /&gt;
 &lt;br /&gt;
        public event EventHandler&amp;lt;ExternalDataEventArgs&amp;gt; NotPaid;&lt;br /&gt;
        public event EventHandler&amp;lt;ExternalDataEventArgs&amp;gt; InStock;&lt;br /&gt;
        public event EventHandler&amp;lt;ExternalDataEventArgs&amp;gt; PaymentMade;&lt;br /&gt;
        public event EventHandler&amp;lt;ExternalDataEventArgs&amp;gt; Dispatch;&lt;br /&gt;
        public event EventHandler&amp;lt;ExternalDataEventArgs&amp;gt; AddressNotProper;&lt;br /&gt;
 &lt;br /&gt;
        public event EventHandler&amp;lt;ExternalDataEventArgs&amp;gt; AddressCorrected;&lt;br /&gt;
 &lt;br /&gt;
        public event EventHandler&amp;lt;ExternalDataEventArgs&amp;gt; ProductStocked;&lt;br /&gt;
 &lt;br /&gt;
        #endregion&lt;br /&gt;
        public void CallNotPaid(ExternalDataEventArgs args)&lt;br /&gt;
        {&lt;br /&gt;
            // 触发工作流中相应的活动&lt;br /&gt;
            NotPaid(null, args);&lt;br /&gt;
            Console.WriteLine("This order is not paid");&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
其中 &lt;span style="color: blue; font-size: 9pt"&gt;event&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ExternalDataEventArgs&lt;/span&gt;&amp;gt;&lt;/span&gt; 代码相当于C# 1.0 中的语法：&lt;/div&gt;
&lt;div&gt;delegate void ExternalDataEventHandler(object sender, ExternalDataEventArgs e);&lt;/div&gt;
&lt;div&gt;event ExternalDataEventHandler OnInitStart;&lt;/div&gt;
&lt;div&gt;事件只有两个参数，一个是sender谁触发的，一个是相关的参数。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;event EventHandler &amp;lt;ExternalDataEventArgs&amp;gt;定义的是一个事件。 其中EventHandler &amp;lt;ExternalDataEventArgs&amp;gt;是一个delegate的简化定义。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-size: 9pt"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: blue"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ExternalDataEventArgs&lt;/span&gt;&amp;gt; NotPaid;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;这里定义了一个EventHandler 类型的事件 NotPaid。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" width="690" height="422" src="/userfiles/EntLib/image/WF/WF_StateMachine_simple_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;其中，&lt;span style="font-size: 9pt"&gt;NotPaid(&lt;span style="color: blue"&gt;null&lt;/span&gt;, args);&lt;/span&gt;方法触发工作流中相应的活动，这里是触发NotPaid事件，进一步转换State的状态。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/156.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之八</title><link>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies8.aspx</link><pubDate>Fri, 20 Mar 2009 01:17:45 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies8.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/155.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/155.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies8.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/155.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之八</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之八&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;img align="right" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book IV – Database Programming &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx"&gt;&lt;b&gt;Book V – Reporting Services &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;报表服务&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx"&gt;&lt;font color="#0000ff"&gt;Book VI – Analysis Services &lt;span&gt;&lt;span&gt;分析服务&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx"&gt;Book VII – Performance Tips and Tricks &lt;span&gt;&lt;span&gt;性能调试及技巧&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book VIII – Database Administration &lt;/b&gt;&lt;b&gt;数据库管理&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节介绍了数据库的一些基本管理操作，如移动数据库、备份和恢复、数据库自动维护计划等等。另外，还介绍了SQL Server 帐号管理及访问控制，数据同步（Replication），Partitioning等等。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book IX – Appendixes &lt;/b&gt;&lt;b&gt;附录&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节介绍了SQL Server 2008的一些网上资源，如Microsoft SQL Server官方站点、开发中心、新闻组等等。另外也介绍了SQL Server 2008 的一些问题及解决办法。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/155.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之七</title><link>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx</link><pubDate>Fri, 20 Mar 2009 00:59:55 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/154.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/154.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/21/microsoftsqlserver2008all-in-onedeskreferencefordummies7.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/154.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之七</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之七&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Book IV – Database Programming &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx"&gt;&lt;b&gt;Book V – Reporting Services &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;报表服务&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx"&gt;&lt;font color="#0000ff"&gt;Book VI – Analysis Services &lt;span&gt;&lt;span&gt;分析服务&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book VII – Performance Tips and Tricks &lt;/b&gt;&lt;b&gt;性能调试及技巧&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节简单介绍了一些性能监控工具，如Windows 任务管理器、性能监视器、数据库引擎优化顾问（Database Engine Tuning Advisor）、以及SQL Server Profiler等等。这些都是DBA 优化和管理数据库的基本工具。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;另外，介绍了如何使用索引（Index）来强化查询性能，分析了查询执行计划（Query Execution Plan）。其中，本节列举一些数据表的设计规范，如：&lt;/div&gt;
&lt;div&gt;1. 总是定义主键值（Always define a primary key）；&lt;/div&gt;
&lt;div&gt;2. 避免前置通配符（Avoid leading wildcards）；&lt;/div&gt;
&lt;div&gt;3. 避免高度重复的索引值（Avoid highly duplicate indexes）；&lt;/div&gt;
&lt;div&gt;4. 不要忘记对临时表建立索引（Don’t forget to index temporary tables）；&lt;/div&gt;
&lt;div&gt;5. 在join列上建立索引（Place indexes on join columns）；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面分别演示了在查询过滤条件中使用和不使用前置通配符时，查询执行计划的不同表现。&lt;/div&gt;
&lt;div&gt;在下面的查询脚本中，不使用前置通配符，发现建立在LoginID字段上的索引发生作用，查询时不要扫描整个聚集索引。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;*&lt;/span&gt; &lt;span style="color: blue"&gt;from&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: blue"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;LoginID&lt;/span&gt; &lt;span style="color: gray"&gt;like&lt;/span&gt; &lt;span style="color: red"&gt;'adventure-works\rob0%'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" src="/userfiles/EntLib/image/SQLServer/SQL_PerformanceTips_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
在下面的查询脚本中，由于使用前置通配符，发现建立在LoginID字段上的索引没有作用了，查询时需要扫描整个聚集索引。&lt;br /&gt;
 &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;Select&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: gray"&gt;*&lt;/span&gt; &lt;span style="color: blue"&gt;from&lt;/span&gt; &lt;span style="color: teal"&gt;HumanResources&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;Employee&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;where&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;LoginID&lt;/span&gt; &lt;span style="color: gray"&gt;like&lt;/span&gt; &lt;span style="color: red"&gt;'%adventure-works\rob0%'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: center"&gt; &lt;img height="559" alt="" width="690" src="/userfiles/EntLib/image/SQLServer/SQL_PerformanceTips_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面是查询执行计划中部分输出的介绍：&lt;/div&gt;
&lt;div&gt;物理运算（Physical Operation）: Table Scan — To satisfy the query, SQL Server had to read (that is, scan) all the rows to return its results. Table scans can be extremely costly, especially when encountered on tables containing copious data.&lt;/div&gt;
&lt;div&gt;估计开销 - Estimated Costs (I/O, CPU, 运算符Operator,子树 Subtree) — These indicators provide guidance on SQL Server’s internal estimates of its expected workload to return your results. Note: These numbers don’t mean much in isolation; they’re interesting only when compared against other query plans.&lt;/div&gt;
&lt;div&gt;估计行数（Estimated Number of Rows）: Because we asked to see all the rows, SQL Server accurately reports that it estimates a return result set size of rows.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/154.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之六</title><link>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx</link><pubDate>Sat, 14 Mar 2009 18:05:11 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/153.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/153.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-to-beat-a-dead-horse.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/153.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之六</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之六&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;Book IV – Database Programming &lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx"&gt;Book V – Reporting Services &lt;span&gt;&lt;span&gt;报表服务&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book VI – Analysis Services &lt;/b&gt;&lt;b&gt;分析服务&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Microsoft SQL Server 2005/2008 Analysis Services (SSAS) 为商业智能应用程序提供联机分析处理 (OLAP) 和数据挖掘功能。Analysis Services 允许您设计、创建和管理包含从其他数据源（如关系数据库）聚合的数据的多维结构，以实现对 OLAP 的支持。对于数据挖掘应用程序，Analysis Services 允许您设计、创建和可视化处理那些通过使用各种行业标准数据挖掘算法，并根据其他数据源构造出来的数据挖掘模型。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本节介绍了Analysis Services功能，包括OLAP和数据挖掘（Data Mining）功能。下面简要介绍一下创建SQL Server Analysis Project 项目的基本步骤：&lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;创建SQL Server Analysis Project &lt;/b&gt;&lt;b&gt;项目&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;新建项目，选择商业智能项目/Analysis Services 项目，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="471" alt="" width="657" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;定义数据源Data Source&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在Solution面板中，右键点击数据源，选择“新增数据源…”，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="481" alt="" width="450" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;安装新建数据源向导对话框，一步一步创建数据源，范例程序采用AdventureWorksDW2008。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;定义数据源视图 Data Source View&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Data Source View 定义了Cube中的表和视图。创建Data Source View的步骤安装向导操作就可以了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;创建Cube&lt;/b&gt;&lt;b&gt;，使用Measures&lt;/b&gt;&lt;b&gt;和Dimensions&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;一个Cube包含Measures和Dimensions。维度(dimension)：多维立方体Cube的基本组成部分(a fundamental component)，用以从用户兴趣的角度组织数据（以合乎逻辑的层次化的格式组织商业数据）。测度(measure)：事实表(fact table)中的包含可计算、合计等的数值型数据的列。在一个立方体中，测度被事实表分组为测度组。测度组(measure groups)：用以对事实表中包含的测度进行分组，并在维度和测度之间进行联系。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;立方体设计器由九个选项卡组成：立方体结构(Cube Structure)、维度用途(Dimension Usage)、计算(Calculations)、关键性能指示器(KPIS, Key Performance Indicators)、行为(Actions)、分区(Partitions)、透视图(Perspectives)、转换(Translations)、浏览器(Browser)。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;5. &lt;/b&gt;&lt;b&gt;部署Analysis Services&lt;/b&gt;&lt;b&gt;项目&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在"解决方案浏览器"中右键单击Analysis Services项目选择"部署(Deploy)"。部署之前，需要确认SQL Server Analysis Services 服务已经启动了。看看下面的部署进度界面：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="583" alt="" width="537" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_3.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;详细的操作步骤，可以查询SQL Server 2005/2008 的帮助文档。部署成功后，也可以通过SQL Server Management Studio 登录到Analysis Services，查看刚刚部署的AdventureWorks数据库（注意：不同于数据库引擎中的AdventureWorks 数据库）。如下图所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="545" alt="" width="450" src="/userfiles/EntLib/image/SQLServer/AnalysisServices_4.gif" /&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/153.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之五</title><link>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx</link><pubDate>Sat, 14 Mar 2009 16:07:48 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/152.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/152.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/15/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-once-more.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/152.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之五</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之五&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;img align="right" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx"&gt;Book IV – Database Programming &lt;span&gt;&lt;span&gt;数据库编程&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book V – Reporting Services &lt;/b&gt;&lt;b&gt;报表服务&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节讲解了SQL Server 的Reporting Services报表服务，Reporting Service微软公司推出的新一代的报表解决方案。它是一个完整的基于服务器的平台，可以建立、管理、发布传统的基于纸张的报表或者交互的、基于Web的报表。而且最大的特色是，它采用基于XML的RDL报表描述语言来定制报表，可以用于给第三方定制开发符合接口标准的报表工具，使得软件开发人员和企业可以将报表集成到已有的系统或第三方的应用中。不过，本节主要关注于Reporting Services的基本特性，包括Reporting Services 的架构，及创建，管理与发布等等，不涉及Reporting Services的高级功能。&lt;/div&gt;
&lt;div&gt;Visual Studio 商业智能项目包含3个报表项目模板，关于各个报表项目模板的介绍，请&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx"&gt;&lt;span&gt;&lt;span&gt;点击这里&lt;/span&gt;&lt;/span&gt;。&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第二章详细介绍了通过 Report Builder 和 Report Model创建报表，具体细节参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Builder &lt;span&gt;和&lt;/span&gt;Report Model&lt;span&gt;创建&lt;/span&gt;Report&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第三章详细介绍了通过 Report Designer 创建报表，具体细节参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Designer &lt;span&gt;创建&lt;/span&gt;Report&lt;span&gt;报表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/152.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Visual Studio 商业智能项目包含3个报表项目模板</title><link>http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx</link><pubDate>Sat, 14 Mar 2009 09:30:00 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/151.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/151.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/15/visual-studio-3.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/151.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Visual Studio 商业智能项目包含3个报表项目模板</source><description>&lt;div align="center"&gt;&lt;b&gt;Visual Studio &lt;/b&gt;&lt;b&gt;商业智能项目包含3&lt;/b&gt;&lt;b&gt;个报表项目模板&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;当你使用BIDS（商业智能项目）的报表设计器（Report Designer）时，你可以创建和操作报表，并发表到报表服务器（Report Server），允许用户访问报表。Visual Studio 商业智能项目包含了3种报表项目模板，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="509" width="690" alt="" src="/userfiles/EntLib/image/SQLServer/ReportingServices_3_templates.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;报表服务器项目（Report server project）: Report server projects are used to create reports. Once created, your reports can be deployed to your report server. You can add shared data sources, and multiple reports to a report server project.&lt;/div&gt;
&lt;div&gt;报表服务器项目向导（Report Server Project Wizard）: This is similar to the report server project, but it immediately launches a wizard to simplify the creation of the first report.&lt;/div&gt;
&lt;div&gt;报表模型项目（Report model project）: Report model projects are used to create report models. Once deployed to a report server, a report model is used to create an actual report using the Report Builder.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于报表模型项目（Report Model）的使用，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Builder &lt;span&gt;和&lt;/span&gt;Report Model&lt;span&gt;创建&lt;/span&gt;Report&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于报表服务器项目（Report Server Project）的使用，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx"&gt;SSRS &lt;span&gt;&lt;span&gt;使用&lt;/span&gt;Report Designer &lt;span&gt;创建&lt;/span&gt;Report&lt;span&gt;报表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/151.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>SSRS 使用Report Designer 创建Report报表</title><link>http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx</link><pubDate>Sat, 14 Mar 2009 01:46:16 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/150.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/150.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/15/ssrs-report-designer-report.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/150.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">SSRS 使用Report Designer 创建Report报表</source><description>&lt;div align="center"&gt;&lt;b&gt;SSRS &lt;/b&gt;&lt;b&gt;使用Report Designer &lt;/b&gt;&lt;b&gt;创建Report&lt;/b&gt;&lt;b&gt;报表&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;开发人员可以通过SQL Server的Business Intelligence Development Studio（BIDS） 创建数据报表。如下图所示，该图描述了在BIDS中使用Report Designer创建Report的流程。Report Designer 指定了报表的所有细节，如Data Source数据源、查询、过滤器Filter、以及如何显示报表数据等等。在报表发布到SSRS 报表服务器上后，用户就可以查询这些报表来检索数据了。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="424" alt="" width="500" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_1.gif" /&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;使用BIDS Report Designer设计报表，范例程序采用AdventureWorks2008 数据库。其主要操作步骤如下：&lt;/div&gt;
&lt;div&gt;1. 启动BIDS – Microsoft SQL Server 2008 / SQL Server Business Intelligence Development Studio (BIDS)。&lt;/div&gt;
&lt;div&gt;2. 选择File / New / Project，选择Report Server Project 报表服务器项目。&lt;/div&gt;
&lt;div&gt;3. 右键点击 Reports 报表，在弹出菜单中选择Add New Report 添加新报表。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="339" width="445" alt="" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;4. 然后启动Report向导，一步一步创建Report。在Report Designer中，可以拖拉列的宽度，修改Report的标题，修改列的标题，插入图片等等。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="381" alt="" width="694" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_3.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;5. 在修改完成Report后，进一步设置项目的TargetServerURL属性，指定该报表发布的目的报表服务器的地址。&lt;/div&gt;
&lt;div&gt;6. 在成功发布报表后，既可以通过访问Report Server 来访问报表，也可以通过Report Manager 来查看报表。如下图所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="447" alt="" width="690" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportDesigner_4.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;更具体详细的操作步骤，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;1. Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies, Book V – Reporting Services, 第三章 – Creating Reports with Report Designer.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2. SSRS 使用Report Builder 和Report Model创建Report&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx"&gt;http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/150.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>SSRS 使用Report Builder 和Report Model创建Report</title><link>http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx</link><pubDate>Fri, 13 Mar 2009 16:06:34 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/149.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/149.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/14/ssrs-report-builder-report-modelreport.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/149.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">SSRS 使用Report Builder 和Report Model创建Report</source><description>&lt;div align="center"&gt;&lt;b&gt;SSRS &lt;/b&gt;&lt;b&gt;使用Report Builder &lt;/b&gt;&lt;b&gt;和Report Model&lt;/b&gt;&lt;b&gt;创建Report&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Report Builder（报表设计器）是一个简单的GUI工具，用户可以使用Report Builder创建自己需要的报表。在创建好Report Model（报表模型）并发布到Reporting Services站点后，用户就可以使用Report Model和Report Builder创建报表了。尽管通过Report Builder 创建Report比较简单，但预测用户需要什么报表以及创建Report Model可能需要一些时间。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="517" alt="" width="523" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_1.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;如上图所示，显示了使用通过Report Model（报表模型）创建Report的流程。首先，开发人员创建一个Report Model，就像一个蓝图。其中，指定了数据源，表示将显示的数据。然而，就像你不能生活在一个房屋的图纸中，你不能通过Report Model来查看报表。但是，用户可以使用Report Model和Report Builder创建自己的报表（Report）。在通过Report Model创建好Report后，该Report也可以发布到SSRS报表服务器上。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;首先，通过SQL Server Reporting Services 配置管理器验证Reporting Services是否有安装和启动。如下图所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_2.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;SSRS报表服务默认以Native mode部署，在SQL Server 2008中，SSRS 不在依赖于IIS，通过IIS 并不能找到ReportServer的相关应用程序目录。Reporting Services的Web Server URL地址为：http://servername/ReportServer&lt;/div&gt;
&lt;div&gt;Reporting Services的Report Manager URL地址为：http://servername/Reports&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;通过Report Builder 和Report Model创建Report，需要经历如下几个基本步骤：&lt;/div&gt;
&lt;div&gt;1. 通过Business Intelligence Development Studio（BIDS）创建Report Model项目。&lt;/div&gt;
&lt;div&gt;2. 向Report Model 项目中添加Data Source 和 Data Source View。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="320" alt="" width="487" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_3.jpg" /&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;3. 在Report Model 项目中创建Report Model-报表模型。如上图所示，该项目中已经创建了Employees.smdl 报表模型。&lt;/div&gt;
&lt;div&gt;4. 发布Report Model 到SQL Server Reporting Services 报表服务器上。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="459" alt="" width="538" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_4.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;如在发布过程中碰到Microsoft.ReportingServices.RsProxy.AccessDeniedException异常，请参考如下文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/13/sql-server-2008-ssrs-report-model-report-server.aspx"&gt;SQL Server 2008 - SSRS Report Model &lt;span&gt;&lt;span&gt;发布到&lt;/span&gt;Report Server&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;该文章提供了对应的解决方案。&lt;/div&gt;
&lt;div&gt;5. 访问Report Manager 站点，启动Report Builder。如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="433" alt="" width="650" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_5.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;其中，模型和数据源目录是上一步成功发布Report Model到Report Server上后，自动创建的目录。访问[模型]目录，就可以看到上一步成功发布的 Employees 报表模型了。&lt;/div&gt;
&lt;div&gt;  &lt;/div&gt;
&lt;div&gt;6. 通过Report Manager工具栏上的Report Builder（报表生成器），并使用上一步创建的Report Model创建Report。在创建好Report后，再发布到Reporting 服务上。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="194" alt="" width="613" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_6.jpg" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;下面是已经创建好的报表，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="494" alt="" width="690" src="/userfiles/EntLib/image/SQLServer/ReportingServices_ReportBuilder_7.jpg" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;具体详细的操作步骤，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;1. Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies, Book V – Reporting Services, 第二章 – Creating Reports with Report Builder.&lt;/div&gt;
&lt;div&gt;2. SSRS Tutorial: SQL Server 2008 Reporting Services Tutorial&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.accelebrate.com/sql_training/ssrs_2008_tutorial.htm"&gt;http://www.accelebrate.com/sql_training/ssrs_2008_tutorial.htm&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/149.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之四</title><link>http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx</link><pubDate>Fri, 13 Mar 2009 13:28:26 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/148.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/148.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/14/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-and-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/148.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之四</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之四&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img height="286" width="230" align="right" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx"&gt;Book III – Interacting with Your Data &lt;span&gt;&lt;span&gt;操作数据&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt; &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book IV – Database Programming &lt;/b&gt;&lt;b&gt;数据库编程&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;本节前面部分介绍了SQL Server的一些基本对象，如存储过程Stored Procedure、用户自定义函数Function、触发器Trigger等等。&lt;/div&gt;
&lt;div&gt;在第六章介绍了Linked Server，如何访问远程数据库。具体细节可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/06/sql-serverlinked-server.aspx"&gt;SQL Server&lt;span&gt;&lt;span&gt;访问远程数据库和&lt;/span&gt;Linked Server&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第七章介绍了SQL Server 2008的一些高级开发主题，如SQL Server Service Broker。Service Broker 是SQL Server 2005 中引入的基于数据库的消息机制，在SQL Server 2008进行了细微改进。Service Broker 提供了可靠的、异步的消息服务，在企业级应用中，有广阔的应用场景。具体细节可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/08/sql-server-service-broker.aspx"&gt;SQL Server Service Broker &lt;span&gt;&lt;span&gt;–&lt;/span&gt;&lt;span&gt;消息队列&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/148.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>SQL Server 2008 - SSRS Report Model 发布到Report Server</title><link>http://blog.entlib.com/EntLib/archive/2009/03/13/sql-server-2008-ssrs-report-model-report-server.aspx</link><pubDate>Thu, 12 Mar 2009 21:05:49 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/13/sql-server-2008-ssrs-report-model-report-server.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/147.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/147.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/13/sql-server-2008-ssrs-report-model-report-server.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/147.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">SQL Server 2008 - SSRS Report Model 发布到Report Server</source><description>&lt;div align="center"&gt;&lt;b&gt;SQL Server 2008 - SSRS Report Model &lt;/b&gt;&lt;b&gt;发布到Report Server&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在使用SQL Server Reporting Services (2008) 创建Report Model（报表模型项目）时，最后需要发布Report Model 到Report Server上。在发布（Deploy）过程中，产生了如下异常信息：&lt;/div&gt;
&lt;div&gt;错误：引发类型为“Microsoft.ReportingServices.RsProxy.AccessDeniedException”的异常。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;运行环境：Vista Business, .Net Framework 3.5 SP1, Visual Studio 2008 SP1&lt;/div&gt;
&lt;div&gt;解决办法：可能是默认运行的VS 2008 没有足够的权限发布Report Model 到Report Server。因此，可以使用Administrator 帐号运行VS 2008，然后再次发布Report Model，就成功了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;操作步骤：首先找到SQL Server 2008，右键点击Business Intelligence Development Studio，选择Run as administrator，就可以以Administrator帐号运行VS 2008了。欢迎访问&lt;a href="http://blog.entlib.com"&gt;http://blog.entlib.com&lt;/a&gt; 开源ASP.NET/C# 技术博客平台。&lt;br /&gt;
 &lt;br /&gt;
相关链接：&lt;br /&gt;
1. How to: Configure a Report Server for Local Administration on Windows Vista and Windows Server 2008&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/bb630430.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb630430.aspx&lt;/a&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/147.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>SQL Server Service Broker – 消息队列</title><link>http://blog.entlib.com/EntLib/archive/2009/03/08/sql-server-service-broker.aspx</link><pubDate>Sat, 07 Mar 2009 18:14:59 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/08/sql-server-service-broker.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/144.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/144.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/08/sql-server-service-broker.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/144.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">SQL Server Service Broker – 消息队列</source><description>&lt;div align="center"&gt;&lt;b&gt;SQL Server Service Broker – &lt;/b&gt;&lt;b&gt;消息队列&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Service Broker 是集成在SQL Server 2005/2008内的消息服务，允许数据库应用程序单向（one-way）或双向（two-way）轻松交换消息。Service Broker 两个重要的优点是：&lt;/div&gt;
&lt;div&gt;（1）异步消息（Asynchronous messages）&lt;/div&gt;
&lt;div&gt;（2）确保到达目的地（Guaranteed delivery）&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Service Broker 包含一些相关的组件，Contract、Service、Queue队列、Message Type消息类型、Service program or service application 服务应用程序（一般为存储过程）等等，如下图所示。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="382" width="520" alt="" src="/userfiles/EntLib/image/SQLServer/SQLServer_SSB_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Service Broker 应用程序通过对话进行通信。在实际生活中，对话是两个人之间的沟通。一个人发送一条消息，另外一个人接收消息并回复。&lt;/div&gt;
&lt;div&gt;在Service Broker中，一个对话是通过contract、队列、服务进行可靠的、异步的消息交换。简而言之，Service Broker 对话用来发送和接收消息。如下图所示，两个分离的数据库分别定义了一个Service Broker服务，相互之间进行发送和接收消息，进行双向对话。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="471" width="525" alt="" src="/userfiles/EntLib/image/SQLServer/SQLServer_SSB_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;Orders数据库发送一条消息给Shipping数据库，消息中说一个订单Order已经接收并确认了。Shipping数据库则发送一条确认消息，说订单正在被处理，随后当订单实际发货后，发送另一条消息给Orders数据库。&lt;/div&gt;
&lt;div&gt;当有消息在进入队列时，可以配置Service Broker自动启动服务程序，或者配置程序定期检查消息队列（Message Queue）。Service Broker非常灵活，足以出来不同的业务需要。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于Service Broker的实际开发，建议你参考如下一些文章：&lt;/div&gt;
&lt;div&gt;Service Broker实现发布-订阅（Publish-Subscribe）框架(1) （中文）&lt;/div&gt;
&lt;div&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=70"&gt;http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=70&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Service Broker实现发布-订阅（Publish-Subscribe）框架(2) （中文）&lt;/div&gt;
&lt;div&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=71"&gt;&lt;font color="#0000ff"&gt;http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=71&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Service Broker实现发布-订阅（Publish-Subscribe）框架(3) （中文）&lt;/div&gt;
&lt;div&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=72"&gt;&lt;font color="#0000ff"&gt;http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=72&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Introducing Distributed Messaging using Service Broker in SQL Server 2005 （英文）&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.codeproject.com/KB/database/IntroServiceBroker.aspx"&gt;http://www.codeproject.com/KB/database/IntroServiceBroker.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/144.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>SQL Server访问远程数据库和Linked Server</title><link>http://blog.entlib.com/EntLib/archive/2009/03/06/sql-serverlinked-server.aspx</link><pubDate>Thu, 05 Mar 2009 23:13:42 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/06/sql-serverlinked-server.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/142.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/142.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/06/sql-serverlinked-server.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/142.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">SQL Server访问远程数据库和Linked Server</source><description>&lt;div align="center"&gt;&lt;b&gt;SQL Server&lt;/b&gt;&lt;b&gt;访问远程数据库和Linked Server&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server连接远程数据源的基本方法有下面三种：&lt;/div&gt;
&lt;div&gt;&lt;b&gt;OPENDATASOURCE&lt;/b&gt;: The OPENDATASOURCE function is used to specify connection information for a remote data source by specifying the OLE DB provider and an initialization string. OPENDATASOURCE can be used directly within a SELECT, INSERT, UPDATE, or DELETE statement.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;OPENROWSET&lt;/b&gt;: The OPENROWSET function is used to specify connection information for a remote data source and the name of an object that will return a result set (such as a stored procedure) or a query that will return a result set. Like OPENDATASOURCE, OPENROWSET can be used directly within a SELECT, INSERT, UPDATE, or DELETE statement.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Linked servers&lt;/b&gt;: A linked server is an object within SQL Server that defines the connection properties of another SQL Server. When defined, queries can connect to the remote server using a four-part name, such as&lt;/div&gt;
&lt;div align="center"&gt;SQLSrv1.AdventureWorks.person.Contact&lt;/div&gt;
&lt;div&gt;The four-part name identifies the server (SQLSrv1), the database (AdventureWorks), the schema (Person), and the object (Contact table). Linked servers are explored in more depth in the final section of this chapter.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;其中OPENDATASOURCE和OPENROWSET方法一般用来做临时查询（ad hoc query），如果需要经常的查询远程数据，则建议创建linked servers。但是，默认情况ad hoc query 是禁用的，需要手动启动：&lt;/div&gt;
&lt;div&gt;sp_configure ‘show advanced options’, 1;&lt;/div&gt;
&lt;div&gt;GO&lt;/div&gt;
&lt;div&gt;RECONFIGURE;&lt;/div&gt;
&lt;div&gt;GO&lt;/div&gt;
&lt;div&gt;sp_configure ‘Ad hoc Distributed Queries’, 1;&lt;/div&gt;
&lt;div&gt;GO&lt;/div&gt;
&lt;div&gt;RECONFIGURE;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;然后，就可以使用OPENDATASOURCE 查询远程数据库了，OPENDATASOURCE 基本语法如下：OPENDATASOURCE ( provider_name, init_string )。示例代码如下：&lt;/div&gt;
&lt;div&gt;SELECT *&lt;/div&gt;
&lt;div&gt;FROM OPENDATASOURCE(‘SQLNCLI’,&lt;/div&gt;
&lt;div&gt;‘Data Source=SQL08;Integrated Security=SSPI’)&lt;/div&gt;
&lt;div&gt;.Sales.dbo.Customers&lt;/div&gt;
&lt;div&gt;上述代码从SQL08服务器上读取Sales数据库的Customers表的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;也可以通过OPENROWSET方法查询远程数据库，OPENROWSET和OPENDATASOURCE方法相似，基本的差异是OPENROWSET总是返回结果集，而OPENDATASOURCE方法除了可以返回结果集（Result Set）外，也可以用来执行存储过程。&lt;/div&gt;
&lt;div&gt;OPENROWSET 基本语法如下：&lt;/div&gt;
&lt;div&gt;OPENROWSET ( provider_name, provider_string )&lt;/div&gt;
&lt;div&gt;示例代码：&lt;/div&gt;
&lt;div&gt;SELECT rs.*&lt;/div&gt;
&lt;div&gt;FROM OPENROWSET(‘SQLNCLI’,&lt;/div&gt;
&lt;div&gt;‘Server=SQL08;Trusted_Connection=yes;’,&lt;/div&gt;
&lt;div&gt;‘SELECT * FROM Sales.dbo.Customers’) AS rs;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;使用Linked Server&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;如果你计划多次查询外部或远程数据源，建议创建linked server。尽管创建linked server需要一点时间，但是一旦创建后，你可以非常方便地使用four-part 名称来访问远程数据源。&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="303" alt="" width="506" src="/userfiles/EntLib/image/SQLServer/linkedserver_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;创建和配置linked server&lt;/b&gt;&lt;b&gt;一般需要两步：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;第一步是创建linked server。&lt;/div&gt;
&lt;div&gt;可以通过sp_addlinkserver系统存储过程来创建linked server，基本语法如下：&lt;/div&gt;
&lt;div&gt;sp_addlinkedserver [ @server= ] ‘server’ [ , [@srvproduct= ] ‘product_name’ ]&lt;/div&gt;
&lt;div&gt;[ , [ @provider= ] ‘provider_name’ ]&lt;/div&gt;
&lt;div&gt;[ , [ @datasrc= ] ‘data_source’ ]&lt;/div&gt;
&lt;div&gt;[ , [ @location= ] ‘location’ ]&lt;/div&gt;
&lt;div&gt;[ , [ @provstr= ] ‘provider_string’ ]&lt;/div&gt;
&lt;div&gt;[ , [ @catalog= ] ‘catalog’ ]&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;示例脚本如下所示：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;EXEC&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: maroon"&gt;sp_addlinkedserver &lt;/span&gt;&lt;span style="color: teal"&gt;@server&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'SQLSRV3'&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: teal"&gt;@srvProduct&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;N'SQL Server'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;也可以通过SQL Server的管理界面，来创建linked server，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="352" alt="" width="450" src="/userfiles/EntLib/image/SQLServer/linkedserver_2.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;右键点击上述节点，选择“新建链接服务器…”，在弹出的窗口，就可以创建linked server了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第二步是创建linked server的登录帐号。&lt;/div&gt;
&lt;div&gt;在linked server创建后，下一步是创建远程服务器的登录帐号。通过本地SQL Server的登录帐号来映射到linked server的登录帐号。&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="273" alt="" width="627" src="/userfiles/EntLib/image/SQLServer/linkedserver_3.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;创建linked server的登录帐号也有两种方法，一种是通过系统存储过程 sp_addlinkedsrvlogin，sp_addlinkedsrvlogin的基本语法如下：&lt;/div&gt;
&lt;div&gt;sp_addlinkedsrvlogin [ @rmtsrvname = ] ‘rmtsrvname’&lt;/div&gt;
&lt;div&gt;[ , [ @useself = ] ‘TRUE’ | ‘FALSE’ | ‘NULL’]&lt;/div&gt;
&lt;div&gt;[ , [ @locallogin = ] ‘locallogin’ ]&lt;/div&gt;
&lt;div&gt;[ , [ @rmtuser = ] ‘rmtuser’ ]&lt;/div&gt;
&lt;div&gt;[ , [ @rmtpassword = ] ‘rmtpassword’ ]&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;sp_addlinkedsrvlogin创建远程服务器登录帐号示例脚本如下：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;EXEC &lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon"&gt;sp_addlinkedsrvlogin &lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;@rmtsrvname&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;N'SQLSRV3'&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;@useself&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;N'False'&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;@locallogin&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;N'sa'&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;@rmtuser&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;N'remoteuser'&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;@rmtpassword&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;'passowrd'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;当然也可以通过SQL Server管理界面来设置登录帐号，如下图所示：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="340" alt="" width="648" src="/userfiles/EntLib/image/SQLServer/linkedserver_4.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文参考《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》，欢迎访问&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 来源ASP.NET、C# 技术交流论坛。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/142.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之三</title><link>http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx</link><pubDate>Wed, 04 Mar 2009 20:47:05 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/141.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/141.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/05/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-yet-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/141.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之三</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之三&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img align="right" alt="" src="http://blog.entlib.com/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx"&gt;Book II – Designing and Using Databases &lt;span&gt;&lt;span&gt;设计和使用数据库&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt; &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book III – Interacting with Your Data &lt;/b&gt;&lt;b&gt;操作数据&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;首先，本节第一步就介绍了&lt;b&gt;数据库的范式&lt;/b&gt;，数据库的设计范式是数据库设计所需要满足的规范，避免数据库存储大量不需要的冗余信息。&lt;/div&gt;
&lt;div&gt;第一范式（1NF，First Normal Form: No Repeating Groups）是指数据库表的每一列都是不可分割的基本数据项，同一列中不能有多个值，即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性，就可能需要定义一个新的实体，新的实体由重复的属性构成，新实体与原实体之间为一对多关系。&lt;/div&gt;
&lt;div&gt;第二范式（2NF，Second Normal Form: Dependent on the Whole Key）是在第一范式（1NF）的基础上建立起来的，即满足第二范式（2NF）必须先满足第一范式（1NF）。第二范式（2NF）要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性，如果存在，那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体，新实体与原实体之间是一对多的关系。&lt;/div&gt;
&lt;div&gt;满足第三范式（3NF）必须先满足第二范式（2NF）。简而言之，第三范式（3NF）要求每一个非主关键字段必须直接且仅依赖主关键字字段。换句换说，如果任何一个非主关键字段（non-primary column）是直接依赖于其他非主关键字段（non-primary column），则这个表的设计不符合第三范式。&lt;/div&gt;
&lt;div&gt;第二范式和第三范式的最大区别是：第二范式强调非主关键字段必须依赖于整个主关键字段（组合关键字段列表，composite key），而不是部分关键字段列表。而第三范式强调的是：非主关键字段必须依赖于主关键字，而不是其他非主关键字段。也就是说，每一个字段或列必须依赖于整个主关键字段列（第二范式），且仅仅主关键字段列（第三范式）。&lt;/div&gt;
&lt;div&gt;当然，我们为了提高系统的性能，必要时违反范式（Denomalizing your database），增加冗余数据到数据库。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;接下来第二章介绍了SQL Server的优化，包括使用执行计划、创建和维护统计信息等。介绍的比较简单，值得看一下。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;后面的章节介绍了查询设计器（Query Designer）、更新数据、视图等等，比较简单，可以很快跳过去。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;最后一部分，介绍了高级查询主题，包括事务、全文检索（Full-text Search）、Outer Joins和查询XML数据等等。&lt;/div&gt;
&lt;div&gt;Microsoft 在最近的SQL Server的版本中增加了对XML 的重大支持，XML 数据可以存放在XML数据类型的列中，或者nvarchar(MAX) 数据类型中。在SQL Server 2008中，提供了如下的XML 方法，用来查询和更新XML数据。&lt;/div&gt;
&lt;div&gt;Query – 该方法用来从XML文档中查询单一节点。&lt;/div&gt;
&lt;div&gt;Value – 该方法用来从XML文档中检索单一值。&lt;/div&gt;
&lt;div&gt;Exist – 该方法用来检查一个特定的值是否存在于XML文档中。&lt;/div&gt;
&lt;div&gt;Nodes – 该方法用来从XML文档中检索多个值，通常用来以table的格式显示XML数据。&lt;/div&gt;
&lt;div&gt;Modify – 该方法更新XML文档的数据。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;关于XML&lt;/b&gt;&lt;b&gt;数据的查询，这里简单演示其中相关的SQL&lt;/b&gt;&lt;b&gt;脚本：&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: green"&gt;--Declare the variable for the XML instance&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@myXML&lt;/span&gt; &lt;span style="color: blue"&gt;xml&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: green"&gt;--Create the XML instance&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;SET&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@myXML&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;Root&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;Contact ContactID=''101'' ContactName=''Homer Simpson''&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;ContactInformation&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;email&amp;gt;Homer@springfield.com&amp;lt;/email&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;Cell&amp;gt;1-123-555-1234&amp;lt;/Cell&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;/ContactInformation&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;/Contact&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;Contact ContactID=''102'' ContactName=''Marge Simpson''&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;ContactInformation&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;email&amp;gt;Marge@springfield.com&amp;lt;/email&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;Cell&amp;gt;1-123-555-5678&amp;lt;/Cell&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;/ContactInformation&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;/Contact&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;&amp;lt;/Root&amp;gt;'&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: green"&gt;--Use the query method to query the XML instance&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@myXML&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;query&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/Root/Contact/ContactInformation/email/text()'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@ContactID&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: green"&gt;--Retrieve value of ContactID for the 2nd row [2]&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;SET&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@ContactID&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;@myXML&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;value&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'(/Root/Contact/@ContactID)[2]'&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt; &lt;span style="color: red"&gt;'int'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: green"&gt;--Display the value&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@ContactID&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@dataExists&lt;/span&gt; &lt;span style="color: blue"&gt;bit&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: green"&gt;--See if Homer Simpson exists in the XML instance&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;SET&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@dataExists&lt;/span&gt; &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: teal"&gt;@myXML&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;exist&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/Root = (''Homer Simpson'')'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@dataExists&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: green"&gt;--Retrieve the nodes&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;SELECT&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: teal"&gt;MyTable&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;cols&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;value&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;'@ContactName'&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;,&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: red"&gt;'varchar(35)'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;Name&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: teal"&gt;MyTable&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;cols&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;query&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;'ContactInformation/email'&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;[Email]&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: teal"&gt;MyTable&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;cols&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;.&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal"&gt;query&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;(&lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;'ContactInformation/Cell'&lt;/span&gt;&lt;span style="font-size: 10pt; color: gray"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt; &lt;span style="color: teal"&gt;[CellPhone]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: blue"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt"&gt; &lt;span style="color: teal"&gt;@myXML&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: teal"&gt;nodes&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;'/Root/Contact'&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt; &lt;span style="color: teal"&gt;MyTable&lt;/span&gt;&lt;span style="color: gray"&gt;(&lt;/span&gt;&lt;span style="color: teal"&gt;cols&lt;/span&gt;&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;欢迎访问&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com/&lt;/a&gt; 开源ASP.NET博客平台，了解更多的读书笔记。&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/141.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之二</title><link>http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx</link><pubDate>Tue, 03 Mar 2009 22:39:27 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/140.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/140.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/04/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/140.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之二</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之二&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx"&gt;Book I – Essential Concepts &lt;span&gt;&lt;span&gt;基本概念&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book II – Designing and Using Databases &lt;/b&gt;&lt;b&gt;设计和使用数据库&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;第二部书介绍了如何创建数据库，以及对数据库进行改名、删除、或修改数据库参数等等。接下来介绍了SQL Server中的数据类型，创建新的数据表、视图等等，以及如何修改和删除表。最后，讲述了数据表关系，包括主键、外键等等。&lt;/div&gt;
&lt;div&gt;这部分的内容也比较简单，SQL Server方面的基础知识，一般3小时可以阅读完这部分的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" src="http://blog.entlib.com/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies2.gif" /&gt;&lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/140.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之一</title><link>http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx</link><pubDate>Mon, 02 Mar 2009 21:58:35 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/139.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/139.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/03/microsoft-sql-server-2008-all-in-one-desk-reference-for-dummies.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/139.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之一</source><description>&lt;div align="center"&gt;&lt;b&gt;Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies &lt;/b&gt;&lt;b&gt;读书笔记之一&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="306" width="387" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies2.gif" /&gt;&lt;/div&gt;
&lt;div&gt;SQL Server 2008是一个重大的产品版本，它推出了许多新的特性和关键的改进，使得它成为至今为止的最强大和最全面的 SQL Server 版本。《Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies》包括了9本书，分别介绍了SQL Server 2008的一些特性和技术，内容图文并茂、非常直观、浅显易懂。本系列读书笔记分9篇，分别介绍每本书的一些值得关注的内容。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Book I – Essential Concepts &lt;/b&gt;&lt;b&gt;基本概念&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;对SQL Server 2008进行一些基本介绍，包括安装SQL Server 2008，内容非常简单，3小时足够完成这部分内容的阅读。关于SQL Server 2008 的安装，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: #3b3e39"&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=344"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;一步一步安装&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;SQL Server 2008&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;（附截图）&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="286" width="230" alt="" src="/userfiles/EntLib/image/ebook/Microsoft_SQL_Server_2008_for_Dummies.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/139.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>OREILLY Programming .NET 3.5 读书笔记之三</title><link>http://blog.entlib.com/EntLib/archive/2009/03/01/oreilly-programming-.net-3.5-again.aspx</link><pubDate>Sat, 28 Feb 2009 21:42:00 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/03/01/oreilly-programming-.net-3.5-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/138.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/138.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/03/01/oreilly-programming-.net-3.5-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/138.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">OREILLY Programming .NET 3.5 读书笔记之三</source><description>&lt;div align="center"&gt;&lt;b&gt;OREILLY Programming .NET 3.5 &lt;/b&gt;&lt;b&gt;读书笔记之三&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img align="right" alt="" src="/userfiles/EntLib/image/ebook/ProgrammingNet3_5.gif" /&gt;《Programming .NET 3.5》是OREILLY 2008.08出版的.NET 3.5 开发书籍，作者是Jesse Liberty 和 Alex Horovitz，比较全面地介绍.NET 3.5的一些新技术，如XAML、AJAX、WPF、WCF、WF、LINQ、CardSpace、N-tier架构设计等等。这里，记录我的一些读书笔记，希望对学习《Programming .NET 3.5》的朋友有些帮助。欢迎到&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源论坛交流.NET 3.5的一些知识。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本书主要分为三个部分：&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 1 – Presentation Options&lt;/b&gt;&lt;b&gt;（表现层选项）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;介绍了.NET 3.5 提供的多种表现层设计技术，如XAML、WPF、AJAX、Silverlight等等。&lt;/div&gt;
&lt;div&gt;其中第一章简单介绍了.NET 3.5的优点和新技术；第二、三章介绍并演示了XAML和WPF基本编程要素，具体细节请参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Resources&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之八&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; –&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;动画：缓慢旋转的按钮&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之九&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Hello Kitty &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第四章综合运用前面章节的XAML/WPF技术，一步一步演示如何创建一个具体的WPF应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之一&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;(Data Binding) – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码&lt;span&gt;下载&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/29/wpf-hello-kitty.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之二&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Hello Kitty &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码下载&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第五章简单介绍了AJAX概念及入门向导，非常简单。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第六章运用AJAX Control Toolkit – ReorderList 控件，创建一个To-Do 任务列表的实际Web Application 应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;&lt;span&gt;基于&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX Control Toolkit - ReorderList &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ToDo &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;任务列表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;&lt;span&gt;基于&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX Control Toolkit - ReorderList &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ToDo &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;任务列表&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第七章简单介绍了Silverlight 2技术，并在最后演示如何创建一个数据绑定的范例程序。&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Silverlight 2 &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定演示程序（附源代码下载）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 2 – Interlude on Design Patterns&lt;/b&gt;&lt;b&gt;（.NET 3.5&lt;/b&gt;&lt;b&gt;设计模式）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;第八章简单介绍了3-Tier和N-Tier架构，MVC模式（内容过时），Observer设计模式，Factory Method 工厂方法设计模式，Chain-of-Command和Singleton设计模式。这部分内容在很多书上都有介绍，可根据需要选择阅读，与.NET 3.5 关系不大。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 3 – The Business Layer&lt;/b&gt;&lt;b&gt;（业务层）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;第九章简单介绍了.NET 3.5 引入的LINQ，包括LINQ 的基本语法、LINQ to SQL、LINQ to XML、扩展方法（Extension Method）、Lambda Expression等等。内容比较简单，比较适合LINQ初学者。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十章介绍了WCF/SOA基本概念，如SOAP/WSDL/UDDI、EndPoint等等，其中关于Contract的定义需要注意的几点：&lt;/div&gt;
&lt;div&gt;1. Stability is job one! Don’t publish a contract for others until you are sure the service is stable and not likely to change.&lt;/div&gt;
&lt;div&gt;2. Say what you mean and mean what you say. Be explicit in your contracts to ensure that people understand both the explicit and intended usages.&lt;/div&gt;
&lt;div&gt;3. Make sure the public data schema is abstract; don’t expose internal representations.&lt;/div&gt;
&lt;div&gt;4. If you break it, you version it. Even the best-designed service might need to change; use versioning to help insulate your consumers from these changes.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;中文意思：&lt;/div&gt;
&lt;div&gt;1. 稳定性是第一项工作。不要发布contract给其他人，直到你确信Service已经基本稳定，不会改变了。&lt;/div&gt;
&lt;div&gt;2. 准确表达你想说的。contract需要清楚描述，确保其他人可以准确理解显式和隐式的用法。&lt;/div&gt;
&lt;div&gt;3. 确保公有的数据schema是抽象的，不要暴露内部表示。&lt;/div&gt;
&lt;div&gt;4. 如果你想改变contract，你需要定义新的版本好。因为即使设计最好的服务，都可能需要改变，通过使用版本号来帮助你隔离现有的使用者远离这些变化。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十一章应用WCF技术，演示如何创建YahooQuotes WCF 服务，并创建WPF Client应用程序调用该WCF服务。示例程序比较简单，如果你对WCF 还不了解，建议你参考如下文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2008/09/22/wcf.aspx"&gt;&lt;font color="#0000ff"&gt;WCF &lt;span&gt;&lt;span&gt;开发示例向导&lt;/span&gt; --- &lt;span&gt;经典推荐！&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十二章简单介绍了WF，并简单演示了如何创建Sequential Workflow应用程序，适合于WF新手。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十三章应用WF技术演示如何创建一个状态机（ State Machine），本章演示了前一章的所有概念，创建了一个完整的工作流应用程序。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第十四章介绍并应用CardSpace。CardSpace是基于身份识别，允许用户提交用户身份信息到一个网站。当用户登录到一个支持CardSpace网站，将显示CardSpace服务，用户可以选择一个身份卡片（Identity card）传送到该网站，就像你使用普通的ID卡、身份证或信用卡一样。CardSpace是.NET 3.5引用的新技术，目前支持CardSpace的网站还不多。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;《Programming .NET 3.5》系列读书笔记到此技术，感谢Jesse Liberty 和 Alex Horovitz提供的这本书。本书对.NET 3.5的新技术基本都有涉及，遗漏了ADO.NET Entity Framework这部分的内容（.NET 3.5 SP1引入的新技术）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;关于ADO.NET Entity Framework 的内容，可以参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/entlibforum/archive/2008/12/01/ado.net-entity-framework.aspx"&gt;ADO.NET Entity Framework &lt;span&gt;&lt;span&gt;深入分析系列文章&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;OREILLY 网站该书的地址：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://oreilly.com/catalog/9780596527563/index.html"&gt;http://oreilly.com/catalog/9780596527563/index.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/138.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>OREILLY Programming .NET 3.5 读书笔记之一</title><link>http://blog.entlib.com/EntLib/archive/2009/02/22/oreilly-programming-.net-3.5.aspx</link><pubDate>Sat, 21 Feb 2009 19:31:06 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/02/22/oreilly-programming-.net-3.5.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/136.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/136.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/02/22/oreilly-programming-.net-3.5.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/136.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">OREILLY Programming .NET 3.5 读书笔记之一</source><description>&lt;div align="center"&gt;&lt;b&gt;OREILLY Programming .NET 3.5 &lt;/b&gt;&lt;b&gt;读书笔记之一&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img height="236" width="180" align="right" alt="" src="/userfiles/EntLib/image/ebook/ProgrammingNet3_5.gif" /&gt;《Programming .NET 3.5》是OREILLY 2008.08出版的.NET 3.5 开发书籍，作者是Jesse Liberty 和 Alex Horovitz，比较全面地介绍.NET 3.5的一些新技术，如XAML、AJAX、WPF、WCF、WF、LINQ、CardSpace、N-tier架构设计等等。这里，记录我的一些读书笔记，希望对学习《Programming .NET 3.5》的朋友有些帮助。欢迎到&lt;a href="http://forum.entlib.com/"&gt;http://forum.entlib.com&lt;/a&gt; 开源论坛交流.NET 3.5的一些知识。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本书主要分为三个部分：&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 1 – Presentation Options&lt;/b&gt;&lt;b&gt;（表现层选项）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;介绍了.NET 3.5 提供的多种表现层设计技术，如XAML、WPF、AJAX、Silverlight等等。&lt;/div&gt;
&lt;div&gt;其中第一章简单介绍了.NET 3.5的优点和新技术；第二、三章介绍并演示了XAML和WPF基本编程要素，具体细节请参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Resources&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之八&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; –&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;动画：缓慢旋转的按钮&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx"&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;实例演示之九&lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt; – Hello Kitty &lt;/span&gt;&lt;span style="color: #002060; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第四章综合运用前面章节的XAML/WPF技术，一步一步演示如何创建一个具体的WPF应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之一&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;(Data Binding) – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码下载&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/29/wpf-hello-kitty.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;WPF &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;范例程序之二&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Hello Kitty &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;附源代码下载&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第五章简单介绍了AJAX概念及入门向导，非常简单。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第六章运用AJAX Control Toolkit – ReorderList 控件，创建一个To-Do 任务列表的实际Web Application 应用程序，具体参考如下文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;&lt;span&gt;基于&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX Control Toolkit - ReorderList &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;构建&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ToDo &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;任务列表&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第七章简单介绍了Silverlight 2技术，并在最后演示如何创建一个数据绑定的范例程序。&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Silverlight 2 &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;数据绑定演示程序（附源代码下载）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 2 – Interlude on Design Patterns&lt;/b&gt;&lt;b&gt;（.NET 3.5&lt;/b&gt;&lt;b&gt;设计模式）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;待续….&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;Part 3 – The Business Layer&lt;/b&gt;&lt;b&gt;（业务层）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;待续….&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;OREILLY 网站该书的地址：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://oreilly.com/catalog/9780596527563/index.html"&gt;http://oreilly.com/catalog/9780596527563/index.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/136.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>Silverlight 2 数据绑定演示程序（附源代码下载）</title><link>http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx</link><pubDate>Sat, 21 Feb 2009 19:07:29 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/135.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/135.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/02/22/silverlight-2.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/135.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">Silverlight 2 数据绑定演示程序（附源代码下载）</source><description>&lt;div align="center"&gt;&lt;b&gt;Silverlight 2 &lt;/b&gt;&lt;b&gt;数据绑定演示程序（附源代码下载）&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;数据绑定（Data Binding）是用户界面UI和业务对象或其它数据提供者（data provider）的连接。用户界面对象称为目标，数据提供者成为数据源。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;数据绑定帮主隔离应用程序的用户界面层和其他层，如业务对象、数据等等。通过绑定对象，实现用户界面层和底层的隔离，其中有2种模式：one-way和two-way。one-way 绑定仅仅显示数据源的数据，two-way 绑定则在更新用户界面的数据时，会同步更新数据源。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面创建一个Silverlight 2 应用程序，绑定到业务对象，其中Book.cs 文件表示业务层（Business Layer）。如果你希望业务对象改变时，自动更新UI，业务对象必须实现INotifyPropertyChanged 接口。这个接口需要类有一个类型为PropertyChangedEventHandler事件。当绑定到UI控件上的任何属性Property 被赋值或清除时，必须触发PropertyChanged事件。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面看看Book.cs 文件的部分代码：&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Book&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;INotifyPropertyChanged&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;Book类实现INotifyPropertyChanged 接口。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面的代码是对Title属性的定义。在set中，会触发PropertyChanged事件。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: green"&gt;// implement the required event for the interface&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PropertyChangedEventHandler&lt;/span&gt; PropertyChanged;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Title&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; bookTitle; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                bookTitle = &lt;span style="color: blue"&gt;value&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                NotifyPropertyChanged(&lt;span style="color: #a31515"&gt;"Title"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            } &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }     &lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: green"&gt;// factoring out the call to the event&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; NotifyPropertyChanged(&lt;span style="color: blue"&gt;string&lt;/span&gt; propertyName)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;if&lt;/span&gt; (PropertyChanged != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                PropertyChanged(&lt;span style="color: blue"&gt;this&lt;/span&gt;, &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PropertyChangedEventArgs&lt;/span&gt;(propertyName));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在xaml页面文件中，每一个绑定的字段均使用Binding语法，关键字Binding跟随一个公有属性（public property），且属性绑定到控件，同时设置Mode，默认为OneWay。示例代码如下：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; x&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="AuthorURL"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Text&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; AuthorURL&lt;/span&gt;&lt;span style="color: blue"&gt;,&lt;/span&gt;&lt;span style="color: red"&gt; Mode&lt;/span&gt;&lt;span style="color: blue"&gt;=OneWay }"&lt;/span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Bottom"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue"&gt;="Left"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="5"&lt;/span&gt;&lt;span style="color: red"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue"&gt;="1"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Style&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red"&gt; TextBlockStyle&lt;/span&gt;&lt;span style="color: blue"&gt;}"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;DataContext&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;上面的实例代码表示AuthorURL控件绑定到AuthorURL属性，但是没有告诉它绑定到哪一个对象。DataContext 对象是一个特定的book实例，在运行时指定，并赋值给Grid的DataContext属性，这样，数据绑定控件就知道从book实例中获取AuthorURL属性值了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DataContext对象可以沿着UI树继承，这样，当我们设置Grid对象的DataContext属性后，所有在Grid内的其他控件将可以访问DataContext（除非这些控件有自己的DataContext定义）。看看示例代码：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;void&lt;/span&gt; Page_Loaded(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Book&lt;/span&gt; book = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Book&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            InitializeProgramming(book);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;            LayoutRoot.DataContext = book;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;控件样式Styling Controls&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在Silverlight中有2种方式设置控件的样式：（1）直接在控件中应用样式Applying Styles Inline。示例代码如下：&lt;/div&gt;
&lt;div&gt;&amp;lt;TextBlock x:Name="TitlePrompt" Text="Title: " VerticalAlignment="Bottom"&lt;/div&gt;
&lt;div&gt;HorizontalAlignment="Right" Grid.Row="0" Grid.Column="0"&lt;/div&gt;
&lt;div&gt;&lt;b&gt;FontFamily="Comic Sans MS"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;FontSize="16"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;FontWeight="Bold"&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Foreground="Red"&lt;/b&gt; /&amp;gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;（2）创建并应用Style对象&lt;/div&gt;
&lt;div&gt;Style对象是可以重用的资源，你可以应用到任何container，或者通过放置在App.xaml 的Resources节，应用到整个项目。&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;    &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Application.Resources&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Style&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: red"&gt; TargetType&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="TextBlock"&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: red"&gt; x&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: red"&gt;Key&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="TextBlockStyle"&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="VerticalAlignment"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Bottom"/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="HorizontalAlignment"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Right" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="FontFamily"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;宋体" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="FontSize"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="16" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Setter&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Property&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Foreground"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Value&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Blue" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Style&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;    &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Application.Resources&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序运行界面：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img alt="" src="/userfiles/EntLib/image/Silverlight/Silverlight_Book_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本范例程序来自于《Programming .NET 3.5》，欢迎下载交流。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/135.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表 之二</title><link>http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx</link><pubDate>Sat, 14 Feb 2009 10:42:55 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/131.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/131.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/02/15/ajax-control-toolkit-reorderlist-todo-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/131.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表 之二</source><description>&lt;div align="center"&gt;&lt;b&gt;基于AJAX Control Toolkit - ReorderList &lt;/b&gt;&lt;b&gt;构建ToDo &lt;/b&gt;&lt;b&gt;任务列表 &lt;/b&gt;&lt;b&gt;之二&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在《&lt;a href="http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx"&gt;基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表&lt;/a&gt;》文章中，演示了如何通过ReorderList AJAX 控件创建ToDo 任务列表，本文在上篇文章的基础上，进一步增加功能：用户注册、用户登录、并按照登录的用户显示该用户的任务列表。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;用户登录界面：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="389" alt="" width="588" src="/userfiles/EntLib/image/ASP.NET/ToDoList_v2_1.gif" /&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt;其中，需要注册新帐号部分采用AJAX – CollapsiblePanel 控件，点击则显示新用户注册面板：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;CollapsiblePanelExtender&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Register_ContentPanel_CollapsiblePanelExtender"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: red"&gt;runat&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="server"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;Enabled&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&lt;/span&gt; &lt;span style="color: red"&gt;ExpandControlID&lt;/span&gt;&lt;span style="color: blue"&gt;="Register_ContentPanel"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: red"&gt;CollapseControlID&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Register_ContentPanel"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: red"&gt;TargetControlID&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="RegisterContentPanel"&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;Collapsed&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;CollapsiblePanelExtender&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="511" alt="" width="626" src="/userfiles/EntLib/image/ASP.NET/ToDoList_v2_2.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;用户登录后，显示该用户的任务列表：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="609" alt="" width="684" src="/userfiles/EntLib/image/ASP.NET/ToDoList_v2_3.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序采用了AJAX、MasterPage、SqlDataSource等等技术，ToDo范例数据库采用SQL Server 2008。范例程序提供源代码下载，欢迎交流、分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/131.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表</title><link>http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx</link><pubDate>Fri, 06 Feb 2009 15:31:11 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/130.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/130.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/02/07/ajax-control-toolkit-reorderlist-todo.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/130.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">基于AJAX Control Toolkit - ReorderList 构建ToDo 任务列表</source><description>&lt;div align="center"&gt;&lt;b&gt;基于AJAX Control Toolkit - ReorderList &lt;/b&gt;&lt;b&gt;构建ToDo &lt;/b&gt;&lt;b&gt;任务列表&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;ReorderList是一个全新的控件。它可以实现逐条列出数据并实现交互。用户简单的拖拽就可以改变数据的排列顺序并更新到数据源。在本控件中如果SortOrderField 属性设置之后排序将自动完成。关于ReorderList – AJAX控件的介绍，请参考如下文章：&lt;span style="font-size: 9pt; color: #3b3e39"&gt;&lt;a href="http://forum.entlib.com/Default.aspx?g=posts&amp;amp;t=425"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;AJAX &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; - ReorderList &lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如下是基于ReorderList 控件创建的ToDo任务列表范例程序：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="668" width="690" alt="" src="/userfiles/EntLib/image/ASP.NET/Demo_ToDo_Project_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;其中ReorderList 控件脚本如下：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ReorderList&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="ReorderList1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;AllowReorder&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&lt;/span&gt; &lt;span style="color: red"&gt;DataSourceID&lt;/span&gt;&lt;span style="color: blue"&gt;="SqlDataSourceToDo"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: red"&gt;PostBackOnReorder&lt;/span&gt;&lt;span style="color: blue"&gt;="False"&lt;/span&gt; &lt;span style="color: red"&gt;SortOrderField&lt;/span&gt;&lt;span style="color: blue"&gt;="item_priority"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;="itemArea"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Label1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Eval("item_name") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: red"&gt;Font-Bold&lt;/span&gt;&lt;span style="color: blue"&gt;="True"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Label2"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Eval("item_description") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: red"&gt;ForeColor&lt;/span&gt;&lt;span style="color: blue"&gt;="#999999"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DragHandleTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;="dragHandle"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DragHandleTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;span style="color: red"&gt;padding-left&lt;/span&gt;: &lt;span style="color: blue"&gt;25px&lt;/span&gt;; &lt;span style="color: red"&gt;border-bottom&lt;/span&gt;: &lt;span style="color: blue"&gt;thin&lt;/span&gt; &lt;span style="color: blue"&gt;solid&lt;/span&gt; &lt;span style="color: blue"&gt;transparent&lt;/span&gt;;&lt;span style="color: blue"&gt;"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Panel&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="panel1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;DefaultButton&lt;/span&gt;&lt;span style="color: blue"&gt;="Button1"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;hr&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;style&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;span style="color: red"&gt;font-family&lt;/span&gt;: &lt;span style="color: blue"&gt;Verdana&lt;/span&gt;; &lt;span style="color: red"&gt;color&lt;/span&gt;: &lt;span style="color: blue"&gt;Black&lt;/span&gt;;&lt;span style="color: blue"&gt;"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                            &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;新增ToDo任务列表:&lt;span style="color: blue"&gt;&amp;lt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                            &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;任务名称&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;/span&gt;&lt;span style="font-size: 9pt"&gt;描述&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;th&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="TextBox1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Bind("item_name") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="TextBox2"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                            &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;='&lt;/span&gt;&lt;span style="background: yellow"&gt;&amp;lt;%&lt;/span&gt;# Bind("item_description") &lt;span style="background: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;'&lt;/span&gt; &lt;span style="color: red"&gt;Width&lt;/span&gt;&lt;span style="color: blue"&gt;="400px"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;td&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;tr&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;table&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                        &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Button&lt;/span&gt; &lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;="Button1"&lt;/span&gt; &lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;="server"&lt;/span&gt; &lt;span style="color: red"&gt;CommandName&lt;/span&gt;&lt;span style="color: blue"&gt;="Insert"&lt;/span&gt; &lt;span style="color: red"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;新 增"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Button&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Panel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;                &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;cc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ReorderList&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序采用了AJAX、MasterPage、SqlDataSource等等技术，ToDo范例数据库采用SQL Server 2008。范例程序提供源代码下载，欢迎交流、分享。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/130.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>WPF 范例程序之二 – 构建Hello Kitty 专卖店产品演示 – 附源代码下载</title><link>http://blog.entlib.com/EntLib/archive/2009/01/29/wpf-hello-kitty.aspx</link><pubDate>Wed, 28 Jan 2009 10:08:48 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/01/29/wpf-hello-kitty.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/128.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/128.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/01/29/wpf-hello-kitty.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/128.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">WPF 范例程序之二 – 构建Hello Kitty 专卖店产品演示 – 附源代码下载</source><description>&lt;div align="center"&gt;&lt;b&gt;WPF &lt;/b&gt;&lt;b&gt;范例程序之二 – &lt;/b&gt;&lt;b&gt;构建Hello Kitty &lt;/b&gt;&lt;b&gt;专卖店产品演示 – &lt;/b&gt;&lt;b&gt;附源代码下载&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文演示如何应用WPF 的数据绑定技术、WPF动画、ObservableCollection集合类，构建一个可爱的Hello Kitty 专卖店产品演示应用程序。在此，感谢&lt;a href="http://www.giftcenter.cn/"&gt;http://www.giftcenter.cn&lt;/a&gt; (礼品中心网) 提供的Hello Kitty 产品图片。&lt;br /&gt;
&lt;br /&gt;
WPF 系列学习笔记上一篇文章：&lt;br /&gt;
&lt;a id="AggRecentPosts1_RecentPosts_ctl00_Hyperlink2" href="http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx"&gt;&lt;font color="#41519a"&gt;WPF 范例程序之一 – 数据绑定(Data Binding) – 附源代码下载&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序演示界面如下：&lt;br /&gt;
 &lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="528" alt="" width="663" src="/userfiles/EntLib/image/WPF/WPF_2_1.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面对范例程序中使用的一些技术，进行逐一介绍。本文由&lt;a href="http://blog.entlib.com/"&gt;http://blog.entlib.com&lt;/a&gt; 开源博客平台小组提供，欢迎交流、分享.NET 开源技术。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. App.xaml &lt;/b&gt;&lt;b&gt;文件中Application.Resources &lt;/b&gt;&lt;b&gt;节设置应用程序范围资源，如样式、画笔、数据源等等。&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;范例程序中定义了ObjectDataProvider，将返回PhotoList 集合对象。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;    &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Application.Resources&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ObjectDataProvider&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; x&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt;Name&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="PhotosODP"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; x&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt;Key&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Photos"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; ObjectType&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="{&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;x&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Type&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; sbts&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt;PhotoList&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;}" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;    &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Application.Resources&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;同时，在App.xaml.cs 代码文件中，对上述集合对象进行了初始化操作。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Application_Startup(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;StartupEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Window1&lt;/span&gt; theWindow = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Window1&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            theWindow.Show();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ObjectDataProvider&lt;/span&gt; dataProvider = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Resources[&lt;span style="color: #a31515"&gt;"Photos"&lt;/span&gt;] &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ObjectDataProvider&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;PhotoList&lt;/span&gt; photoList = dataProvider.Data &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PhotoList&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            theWindow.Photos = photoList;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            theWindow.Photos.Path = &lt;span style="color: #a31515"&gt;@"..\..\HelloKitty"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;项目文件夹 HelloKitty 中存放着Hello Kitty 系列产品图片（来自&lt;a href="http://www.giftcenter.cn/"&gt;http://www.giftcenter.cn&lt;/a&gt; 礼品中心网）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;数据绑定&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;WPF支持任何类型的.NET对象作为数据源绑定到WPF对象。对于所有的ItemsControl对象都有一个ItemsSource依赖属性，这是专门为数据绑定而准备的。ItemsSource的类型是IEnumerable，所以对于我们几乎所有的集合类型我们都可以轻易的改变成ItemsSource的源对象。&lt;/div&gt;
&lt;div&gt;将上述定义的Application.Resources 应用到ListBox 上，实现Hello Kitty 产品图片的展示。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Style&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="{&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;DynamicResource&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; PhotoListStyle&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;}"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="color: blue"&gt;="1"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; Grid.ColumnSpan&lt;/span&gt;&lt;span style="color: blue"&gt;="3"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; Name&lt;/span&gt;&lt;span style="color: blue"&gt; ="PhotoListBox"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;="0,0,0,20"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; DataContext&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Source&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red"&gt; Photos&lt;/span&gt;&lt;span style="color: blue"&gt;}}"&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; SelectionChanged&lt;/span&gt;&lt;span style="color: blue"&gt; ="PhotoListSelection"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;b&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; ItemsSource&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: blue"&gt; }"&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; ItemContainerStyle&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;DynamicResource&lt;/span&gt;&lt;span style="color: red"&gt; PhotoListItem&lt;/span&gt;&lt;span style="color: blue"&gt;}"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;               &lt;span style="color: red"&gt; SelectedIndex&lt;/span&gt;&lt;span style="color: blue"&gt;="0" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;DataContext就是数据上下文对象，它是为了避免多个对象共享一个数据源时重复的对所有对象显式地用binding标记，而把同一个数据源在上下文对象的某个范围内共享，这样当一个绑定没有显式的源对象时，WPF会遍历找到一个非空的DataContext为止。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. ListBox&lt;/b&gt;&lt;b&gt;控件的SelectionChanged &lt;/b&gt;&lt;b&gt;事件。&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;PhotoListSelection 方法负责读取ListBox 控件当前选择的Item图片，并进一步根据选择的产品图片，创建BitmapFrame 对象，最后绑定到CurrentPhoto1（Image控件）上，显示并放大选择的产品图片。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; PhotoListSelection(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;SelectionChangedEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;String&lt;/span&gt; path = ((sender &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ListBox&lt;/span&gt;).SelectedItem.ToString());&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;BitmapSource&lt;/span&gt; img = &lt;span style="color: #2b91af"&gt;BitmapFrame&lt;/span&gt;.Create(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(path));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            CurrentPhoto1.Source = img;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;4. ObservableCollection(T) &lt;/b&gt;&lt;b&gt;类&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;WPF提供了一个ObservableCollection类，它实现了一个暴露了INotifyPropertyChanged的数据集合。也就是说我们不需要自己对每个单独的数据实现INotifyPropertyChanged结构。Observablecollection表示一个动态数据集合，在添加项、移除项或刷新整个列表时，此集合将提供通知。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在本范例程序中，PhotoList 集合类继承ObservableCollection&amp;lt;ImageFile&amp;gt;，代码如下：&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PhotoList &lt;font color="#000000"&gt;: &lt;/font&gt;&lt;span style="color: #2b91af"&gt;ObservableCollection&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: #2b91af"&gt;ImageFile&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div&gt;在绑定PhotoList类到ListBox之后，只要PhotoList 对象发生了变化，Listbox 的数据也会有相应的变化，也就是是PhotoList集合中的插入或移除操作可以自动更新 UI。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;如果你有兴趣，你可以将上述代码调整为List 集合，如下所示：&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 9pt"&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PhotoList&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ImageFile&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;再次运行应用程序，你会发现ListBox 无法正确显示Hello Kitty 产品图片列表了。但是如果你进一步修改Application_Startup方法的代码，如下所示：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Application_Startup(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;StartupEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Window1&lt;/span&gt; theWindow = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Window1&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ObjectDataProvider&lt;/span&gt; dataProvider = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Resources[&lt;span style="color: #a31515"&gt;"Photos"&lt;/span&gt;] &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ObjectDataProvider&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;PhotoList&lt;/span&gt; photoList = dataProvider.Data &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PhotoList&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            theWindow.Photos = photoList;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            theWindow.Photos.Path = &lt;span style="color: #a31515"&gt;@"..\..\HelloKitty"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            theWindow.Show();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;将theWindow.Show() 方法移到后面，再次运行代码，你会发现Hello Kitty 产品图片列表又可以正常显示了，但还是建议采用ObservableCollection&amp;lt;T&amp;gt;集合类的。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序运行环境：Visual Studio 2008 SP1。如果你对XAML不熟悉，建议你参考如下XAML学习笔记系列：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Resources&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之八&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; –&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;动画：缓慢旋转的按钮&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之九&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Hello Kitty &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/128.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>WPF 范例程序之一 – 数据绑定(Data Binding) – 附源代码下载</title><link>http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx</link><pubDate>Mon, 26 Jan 2009 09:28:42 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/127.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/127.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/01/27/wpf-data-binding.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/127.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">WPF 范例程序之一 – 数据绑定(Data Binding) – 附源代码下载</source><description>&lt;div align="center"&gt;&lt;b&gt;WPF &lt;/b&gt;&lt;b&gt;范例程序之一 – &lt;/b&gt;&lt;b&gt;数据绑定(Data Binding) – &lt;/b&gt;&lt;b&gt;附源代码下载&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文演示如何采用常用的技术创建WPF 数据绑定应用程序，如ListBox显示产品列表，Image显示产品图片等等，并提供基于VS 2008 的范例程序下载。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;首先，看看范例程序的演示界面：&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="492" alt="" width="657" src="/userfiles/EntLib/image/WPF/WPF_HelloKitty_ShoppingCart.gif" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;下面介绍范例程序的一些基本要点：&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;数据源Data Source&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;基于演示的需要，本范例程序的数据源定义在XAML文件的Resources元素内，实际应用程序则多数从数据库中读取。&lt;/div&gt;
&lt;div style="text-indent: 21pt" align="left"&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Window.Resources&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;local&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ShoppingCart&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; x&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt;Key&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Cart"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;local&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ShoppingCartItem&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; SKU&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="460"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Item&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;多媒体键盘"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="65.00"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ShortDescription&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;全新正品 Hello Kitty 迷你多媒体键盘/USB键盘/超薄键盘"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ProductImage&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/04/103/04-103-005.jpg"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;local&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ShoppingCartItem&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; SKU&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="461"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Item&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;不倒翁牙签筒"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="8.00"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ShortDescription&lt;/span&gt;&lt;span style="color: blue"&gt;="Hello Kitty &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;奇趣蛋型不倒翁牙签筒/牙签罐/牙签盒"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ProductImage&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/303/02-303-028.jpg"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;local&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ShoppingCartItem&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; SKU&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="388"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Item&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;保健磁化水杯"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="29.00"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ShortDescription&lt;/span&gt;&lt;span style="color: blue"&gt;="Hello Kitty &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;新款保温保健磁化水杯（陶瓷内胆)"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ProductImage&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/310/02-310-020.jpg"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;local&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ShoppingCartItem&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; SKU&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="242"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Item&lt;/span&gt;&lt;span style="color: blue"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;眼镜盒"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; Value&lt;/span&gt;&lt;span style="color: blue"&gt;="15.00"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ShortDescription&lt;/span&gt;&lt;span style="color: blue"&gt;="Hello Kitty &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;白色皮质眼镜盒(3) 情侣小礼品"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;           &lt;span style="color: red"&gt; ProductImage&lt;/span&gt;&lt;span style="color: blue"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/204/02-204-005.jpg"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;local&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;:&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ShoppingCart&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;    &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Window.Resources&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;数据绑定ListBox&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;在本范例程序中，我们绑定ListBox到动态的数据集合中List&amp;lt;ShoppingCartItem&amp;gt;。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Grid.Row&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="1"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Grid.ColumnSpan&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="4"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; ItemsSource&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="{&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;}"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Grid.RowSpan&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="1"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; SelectionChanged&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="ListBox_SelectionChanged"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                    &lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;&amp;lt;!-- the outer StackPanel (one per row) --&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                    &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Orientation&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Horizontal"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Width&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="520"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;&amp;lt;!-- the inner stack panels &lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt;–&lt;/span&gt;&lt;span style="font-size: 9pt; color: green"&gt; one per column --&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Orientation&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Vertical"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Width&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="40"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Text&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="{&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Path&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;=SKU}" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Orientation&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Vertical"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Width&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="100"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Text&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="{&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Path&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;=Item}" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Orientation&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Vertical"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Width&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="330"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Text&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="{&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Path&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;=ShortDescription}" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Orientation&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="Vertical"&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Width&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="60"&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;TextBlock&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Text&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;="{&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="font-size: 9pt; color: red"&gt; Path&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;=Value}" /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                    &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;StackPanel&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;                &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;DataTemplate&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;            &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;        &lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 9pt; color: #a31515"&gt;ListBox&lt;/span&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;3. ListBox&lt;/b&gt;&lt;b&gt;的SelectionChanged&lt;/b&gt;&lt;b&gt;事件&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;通过选择ListBox中显示的产品列表，触发ListBox的SelectionChanged事件，在对应的方法中，切换产品图片的显示。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ListBox_SelectionChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;SelectionChangedEventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ListBox&lt;/span&gt; lb = sender &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ListBox&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;ShoppingCartItem&lt;/span&gt; scItem = lb.SelectedItem &lt;span style="color: blue"&gt;as&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ShoppingCartItem&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: green"&gt;// Create Image Element&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;Image&lt;/span&gt; myImage = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Image&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            myImage.Width = 500;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: green"&gt;// Create source&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt; myBitmapImage = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BitmapImage&lt;/span&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            &lt;span style="color: green"&gt;// BitmapImage.UriSource must be in a BeginInit/EndInit block&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            myBitmapImage.BeginInit();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            myBitmapImage.UriSource = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(scItem.ProductImage);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            myBitmapImage.DecodePixelWidth = 500;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            myBitmapImage.EndInit();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 9pt"&gt;            ProductImage.Source = myBitmapImage;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序运行环境：Visual Studio 2008 SP1。如果你对XAML不熟悉，建议你参考如下XAML学习笔记系列：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Resources&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之八&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; –&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;动画：缓慢旋转的按钮&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之九&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Hello Kitty &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;专卖店产品演示&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/127.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>XAML 实例演示之九 – Hello Kitty 专卖店产品演示</title><link>http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx</link><pubDate>Sun, 25 Jan 2009 12:37:21 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/126.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/126.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-hello-kitty.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/126.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">XAML 实例演示之九 – Hello Kitty 专卖店产品演示</source><description>&lt;div align="center"&gt;&lt;b&gt;XAML &lt;/b&gt;&lt;b&gt;实例演示之九 – Hello Kitty &lt;/b&gt;&lt;b&gt;专卖店产品演示&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文演示如何结合XAML 实例演示系列文章（1-8）中学习的技术，制作一个Hello Kitty 专卖店产品演示窗口。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;范例程序演示效果如下：&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div style="text-align: center;"&gt;&lt;img width="700" height="396" src="/userfiles/EntLib/image/WPF/XAML_HelloKitty_1.gif" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img width="700" height="396" src="/userfiles/EntLib/image/WPF/XAML_HelloKitty_2.gif" alt="" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img width="700" height="348" src="/userfiles/EntLib/image/WPF/XAML_HelloKitty_3.gif" alt="" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;范例程序完整代码下载：&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/userfiles/EntLib/file/GiftCenter_HelloKitty.zip"&gt;&lt;font color="#0000ff"&gt;http://blog.entlib.com/userfiles/EntLib/file/GiftCenter_HelloKitty.zip&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;因为范例程序引用了&lt;a href="http://www.giftcenter.cn/"&gt;http://www.giftcenter.cn&lt;/a&gt; 礼品中心网-Hello Kitty 专卖店的一些产品图片，因此需要连接Internet 才能看到具体的演示效果。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文配合免费下载的Kaxaml 工具，演示XAML 的一些基本用法。关于Kaxaml 工具的介绍和下载，请参考文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/23/xaml-kaxaml.aspx"&gt;&lt;span&gt;&lt;span&gt;推荐一款免费下载&lt;/span&gt; XAML &lt;span&gt;编辑调试工具&lt;/span&gt;-Kaxaml&lt;/span&gt;。&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;XAML 系列文章为学习笔记，这是我今年春节期间安排的学习任务。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;前面系列文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt; – Grid &lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt; – Canvas&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;ViewBox&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt; – &lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt; – Resources&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;和&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx"&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;XAML &lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;实例演示之八&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt; –&lt;/span&gt;&lt;span style="color: rgb(65, 81, 154); text-decoration: none;"&gt;动画：缓慢旋转的按钮&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面逐个介绍本范例使用的一些技术。&lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. LinearGrdientBrush &lt;/b&gt;&lt;b&gt;和 GradientStop &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;LinearGradientBrush 使用线性渐变绘制区域。线形渐变横跨一条直线（渐变轴）将两种或更多种色彩进行混合。可以使用 GradientStop 对象指定渐变的颜色及其位置。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;lt;LinearGradientBrush &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;x:Key&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="ListBoxGradient" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;StartPoint&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0,0" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;EndPoint&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0,1"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;GradientStop &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Color&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="#90000000" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Offset&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;GradientStop &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Color&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="#40000000" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Offset&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0.005" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;GradientStop &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Color&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="#10000000" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Offset&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0.04" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;GradientStop &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Color&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="#20000000" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Offset&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0.945" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;GradientStop &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Color&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="#60FFFFFF" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Offset&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="1" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt; &amp;lt;/LinearGradientBrush&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;上述LinearGridentBrush定义在Resources里面，应用在Border元素中。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 12pt;"&gt;       &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;lt;Border &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Red" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="5" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;CornerRadius&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="6" &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Background&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="{DynamicResource ListBoxGradient}"&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;ScrollViewer &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;VerticalScrollBarVisibility&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Disabled" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;HorizontalScrollBarVisibility&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Auto"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;          &amp;lt;StackPanel &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;IsItemsHost&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="True" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Orientation&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Horizontal" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Left" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;/ScrollViewer&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;/Border&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;b&gt;2. Style&lt;/b&gt;&lt;b&gt;对象&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;一个控件中Style属性包含着一个Style对象，当Style对象更改时就可更新控件的大小及颜色等属性。XAML对Style的支持很好，一般请况Style初始化在父控件的Resources标记里面做为一个资源等待调用。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;lt;Style &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;x:Key&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="SpecialListStyle" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;TargetType&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="{x:Type ListBox}"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt; &amp;lt;Setter &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Property&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Template"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;Setter.Value&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;ControlTemplate &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;TargetType&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="{x:Type ListBox}" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;Border &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;BorderBrush&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Red" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;BorderThickness&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="5" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;CornerRadius&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="6" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Background&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="{DynamicResource ListBoxGradient}" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;ScrollViewer &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;VerticalScrollBarVisibility&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Disabled" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;HorizontalScrollBarVisibility&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Auto"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;          &amp;lt;StackPanel &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;IsItemsHost&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="True" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Orientation&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Horizontal" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Left" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;/ScrollViewer&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;/Border&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;/ControlTemplate&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;/Setter.Value&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt; &amp;lt;/Setter&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;lt;/Style&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Style节在父控件Window的Resources属性中，表意Window下所有的子控件都可以获取Window.Resources中的对象。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Style.Triggers是一个Trigger（触发器）集合。使用了EventTrigger（事件触发器）实现产品图片大小和透明度的动画效果。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;lt;Style.Triggers&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;EventTrigger &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;RoutedEvent&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Mouse.MouseEnter"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;EventTrigger.Actions&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;BeginStoryboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;Storyboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;          &amp;lt;DoubleAnimation &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Duration&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0:0:0.2" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="MaxHeight" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;To&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="310" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;          &amp;lt;DoubleAnimation &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Duration&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0:0:0.2" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="Opacity" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;To&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="1.0" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;        &amp;lt;/Storyboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;/BeginStoryboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;/EventTrigger.Actions&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt; &amp;lt;/EventTrigger&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;3. ListBox和ItemsSource&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;ListBox 是一个 ItemsControl，使用 ItemsSource 属性设置其内容。本范例程序将Hello Kitty 专卖店的部分产品图片绑定到ListBox中。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 12pt;"&gt;   &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;lt;ListBox&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Style&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="{StaticResource SpecialListStyle}" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Grid.Row&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="1" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Grid.ColumnSpan&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="3" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Name &lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="PhotoListBox" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Margin&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0,0,0,20"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;    &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;ItemsSource&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="{Binding}" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;ItemContainerStyle&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="{StaticResource SpecialListItem}" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;SelectedIndex&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="0"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/04/102/04-102-013.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/01/204/01-204-007.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/307/02-307-001.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/314/02-314-004.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/301/02-301-004.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/310/02-310-015.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/310/02-310-020.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/303/02-303-028.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/204/02-204-005.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;      &amp;lt;Image &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;Source&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;="http://www.giftcenter.cn/giftcenterpictures/img640/02/312/02-312-003.jpg"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta;"&gt;    &amp;lt;/ListBox&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/126.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>XAML 实例演示之八 –动画：缓慢旋转的按钮</title><link>http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx</link><pubDate>Sun, 25 Jan 2009 08:42:18 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/125.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/125.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-yet-again.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/125.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">XAML 实例演示之八 –动画：缓慢旋转的按钮</source><description>&lt;div align="center"&gt;&lt;b&gt;XAML &lt;/b&gt;&lt;b&gt;实例演示之八 –&lt;/b&gt;&lt;b&gt;动画：缓慢旋转的按钮&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文配合免费下载的Kaxaml 工具，演示XAML 的一些基本用法。关于Kaxaml 工具的介绍和下载，请参考文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/23/xaml-kaxaml.aspx"&gt;&lt;span&gt;&lt;span&gt;推荐一款免费下载&lt;/span&gt; XAML &lt;span&gt;编辑调试工具&lt;/span&gt;-Kaxaml&lt;/span&gt;。&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;XAML 系列文章为学习笔记，这是我今年春节期间安排的学习任务。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;前面系列文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之七&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Resources&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Transformations&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文介绍了如何实现动画。范例程序简单实现了一个慢慢旋转的按钮。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在WPF中实现动画，对象必须满足三个条件：&lt;/div&gt;
&lt;div&gt;1. 必须有一个依赖属性（Dependency Property）。&lt;/div&gt;
&lt;div&gt;2. 必须继承DependencyObject对象，并实现了IAnimatable接口。常用的控件Button，Panel和Shape都继承DependencyObject，并实现了IAnimatable接口，因此这不是一个问题。&lt;/div&gt;
&lt;div&gt;3. 必须有一个兼容的动画类型变量。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;实现动画的第一步是选择一个属性来动画。在范例中，我们通过改变Button的角度来实现动画。Angel属性值是Double类型，因此我们使用DoubleAnimation创建从开始值到终点值的渐变。同时，还需要指定Duration属性值，也就是从开始到结束所持续的时间。Duration值越大，动画就会越慢。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;第二步是创建Storyboard，在Storyboard中放置DoubleAnimation元素。DoubleAnimation通过Storyboard.TargetName属性指定在哪里应用动画，也就是指定动画的对象。本范例指定Button按钮应用动画。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 12pt"&gt;       &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;BeginStoryboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;          &amp;lt;Storyboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;            &amp;lt;DoubleAnimation&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;            &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="AnimatedRotateTransform"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;            &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Angle"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;            &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;To&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="360" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Duration&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="0:0:5" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;FillBehavior&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Stop" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;          &amp;lt;/Storyboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;        &amp;lt;/BeginStoryboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;最后一步是关联Storyboard和Trigger，也就是指定启动动画的事件。&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;EventTrigger &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;RoutedEvent&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Button.Click"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;完整的范例代码如下：&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;Page &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;xmlns&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;xmlns:x&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;Title&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;=" Welcome to EntLib.com | Graphics: Animated Rotation"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: red"&gt;Background&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="White" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Margin&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="50"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt; &amp;lt;StackPanel&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;    &amp;lt;Button &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Content&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Slow Spinning Button" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Width&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="200" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;RenderTransformOrigin&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="0.5,0.5"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;      &amp;lt;Button.RenderTransform&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;        &amp;lt;RotateTransform &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;x:Name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="AnimatedRotateTransform" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Angle&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="0" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;      &amp;lt;/Button.RenderTransform&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;      &amp;lt;Button.Triggers&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;        &amp;lt;EventTrigger &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;RoutedEvent&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Button.Click"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;        &amp;lt;BeginStoryboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;          &amp;lt;Storyboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;            &amp;lt;DoubleAnimation&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;            &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Storyboard.TargetName&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="AnimatedRotateTransform"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;            &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Storyboard.TargetProperty&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Angle"&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: blue"&gt;            &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;To&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="360" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Duration&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="0:0:5" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;FillBehavior&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Stop" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;          &amp;lt;/Storyboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;        &amp;lt;/BeginStoryboard&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;        &amp;lt;/EventTrigger&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;      &amp;lt;/Button.Triggers&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;    &amp;lt;/Button&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt; &amp;lt;/StackPanel&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;/Page&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;演示效果如下：&lt;/div&gt;
&lt;div style="text-align: center"&gt;&lt;img height="255" alt="" width="446" src="/userfiles/EntLib/image/WPF/XAML_SlowSpinningButton.gif" /&gt;&lt;/div&gt;
&lt;div style="text-align: left"&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/125.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item><item><title>XAML 实例演示之七 – Resources和Transformations</title><link>http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx</link><pubDate>Sun, 25 Jan 2009 01:17:21 GMT</pubDate><guid isPermaLink="true">http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx</guid><wfw:comment>http://blog.entlib.com/EntLib/comments/124.aspx</wfw:comment><wfw:commentRss>http://blog.entlib.com/EntLib/comments/commentRss/124.aspx</wfw:commentRss><comments>http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-resourcestransformations.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://blog.entlib.com/EntLib/services/trackbacks/124.aspx</trackback:ping><source url="http://blog.entlib.com/EntLib/rss.aspx">XAML 实例演示之七 – Resources和Transformations</source><description>&lt;div align="center"&gt;&lt;b&gt;XAML &lt;/b&gt;&lt;b&gt;实例演示之七 – Resources&lt;/b&gt;&lt;b&gt;和Transformations&lt;/b&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img height="168" alt="" width="158" align="right" src="/userfiles/EntLib/image/WPF/wpf.jpg" /&gt;本文配合免费下载的Kaxaml 工具，演示XAML 的一些基本用法。关于Kaxaml 工具的介绍和下载，请参考文章：&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/23/xaml-kaxaml.aspx"&gt;&lt;span&gt;&lt;span&gt;推荐一款免费下载&lt;/span&gt; XAML &lt;span&gt;编辑调试工具&lt;/span&gt;-Kaxaml&lt;/span&gt;。&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;XAML 系列文章为学习笔记，这是我今年春节期间安排的学习任务。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;前面系列文章：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之一&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/24/xaml-again.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之二&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-grid.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之三&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Grid &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/25/xaml-stackpanelflowdocumentreader.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之四&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – StackPanel&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;FlowDocumentReader&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-canvasviewbox.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之五&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – Canvas&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;和&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;ViewBox&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件的使用&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/EntLib/archive/2009/01/26/xaml-nesting.aspx"&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;XAML &lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;实例演示之六&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt; – &lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;控件嵌套&lt;/span&gt;&lt;span style="color: #41519a; text-decoration: none; text-underline: none"&gt;Nesting&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;本文介绍了Resources 和 Transformations的使用。Resources提供了XAML定义和共享对象的方法。我们可以在Page/Window或者在整个应用程序级别上共享Resources。可以通过如下语句定义在单一窗口范围内使用的Resource。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;Window.Resources&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt; &amp;lt;SolidColorBrush &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;x:Key&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="GreenBrush" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Color&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Green" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt; &amp;lt;SolidColorBrush &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;x:Key&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="WhiteBrush" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Color&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="White" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;/Window.Resources&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;下面的语句将上面定义的Resource运用到Button按钮上。StaticResource关键字表示在编译期间设置Resource，这样不能在运行期间关联到不同的Resource。&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;Button &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Content&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Top Button" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Opacity&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="1" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Background&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="{StaticResource GreenBrush}" &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Foreground&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="{StaticResource WhiteBrush}" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;WPF使制作简单转换非常方便。本范例XAML创建了三个按钮，其中第三个按钮运用了RenderTransform，RenderTransform有一个子元素RotateTransform，其Angel 属性设置为45度角，顺时针方向。&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;Button &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Content&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="Rotated Button"&lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;Button.RenderTransform&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;RotateTransform &lt;/span&gt;&lt;span style="font-size: 10pt; color: red"&gt;Angle&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue"&gt;="45" &lt;/span&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left"&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;/Button.RenderTransform&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 10pt; color: darkmagenta"&gt;&amp;lt;/Button&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;完整的范例代码如下：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.entlib.com/userfiles/EntLib/file/Resources_Transformations.zip"&gt;&lt;font color="#0000ff"&gt;http://blog.entlib.com/userfiles/EntLib/file/Resources_Transformations.zip&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;在Kaxaml工具中演示效果如下：&lt;/div&gt;
&lt;div style="text-align: center"&gt; &lt;img height="309" alt="" width="542" src="/userfiles/EntLib/image/WPF/XAML_Resources_Transformations.gif" /&gt;&lt;/div&gt;
&lt;div style="text-align: left"&gt; &lt;/div&gt;&lt;img src="http://blog.entlib.com/EntLib/aggbug/124.aspx" width="1" height="1" /&gt;</description><dc:creator>EntLib.com</dc:creator></item></channel></rss>