<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_luluping</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/34197/rss</id><updated>2012-04-28T13:55:22Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/34197/rss"/><entry><id>http://www.cnblogs.com/luluping/archive/2012/04/28/2475747.html</id><title type="text">VS2010中的单元测试</title><summary type="text">在VS2010中，单元测试的功能很强大，使得建立单元测试和编写单元测试代码，以及管理和运行单元测试都变得简单起来，通过私有访问器可以对私有方法也能进行单元测试，并且支持数据驱动的单元测试。1、建立单元测试项目1.1、从被测试代码生成单元测试1）实例：创建VC#模式下的控制台应用程序，工程名为CUnitTest2）输入简单的加、减、乘、除函数代码，如下图所示3）可按如下步骤建立单元测试（1）在Add方法体内，单击鼠标右键，在菜单中选择"创建单元测试"，（2）在出现的"创建单元测试"界面中，Add方法被自动勾上，表示要为这个方法创建单元测试代码的基本框架，单</summary><published>2012-04-28T13:55:00Z</published><updated>2012-04-28T13:55:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2012/04/28/2475747.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2012/04/28/2475747.html"/><content type="html">&lt;p&gt;在VS2010中，单元测试的功能很强大，使得建立单元测试和编写单元测试代码，以及管理和运行单元测试都变得简单起来，通过私有访问器可以对私有方法也能进行单元测试，并且支持数据驱动的单元测试。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1、建立单元测试项目&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.1、从被测试代码生成单元测试&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1）实例：创建VC#模式下的控制台应用程序，工程名为CUnitTest&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20101.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;2）输入简单的加、减、乘、除函数代码，如下图所示&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20102.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;3）可按如下步骤建立单元测试&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;（1）在Add方法体内，单击鼠标右键，在菜单中选择"创建单元测试"，&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20103.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;（2）在出现的"创建单元测试"界面中，Add方法被自动勾上，表示要为这个方法创建单元测试代码的基本框架，单击确定按钮&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20104.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;（3）点击确定后，在新建测试项目中，输入需要创建的单元测试的新项目的名称，然后单击"创建"按钮，则自动创建一个新的单元测试代码项目。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20105.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;（4）在"解决档案资源管理器"中可以看到多了一个"AddTest"项目，可以看出"AddTest"项目引用了被测项目的程序集，和单元测试框架Microsoft.VisualStudio.QualityTools.UnitTestFrame，并且自动产生两个C#代码文件AssemblyInfo.cs和ProgramTest.cs&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20106.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;（5）ProgramTest.cs的代码如下图所示，从图中可以看到，自动产生了一个"ProgramTest"类，并使用[TestClass()]标识为一个单元测试类，以及一个"AddTest"测试方法，。并用[TestMethod()]标识。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20107.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;（6）ProgramTest.cs代码文件详讲&lt;/p&gt;&lt;p&gt;[TestMethod()]：说明了以下代码是一个测试用例&lt;/p&gt;&lt;p&gt;Int a = o; // TODO: 初始化为适当的值&lt;/p&gt;&lt;p&gt;int b = 0; // TODO: 初始化为适当的值&lt;/p&gt;&lt;p&gt;这两句是被测函数的输入参数，需要我们去修改它的值,也就是我们输入测试用例的地方。&lt;/p&gt;&lt;p&gt;double expected = 0; // TODO: 初始化为适当的值&lt;/p&gt;&lt;p&gt;double actual;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这两句话浅显易懂，前一句话是定义了期望值和对它进行初始化，后一句话是定义了实际值。默认&lt;/p&gt;&lt;p&gt;Assert.AreEqual(expected, actual);&lt;/p&gt;&lt;p&gt;Assert在这里可以理解成断言：在VSTS里做单元测试是基于断言的测试。&lt;/p&gt;&lt;p&gt;默认代码中Assert.Inconclusive 表明这是一个未经验证的单元测试。在实际的程序中可以注释掉。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1.2、添加单元测试项目&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;（1）另外一种单元测试方法是独立添加单元测试项目，在解决方案中添加一个新的项目，选择项目类型为"测试项目"，&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20108.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;（2）单击确定后，自动产生一个新的单元测试项目，在"解决方案资源管理器"中可看到新添加的测试项目"TestProject2"。对比"TestProject2"和"AddTest"可发现，"TestProject2"少了对被测试项目程序集的引用，仅仅引用了单元测试框架的DLL"Microsoft.VisualStudio.QualityTools.UnitTestFrame"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2、编写测试方法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;单元测试的基本方法是调用被测代码的函数，输入函数的参数值，获取返回结果，然后与预期测试结果进行比较，如果相等则认为测试通过，否则认为测试不通过。&lt;/p&gt;&lt;p&gt;1、Assert类的使用&lt;/p&gt;&lt;p&gt;Assert.Inconclusive()&amp;nbsp;&amp;nbsp;&amp;nbsp; 表示一个未验证的测试；&lt;/p&gt;&lt;p&gt;Assert.AreEqual()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;测试指定的值是否相等，如果相等，则测试通过；&lt;/p&gt;&lt;p&gt;AreSame()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用于验证指定的两个对象变量是指向相同的对象，否则认为是错误&lt;/p&gt;&lt;p&gt;AreNotSame()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用于验证指定的两个对象变量是指向不同的对象，否则认为是错误&lt;/p&gt;&lt;p&gt;Assert.IsTrue()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 测试指定的条件是否为True，如果为True，则测试通过；&lt;/p&gt;&lt;p&gt;Assert.IsFalse()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 测试指定的条件是否为False，如果为False，则测试通过；&lt;/p&gt;&lt;p&gt;Assert.IsNull()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 测试指定的对象是否为空引用，如果为空，则测试通过；&lt;/p&gt;&lt;p&gt;Assert.IsNotNull()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 测试指定的对象是否为非空，如果不为空，则测试通过；&lt;/p&gt;&lt;p&gt;2、CollectionAssert类的使用&lt;/p&gt;&lt;p&gt;用于验证对象集合是否满足条件&lt;/p&gt;&lt;p&gt;StringAssert类的使用&lt;/p&gt;&lt;p&gt;用于比较字符串。&lt;/p&gt;&lt;p&gt;StringAssert.Contains&lt;/p&gt;&lt;p&gt;StringAssert.Matches&lt;/p&gt;&lt;p&gt;StringAssert.tartWith&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3、数据驱动的单元测试&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;数据驱动的单元测试是指单元测试的输入数据遍历一个数据源的所有行。从数据源的没一行读入数据并传入给测试方法使用&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.1、ACCESS数据驱动单元测试&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1）打开测试视图窗口，选择测试视图&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS20109.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;2）在测试视图窗口中选择需要配置成数据驱动方式的单元测试方法，然后按F4，打开单元测试的属性窗口&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201010.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;3）编辑"数据连接字符串"属性，在"属性"窗口中单击该属性，然后单击省略号 (&amp;hellip;)。这将打开"选择数据源"对话框，其中列出了若干个可能的数据源，包括 ODBC、Microsoft SQL Server 和 Microsoft Access。选择一个数据源后将打开一个特定于该数据源类型的对话框；可以使用此对话框配置该数据源的连接属性。配置完数据连接后，连接字符串会作为"数据连接字符串"的值出现。此字符串还会作为单元测试方法的一个属性存储起来&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201011.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;4）在这个界面中，选择一个Acess表data.mdb,单击"确定"按钮完成设置，回到"单元测试属性"窗口。可以看到数据源的已经设置好。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201012.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;5）在建立与数据源的连接之后，可以选择一个数据表。当您单击"属性"窗口的值列中的下拉列表时，将会列出所连接的数据库中的表。从此列表中选择的表就是在运行单元测试时将检索其中的行的表。与"数据连接字符串"等其他属性一样，"数据表名称"也会作为单元测试方法的一个属性存储起来。&lt;/p&gt;&lt;p&gt;6）在"数据访问方法"，请选择"顺序"或"随机"；默认值为"顺序"。此设置表示从数据源的表中检索记录的顺序。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;可以看到，在测试方法前面已经添加了一行：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201013.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;7）数据源的使用&lt;/p&gt;&lt;p&gt;通过 TestContext 类的 DataRow 和 DataConnection 属性将数据提供给正在运行的单元测试。下面为使用TestContext 类的 DataRow属性来读入数据行&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201014.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;8）Acess数据源中的表为&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201015.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.2、读取Excel的方法：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1）在桌面新建一个txt文件，更改文件名为data.dsn&lt;/p&gt;&lt;p&gt;2）选中"数据库连接字符串"，单击右边列的按钮，更改数据源为Microsoft ODBC数据源，点击"确定"按钮&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201016.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;3）选择使用连接字符串，点击生成&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201017.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;4）选择Excel数据源的驱动程序，点击"下一步"&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201018.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;5）选择data.dsn为数据源保存文件，一直选择"下一步"。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201019.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;6）在弹出的选择工作簿中，选择用例的输入文件data.txt,点击"确定"&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201020.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;7）选择用例所在的Sheet页，选择"完成"&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201021.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;8）数据源的使用代码&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201022.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4、单元测试的运行&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;单元测试的运行有两种方式：调试和运行。可以像调试普通代码一样对单元测试代码进行调试，当然也可以直接运行，单元测试的结果将在"测试结果"界面中展示，双击测试结果，可以得到测试结果的详细信息。单元测试的代码覆盖率可以在"代码覆盖率结果"界面中展示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201023.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201024.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5、附加测试属性&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;"附加测试属性"。默认都是被注释掉的，只要我们取消注释就可以使用了。这个功能的加入，很大程度上是为了增加测试的灵活性。具体的属性有：&lt;/p&gt;&lt;p&gt;[ClassInitialize()]在运行类的第一个测试前先运行代码&lt;/p&gt;&lt;p&gt;[ClassCleanup()]在运行完类中的所有测试后再运行代码&lt;/p&gt;&lt;p&gt;[TestInitialize()]在运行每个测试前先运行代码&lt;/p&gt;&lt;p&gt;[TestCleanup()]在运行完每个测试后运行代码&lt;/p&gt;&lt;p&gt;如在执行测试时，将测试执行时间输入到日志中，代码如下&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/annpaul/120110_0604_VS201025.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2475747.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2012/04/28/2475747.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2012/03/24/2415396.html</id><title type="text">触发器点滴</title><summary type="text">触发器点滴判断操作类型if exists (select 1 from inserted) and exists (select 1 from deleted)begin -- updateendif exists (select 1 from inserted) and not exists (select 1 from deleted)begin --insertend</summary><published>2012-03-24T04:27:00Z</published><updated>2012-03-24T04:27:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415396.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415396.html"/><content type="html">&lt;h1 class="postTitle"&gt;&lt;a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/yanghaibo/archive/2011/04/19/2020729.html"&gt;触发器点滴&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑;"&gt;判断操作类型&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: blue;"&gt;if &lt;/span&gt;&lt;span style="color: gray;"&gt;exists (&lt;/span&gt;&lt;span style="color: blue;"&gt;select &lt;/span&gt;1 &lt;span style="color: blue;"&gt;from &lt;/span&gt;inserted&lt;span style="color: gray;"&gt;) and exists (&lt;/span&gt;&lt;span style="color: blue;"&gt;select &lt;/span&gt;1 &lt;span style="color: blue;"&gt;from &lt;/span&gt;deleted&lt;span style="color: gray;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;-- update&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;end&lt;br /&gt;&lt;br /&gt;if &lt;/span&gt;&lt;span style="color: gray;"&gt;exists (&lt;/span&gt;&lt;span style="color: blue;"&gt;select &lt;/span&gt;1 &lt;span style="color: blue;"&gt;from &lt;/span&gt;inserted&lt;span style="color: gray;"&gt;) and not exists (&lt;/span&gt;&lt;span style="color: blue;"&gt;select &lt;/span&gt;1 &lt;span style="color: blue;"&gt;from &lt;/span&gt;deleted&lt;span style="color: gray;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;--insert&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2415396.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415396.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2012/03/24/2415394.html</id><title type="text">查询数据库中所有包含某文本的存储过程、视图和函数的SQL</title><summary type="text">方法一：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--&gt;1 select* 2 from sysobjects o, syscomments s 3 where o.id = s.id 4 andtextlike'%yyao%' 5 and o.xtype ='P'复制代码将yyao替换成自己要查找的文本方法二：Code highlighting produced by Actipro CodeHighligh</summary><published>2012-03-24T04:26:00Z</published><updated>2012-03-24T04:26:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415394.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415394.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;&lt;span style="font-family: 宋体;"&gt;方法一：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt; &lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt; sysobjects o, syscomments s &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt; &lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt; o.id &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; s.id &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt; &lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;text&lt;/span&gt;&lt;span style="color: #808080;"&gt;like&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%yyao%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;5&lt;/span&gt; &lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt; o.xtype &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;P&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;将yyao替换成自己要查找的文本&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;方法二：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;span style="color: #000000;"&gt; routine_name,routine_definition,routine_type&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt; information_schema.routines&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt; routine_definition &lt;/span&gt;&lt;span style="color: #808080;"&gt;like&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;%Parent%&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;order&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;by&lt;/span&gt;&lt;span style="color: #000000;"&gt; routine_type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;将Parent替换成自己要查找的文本&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;方法三：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008080;"&gt;1&lt;/span&gt; &lt;span style="color: #000000;"&gt;sp_depends customer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;此方法只能查找数据库对象，如表、视图、存储过程、函数&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2415394.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415394.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2012/03/24/2415381.html</id><title type="text">SQL Server FOR XML PATH 语句的应用</title><summary type="text">SQL Server FOR XML PATH 语句的应用在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据，下面是它的一些应用示例。?12345DECLARE @TempTable table(UserID int , UserName nvarchar(50)); insert into @TempTable (UserID,UserName) values (1,'a') insert into @TempTable (UserID,UserName) values (2,'b') select UserID,Use</summary><published>2012-03-24T04:15:00Z</published><updated>2012-03-24T04:15:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415381.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415381.html"/><content type="html">&lt;h1 class="postTitle"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;SQL Server FOR XML PATH 语句的应用&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据，下面是它的一些应用示例。&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div id="highlighter_891293" class="syntaxhighlighter  sql ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;DECLARE&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable &lt;/code&gt;&lt;code class="sql keyword"&gt;table&lt;/code&gt;&lt;code class="sql plain"&gt;(UserID &lt;/code&gt;&lt;code class="sql keyword"&gt;int&lt;/code&gt; &lt;code class="sql plain"&gt;, UserName nvarchar(50)); &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;insert&lt;/code&gt; &lt;code class="sql keyword"&gt;into&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable (UserID,UserName) &lt;/code&gt;&lt;code class="sql keyword"&gt;values&lt;/code&gt; &lt;code class="sql plain"&gt;(1,&lt;/code&gt;&lt;code class="sql string"&gt;'a'&lt;/code&gt;&lt;code class="sql plain"&gt;) &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;insert&lt;/code&gt; &lt;code class="sql keyword"&gt;into&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable (UserID,UserName) &lt;/code&gt;&lt;code class="sql keyword"&gt;values&lt;/code&gt; &lt;code class="sql plain"&gt;(2,&lt;/code&gt;&lt;code class="sql string"&gt;'b'&lt;/code&gt;&lt;code class="sql plain"&gt;) &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;select&lt;/code&gt; &lt;code class="sql plain"&gt;UserID,UserName &lt;/code&gt;&lt;code class="sql keyword"&gt;from&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable &lt;/code&gt;&lt;code class="sql keyword"&gt;FOR&lt;/code&gt; &lt;code class="sql plain"&gt;XML PATH&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-size: 12px;"&gt;运行这段脚本，将生成如下结果：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div id="highlighter_483445" class="syntaxhighlighter  xml ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;span style="font-size: 12px;"&gt;6&lt;/span&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;span style="font-size: 12px;"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;span style="font-size: 12px;"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;row&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;1&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;a&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;row&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;row&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;2&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;b&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;row&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div id="highlighter_506164" class="syntaxhighlighter  xml ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;大家可以看到两行数据生成了两个节点，修改一下PATH的参数：&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div id="highlighter_245662" class="syntaxhighlighter  sql ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;select&lt;/code&gt; &lt;code class="sql plain"&gt;UserID,UserName &lt;/code&gt;&lt;code class="sql keyword"&gt;from&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable &lt;/code&gt;&lt;code class="sql keyword"&gt;FOR&lt;/code&gt; &lt;code class="sql plain"&gt;XML PATH(&lt;/code&gt;&lt;code class="sql string"&gt;'lzy'&lt;/code&gt;&lt;code class="sql plain"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;再次运行上述脚本，将生成如下的结果：&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_29140" class="syntaxhighlighter  xml ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;span style="font-size: 12px;"&gt;6&lt;/span&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;span style="font-size: 12px;"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;span style="font-size: 12px;"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;lzy&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;1&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;a&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;lzy&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;lzy&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;2&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;b&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;lzy&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div id="highlighter_535760" class="syntaxhighlighter  xml ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;可以看到节点变成，其实PATH() 括号内的参数是控制节点名称的，这样的话大家可以看一下如果是空字符串（不是没有参数）会是什么结果?&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div id="highlighter_793147" class="syntaxhighlighter  sql ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;select&lt;/code&gt; &lt;code class="sql plain"&gt;UserID,UserName &lt;/code&gt;&lt;code class="sql keyword"&gt;from&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable &lt;/code&gt;&lt;code class="sql keyword"&gt;FOR&lt;/code&gt; &lt;code class="sql plain"&gt;XML PATH(&lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt;&lt;code class="sql plain"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;执行上面这段脚本将生成结果：&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_386825" class="syntaxhighlighter  xml ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;1&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;a&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;2&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserID&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;b&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;UserName&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;这样就不显示上级节点了，大家知道在 PATH 模式中，列名或列别名被作为 XPath 表达式来处理，也就是说，是列的名字，这样大胆试验一下不给指定列名和别名会是怎么样？&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_771684" class="syntaxhighlighter  sql ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;select&lt;/code&gt; &lt;code class="sql color2"&gt;CAST&lt;/code&gt;&lt;code class="sql plain"&gt;(UserID &lt;/code&gt;&lt;code class="sql keyword"&gt;AS&lt;/code&gt; &lt;code class="sql keyword"&gt;varchar&lt;/code&gt;&lt;code class="sql plain"&gt;) + &lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt;&lt;code class="sql plain"&gt;,UserName + &lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt; &lt;code class="sql keyword"&gt;from&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable &lt;/code&gt;&lt;code class="sql keyword"&gt;FOR&lt;/code&gt; &lt;code class="sql plain"&gt;XML PATH(&lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt;&lt;code class="sql plain"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;运行上面这句将生成结果&lt;/span&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;1a2b&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;所有数据都生成一行，而且还没有连接字符，这样的数据可能对大家没有用处，还可以再变化一下：&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_479920" class="syntaxhighlighter  sql ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;select&lt;/code&gt; &lt;code class="sql color2"&gt;CAST&lt;/code&gt;&lt;code class="sql plain"&gt;(UserID &lt;/code&gt;&lt;code class="sql keyword"&gt;AS&lt;/code&gt; &lt;code class="sql keyword"&gt;varchar&lt;/code&gt;&lt;code class="sql plain"&gt;) + &lt;/code&gt;&lt;code class="sql string"&gt;','&lt;/code&gt;&lt;code class="sql plain"&gt;,UserName + &lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;';'&lt;/code&gt; &lt;code class="sql keyword"&gt;from&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable &lt;/code&gt;&lt;code class="sql keyword"&gt;FOR&lt;/code&gt; &lt;code class="sql plain"&gt;XML PATH(&lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt;&lt;code class="sql plain"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;生成结果&lt;/span&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;1,a;2,b;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;大家现在明白了吧，可以通过控制参数来生成自己想要的结果，例如：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_420557" class="syntaxhighlighter  sql ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;select&lt;/code&gt; &lt;code class="sql string"&gt;'{'&lt;/code&gt; &lt;code class="sql plain"&gt;+ &lt;/code&gt;&lt;code class="sql color2"&gt;CAST&lt;/code&gt;&lt;code class="sql plain"&gt;(UserID &lt;/code&gt;&lt;code class="sql keyword"&gt;AS&lt;/code&gt; &lt;code class="sql keyword"&gt;varchar&lt;/code&gt;&lt;code class="sql plain"&gt;) + &lt;/code&gt;&lt;code class="sql string"&gt;','&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;'"'&lt;/code&gt; &lt;code class="sql plain"&gt;+UserName + &lt;/code&gt;&lt;code class="sql string"&gt;'"'&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;'}'&lt;/code&gt; &lt;code class="sql keyword"&gt;from&lt;/code&gt; &lt;code class="sql plain"&gt;@TempTable &lt;/code&gt;&lt;code class="sql keyword"&gt;FOR&lt;/code&gt; &lt;code class="sql plain"&gt;XML PATH(&lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt;&lt;code class="sql plain"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;生成结果&lt;/span&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;{1,"a"}{2,"b"}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;还可以生成其他格式，大家可以根据自己需要的格式进行组合。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;下面是一个数据统计的应用，希望大家可以通过下面的实例想到更多的应用&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;div id="highlighter_772413" class="syntaxhighlighter  sql ie"&gt;&lt;div class="toolbar"&gt;&lt;span style="font-size: 12px;"&gt;&lt;a class="toolbar_item command_help help" href="http://www.cnblogs.com/yanghaibo/archive/2010/06/04/1751405.html"&gt;?&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;span style="font-size: 12px;"&gt;6&lt;/span&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;span style="font-size: 12px;"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;span style="font-size: 12px;"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;span style="font-size: 12px;"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;span style="font-size: 12px;"&gt;10&lt;/span&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;span style="font-size: 12px;"&gt;11&lt;/span&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;span style="font-size: 12px;"&gt;12&lt;/span&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;span style="font-size: 12px;"&gt;13&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;DECLARE&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 &lt;/code&gt;&lt;code class="sql keyword"&gt;table&lt;/code&gt;&lt;code class="sql plain"&gt;(UserID &lt;/code&gt;&lt;code class="sql keyword"&gt;int&lt;/code&gt; &lt;code class="sql plain"&gt;, UserName nvarchar(50),CityName nvarchar(50)); &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;insert&lt;/code&gt; &lt;code class="sql keyword"&gt;into&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 (UserID,UserName,CityName) &lt;/code&gt;&lt;code class="sql keyword"&gt;values&lt;/code&gt; &lt;code class="sql plain"&gt;(1,&lt;/code&gt;&lt;code class="sql string"&gt;'a'&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;'上海'&lt;/code&gt;&lt;code class="sql plain"&gt;) &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;insert&lt;/code&gt; &lt;code class="sql keyword"&gt;into&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 (UserID,UserName,CityName) &lt;/code&gt;&lt;code class="sql keyword"&gt;values&lt;/code&gt; &lt;code class="sql plain"&gt;(2,&lt;/code&gt;&lt;code class="sql string"&gt;'b'&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;'北京'&lt;/code&gt;&lt;code class="sql plain"&gt;) &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;insert&lt;/code&gt; &lt;code class="sql keyword"&gt;into&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 (UserID,UserName,CityName) &lt;/code&gt;&lt;code class="sql keyword"&gt;values&lt;/code&gt; &lt;code class="sql plain"&gt;(3,&lt;/code&gt;&lt;code class="sql string"&gt;'c'&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;'上海'&lt;/code&gt;&lt;code class="sql plain"&gt;) &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;insert&lt;/code&gt; &lt;code class="sql keyword"&gt;into&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 (UserID,UserName,CityName) &lt;/code&gt;&lt;code class="sql keyword"&gt;values&lt;/code&gt; &lt;code class="sql plain"&gt;(4,&lt;/code&gt;&lt;code class="sql string"&gt;'d'&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;'北京'&lt;/code&gt;&lt;code class="sql plain"&gt;) &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;insert&lt;/code&gt; &lt;code class="sql keyword"&gt;into&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 (UserID,UserName,CityName) &lt;/code&gt;&lt;code class="sql keyword"&gt;values&lt;/code&gt; &lt;code class="sql plain"&gt;(5,&lt;/code&gt;&lt;code class="sql string"&gt;'e'&lt;/code&gt;&lt;code class="sql plain"&gt;,&lt;/code&gt;&lt;code class="sql string"&gt;'上海'&lt;/code&gt;&lt;code class="sql plain"&gt;) &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;SELECT&lt;/code&gt; &lt;code class="sql plain"&gt;B.CityName,&lt;/code&gt;&lt;code class="sql color2"&gt;LEFT&lt;/code&gt;&lt;code class="sql plain"&gt;(UserList,LEN(UserList)-1) &lt;/code&gt;&lt;code class="sql keyword"&gt;FROM&lt;/code&gt; &lt;code class="sql plain"&gt;( &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;SELECT&lt;/code&gt; &lt;code class="sql plain"&gt;CityName, &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="sql plain"&gt;(&lt;/code&gt;&lt;code class="sql keyword"&gt;SELECT&lt;/code&gt; &lt;code class="sql plain"&gt;UserName+&lt;/code&gt;&lt;code class="sql string"&gt;','&lt;/code&gt; &lt;code class="sql keyword"&gt;FROM&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 &lt;/code&gt;&lt;code class="sql keyword"&gt;WHERE&lt;/code&gt; &lt;code class="sql plain"&gt;CityName=A.CityName&amp;nbsp; &lt;/code&gt;&lt;code class="sql keyword"&gt;FOR&lt;/code&gt; &lt;code class="sql plain"&gt;XML PATH(&lt;/code&gt;&lt;code class="sql string"&gt;''&lt;/code&gt;&lt;code class="sql plain"&gt;)) &lt;/code&gt;&lt;code class="sql keyword"&gt;AS&lt;/code&gt; &lt;code class="sql plain"&gt;UserList &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;FROM&lt;/code&gt; &lt;code class="sql plain"&gt;@T1 A&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql keyword"&gt;GROUP&lt;/code&gt; &lt;code class="sql keyword"&gt;BY&lt;/code&gt; &lt;code class="sql plain"&gt;CityName &lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;span style="font-size: 12px;"&gt;&lt;code class="sql plain"&gt;) B&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;生成结果（每个城市的用户名）&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2415381.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2012/03/24/2415381.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2012/03/21/2410540.html</id><title type="text">软件项目质量保证——编码规范(转)</title><summary type="text">目录一 编码规范的作用二 编码规范不是“物神”三 编写编码规范的一些建议四 编码规范参考 作为软件开发者，我们可以开发低等级的软件，但不能开发低质量的软件。所以，如何实施质量保证，是我们关注的主要问题之一，而编码规范则是实施质量保证的第一步。 编码规范已经成为一个老生常谈的问题，几乎每个项目，每家公司都会定义自己的编码规范。但在真正实施时，却在有意或无意地违背编码规范。程序员，不喜欢改变自己的编程习惯。加之，管理者对质量控制不足，导致编码规范往往形同虚设。有些人会认为：遵守编码规范不能给项目带来利益，也不能让客户看到我们为此付出的努力，其完全是团队自发的行为，没有必要做硬性的要求。还有些人..</summary><published>2012-03-21T13:14:00Z</published><updated>2012-03-21T13:14:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2012/03/21/2410540.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2012/03/21/2410540.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;目录&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;a href="http://www.cnblogs.com/MeteorSeed/archive/2012/03/21/2404656.html#zy"&gt;&lt;span style="line-height: 20px;"&gt;一 编码规范的作用&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;a href="http://www.cnblogs.com/MeteorSeed/archive/2012/03/21/2404656.html#ws"&gt;&lt;span style="line-height: 20px;"&gt;二 编码规范不是&amp;ldquo;物神&amp;rdquo;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;a href="http://www.cnblogs.com/MeteorSeed/archive/2012/03/21/2404656.html#jy"&gt;&lt;span style="line-height: 20px;"&gt;三 编写编码规范的一些建议&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;a href="http://www.cnblogs.com/MeteorSeed/archive/2012/03/21/2404656.html#ck"&gt;&lt;span style="line-height: 20px;"&gt;四 编码规范参考&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;作为软件开发者，我们可以开发低等级的软件，但不能开发低质量的软件。所以，如何实施质量保证，是我们关注的主要问题之一，而编码规范则是实施质量保证的第一步。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;编码规范已经成为一个老生常谈的问题，几乎每个项目，每家公司都会定义自己的编码规范。但在真正实施时，却在有意或无意地违背编码规范。程序员，不喜欢改变自己的编程习惯。加之，管理者对质量控制不足，导致编码规范往往形同虚设。有些人会认为：遵守编码规范不能给项目带来利益，也不能让客户看到我们为此付出的努力，其完全是团队自发的行为，没有必要做硬性的要求。还有些人有更好的理由：编码规范会破坏创造性和程序质量。我认为，编码规范，在软件构件以及项目管理中，甚至是个人成长方面，都发挥着重要的作用，好的编码规范是提高我们代码质量的最有效的工具之一。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;&lt;a name="zy"&gt;&lt;/a&gt;一&amp;nbsp;编码规范的作用&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;&lt;strong&gt;提高可读性&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&amp;ldquo;任何一个傻瓜都能写出计算机可以理解的代码，唯有写出人类容易理解的代码，才是优先的程序员。&amp;rdquo;编码规范，帮助我们写出人类容易理解的代码，它为我们提供了最基本的模板，良好的编码风格，使代码具有一定的描述性，可以通过名字来获取一些需要IDE才能得到的提示，如可访问性、继承基类等。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;统一全局，促进团队协作&amp;nbsp;&lt;/strong&gt;开发软件是一个团队活动，而不是个人的英雄主义。编码规范，要求团队成员遵守这一统一的全局决策，这样成员之间可以轻松地阅读对方的代码，所有成员正以一种清晰而一致的风格进行编码。而且，开发人员也可以集中精力关注他们真正应该关注的问题&amp;mdash;&amp;mdash;自身代码的业务逻辑，与需求的契合度等局部问题。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;有助于知识传递，加快工作交接&amp;nbsp;&lt;/strong&gt;风格的相似性，能让开发人员更迅速，更容易理解一些陌生的代码，更快速地理解别人的代码。因为，他和你的代码风格是一样的，你没有必要对他的一些个性化风格进行揣测。这样的好处是开发人员可以很快的接手项目组其他成员的工作，快速完成工作交接。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;减少名字增生，降低维护成本&amp;nbsp;&lt;/strong&gt;在没有规范的情况下，和容易为同一类型的实例起不同的名字。对于以后维护这些代码程序员来说会产生疑惑。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;强调变量之间的关系，降低缺陷引人的机会&amp;nbsp;&lt;/strong&gt;命名可以表示一定的逻辑关系，是开发人员在使用时保持警惕，从而一定程度上减少缺陷被引人的机会。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;提高程序员的个人能力&amp;nbsp;&lt;/strong&gt;不可否认，每个程序员都应该养成良好的编码习惯，而编码规范无疑是教材之一。从一个程序员的代码本身能看出很多东西。所以，即便是为了自身发展，作为程序员也没有理由抵制这种规则的存在。你可能没有认识到，我们正默默地得益于编码规范。&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;&lt;span style="line-height: 20px;"&gt;&lt;a name="ws"&gt;&lt;/a&gt;二 编码规范不是&amp;ldquo;物神&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;在高质量的软件中，你可以看到&amp;ldquo;架构的概念完整性&amp;rdquo;与&amp;ldquo;底层实现&amp;rdquo;之间的关系。&amp;ldquo;实现&amp;rdquo;与&amp;ldquo;架构&amp;rdquo;必须是清晰一致的，这种内在的、固有的一致性，需要编码规范来维系。如果没有这种统一的约定，那么我们做出的东西可能会充斥着各种不同的风格，显得混乱且难以理解。团队成员之间可能很不理解彼此之间的想法，甚至是相互抨击。各种编码风格上的差异会不断扩大，而代码质量则不断下降。而且，团队成员会花费时间在理解不同编程风格之间的差异，而没有专注于真正应该解决的问题。这样的时间消耗是难以接受的。所以，在每一个高质量代码的背后，一定存在着一份优秀的编码规范。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;然而，也必须认识到编码规范不是&amp;ldquo;物神&amp;rdquo;。编码规范仅仅是一个全局性质的规范，它只不过是一种编程约定，不能解决更深层次的问题。就像一篇格式漂亮但内容糟糕的论文不能被发表一样，你不能仅靠一个规范来摆脱软件作坊。而且，在编码规范中不宜包含那些冗长的开发技巧。我认为，对于代码是最佳实践应该是代码审查所要解决的，应该避免将编码规范写成一部关于重构的教科书。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;&lt;span&gt;&lt;span style="line-height: 20px;"&gt;&lt;a name="jy"&gt;&lt;/a&gt;&lt;span style="font-size: 16px;"&gt;三 编写编码规范的一些建议&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;以下是我对定义编码规范的一些建议：&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;求同存异&lt;/strong&gt; 不要妄图改变组织的编码习惯，除非有绝对合理的理由，否则还是以民主为主，毕竟你没有权利要求所有人都沿用你的编码习惯。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;strong&gt;定义编码规范越早越好&lt;/strong&gt; 也早使用编码规范，也早享受其带来的好处。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;&lt;strong&gt;将规范分为强制部分和推荐部分&lt;/strong&gt; 求同存异的具体实现。将最基本的规范列放在强制部分，所有成员必须遵守；将好的但不重要的习惯列在推荐部分，开发人员可以根据自己习惯选择是否使用。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;&lt;strong&gt;编码规范不要太长&lt;/strong&gt; 太长的文档没人看，所有人都一样，除了礼品单和工资单没人愿意看长的东西，所以编码规范必须精炼，最好是只有2~3页，让开发人员可以打印出来随时查看。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px; line-height: 20px;"&gt;&lt;strong&gt;必须是约定俗成的&lt;/strong&gt; 规范必须是行业中约定俗成的，不要有什么个性化发挥。&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;&lt;span style="line-height: 20px;"&gt;&lt;a name="ck"&gt;&lt;/a&gt;四 编码规范参考&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px; line-height: 20px;"&gt;我本人不太推荐制定过细的编码规范。制定编码规范是为了增强代码的可读性，毕竟代码的结构才是主要关注问题，所以我的编码规范还是比较简短的。里面只是对可能会破坏编码风格的行为进行约束，而没有细化到&amp;ldquo;空行&amp;rdquo;甚至&amp;ldquo;空格&amp;rdquo;的级别。　&lt;/span&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;编码规范&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;一 命名空间&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span&gt;&amp;lt;公司名称&amp;gt;.(&amp;lt;产品名称&amp;gt;|&amp;lt;相关技术&amp;gt;)[.&amp;lt;用途&amp;gt;]&amp;nbsp;[.&amp;lt;子命名空间&amp;gt;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;span style="line-height: 20px;"&gt;二 代码风格&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;花括号&amp;ldquo;{}&amp;rdquo;不允许省略，即使只有一段代码。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;不允许省略访问修饰符。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;类型默认是密封的。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;不允许公开字段。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;使用括号&amp;ldquo;()&amp;rdquo;来强调运算符优先级。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;span style="line-height: 20px;"&gt;三 命名规范&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;（一） 类、结构和接口的命名&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;使用名词或名词短语。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;使用Pascal方式。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;在接口名称前加上前缀&amp;ldquo;I&amp;rdquo;。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;考虑在派生类末尾使用基类的名字。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;如果该类仅仅为了实现某个接口，那么请保持其与接口命名的统一。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 12px;"&gt;如果从.NET 框架中存在的类型派生的类型，应该遵循以下规范：&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;基类&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;派生类&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;System.Attribute&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;要给自定义的特性添加&amp;ldquo;Attribute&amp;rdquo;后缀&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;System.Delegate&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;要给用于事件处理的委托添加&amp;ldquo;EventHandler&amp;rdquo;后缀&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;要给用于事件处理之外的那些委托添加&amp;ldquo;Callback&amp;rdquo;后缀&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;不要给委托添加&amp;ldquo;Delegate&amp;rdquo;后缀&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;System.EventArgs&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;要添加&amp;ldquo;EventArgs&amp;rdquo;后缀&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;System.Exception&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;要添加&amp;ldquo;Exception&amp;rdquo;后缀&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;IDictionary，IDictionary&amp;lt;T,V&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;要添加&amp;ldquo;Dictionary&amp;rdquo;后缀&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;IEnumerable，ICollection，IList，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;IEnumerable&amp;lt;T&amp;gt;，ICollection&amp;lt;T&amp;gt;，IList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;添加&amp;ldquo;Collection&amp;rdquo;后缀&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;System.IO.Stream&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;添加&amp;ldquo;Stream&amp;rdquo;后缀&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;CodeAccessPermission，IPermission&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;添加&amp;ldquo;Permission&amp;rdquo;后缀&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;（二） 成员的命名&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;成员&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;大小写&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;规范&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;方法&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;Pascal（公开）、Camel（私有）&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;用动词或动词短语命名&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;属性&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;Pascal&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;用名词、名词短语或形容词来命名&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;集合属性应该使用复数形式，而不是添加后缀&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;用&amp;ldquo;Is&amp;rdquo;、&amp;ldquo;Can&amp;rdquo;、&amp;ldquo;Has&amp;rdquo;等表示布尔属性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;可以用属性的类型名来命名属性&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;事件&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;Pascal&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;使用动词或动词短语来命名事件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;用现在时和过去时来区分前置和后置事件&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;字段&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;Camel（私有）&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;要用名词、名词短语或形容词来命名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&amp;nbsp;不要加任何前缀&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;（三） 参数的命名&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;Camel风格。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;要使用left和right来命名重载的二元操作符的参数&amp;mdash;&amp;mdash;如果参数没有具体的含义。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;要使用value来命名重载的一元操作符的参数&amp;mdash;&amp;mdash;如果参数没有具体的含义。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;不要在参数中使用数字编号。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;尽量使用描述性的名字命名泛型类型参数，并在前面使用&amp;ldquo;T&amp;rdquo;前缀。&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;（四） 常量、变量的命名&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;常量&amp;mdash;&amp;mdash;所有单词大写并用&amp;ldquo;_&amp;rdquo;分隔。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;局部变量&amp;mdash;&amp;mdash;&lt;/span&gt;&lt;span style="line-height: 20px;"&gt;Camel风格。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;（五） 枚举的命名&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;Pascal风格。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;使用名词的复数形式来命名标记枚举。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;不要添加&amp;ldquo;Enum&amp;rdquo;或&amp;ldquo;Flag&amp;rdquo;后缀。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;不要给枚举类型值的名字加前缀。&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;（六） 资源的命名&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;Pascal风格。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;仅使用字母、数字和下划线。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;在命名异常消息的资源时，资源标识符应该是异常类型名加上简短的异常标识符。&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;（七） 数据库命名&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;表&amp;mdash;&amp;mdash;&amp;ldquo;模块名_表名&amp;rdquo;。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;字段&amp;mdash;&amp;mdash;bool类型用&amp;ldquo;Is&amp;rdquo;、&amp;ldquo;Can&amp;rdquo;、&amp;ldquo;Has&amp;rdquo;等表示；日期类型命名必须包含&amp;ldquo;Date&amp;rdquo;；时间类型必须包含&amp;ldquo;Time&amp;rdquo;。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;存储过程&amp;mdash;&amp;mdash;使用&amp;ldquo;proc_&amp;rdquo;前缀。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;视图&amp;mdash;&amp;mdash;使用&amp;ldquo;view_&amp;rdquo;前缀。&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;触发器&amp;mdash;&amp;mdash;使用&amp;ldquo;trig_&amp;rdquo;前缀。&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;（八） XML命名&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;节点名称使用Pascal风格，属性名称使用Camel风格。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;span style="line-height: 20px;"&gt;四 注释&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;对接口和复杂代码块必须进行注释。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;修改代码时保持注释同步。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;未完成的功能使用TODO标记。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;修改他人代码时要先注释对方代码，并写明修改原因，不允许随便删除他人代码。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;&lt;span style="line-height: 20px;"&gt;发布前移除无用注释。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: 14px;"&gt;&lt;strong&gt;&lt;span style="line-height: 20px;"&gt;五 异常处理&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;原则上只允许显示抛出InvalidOperationException、ArgumentException、ArgumentNullException和ArgumentOutOfRangeException四种异常类型。&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 12px;"&gt;在自定义异常时，必须使用VS提供的代码模板来创建自定义异常。&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2410540.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2012/03/21/2410540.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2012/02/07/2342068.html</id><title type="text">IIS Server Application Unavailable 解决方法</title><summary type="text">新服务器发布网站时，遇到如下情况：只有HTML能正常访问，其他诸如WebService,WCF等都不能访问，显示：Server Application Unavailable 的错误。进入“事件查看器”，写明：没有权限访问System.Web。但是我已经将Windows的文件夹的权限的用户设为了与访问该网站的用户的权限一致。另外网上所传的新建应用程序池也不行。最后，我的解决办法是：应用程序池的属性-》标识-》预定义账户-》改为“本地系统”，遇到安全提示不用去理他。</summary><published>2012-02-07T15:17:00Z</published><updated>2012-02-07T15:17:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2012/02/07/2342068.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2012/02/07/2342068.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;新服务器发布网站时，遇到如下情况：&lt;/p&gt;&lt;p&gt;只有HTML能正常访问，其他诸如WebService,WCF等都不能访问，显示：Server Application Unavailable 的错误。&lt;/p&gt;&lt;p&gt;进入&amp;ldquo;事件查看器&amp;rdquo;，写明：没有权限访问System.Web。&lt;/p&gt;&lt;p&gt;但是我已经将Windows的文件夹的权限的用户设为了与访问该网站的用户的权限一致。&lt;/p&gt;&lt;p&gt;另外网上所传的新建应用程序池也不行。&lt;/p&gt;&lt;p&gt;最后，我的解决办法是：应用程序池的属性-》标识-》预定义账户-》改为&amp;ldquo;本地系统&amp;rdquo;，遇到安全提示不用去理他。&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2342068.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2012/02/07/2342068.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2012/02/01/2335127.html</id><title type="text">WPF实现MDI窗体的方法</title><summary type="text">第一:新建一个类（Class）Win32Native.cs代码如下:using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace WpfApplication1 { public class Win32Native { [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetParent")] public extern static In</summary><published>2012-02-01T13:43:00Z</published><updated>2012-02-01T13:43:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2012/02/01/2335127.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2012/02/01/2335127.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;第一:新建一个类（Class）&lt;/p&gt;&lt;p&gt;Win32Native.cs&lt;/p&gt;&lt;p&gt;代码如下:&lt;/p&gt;&lt;p&gt;using System;&amp;nbsp; &lt;br /&gt;using System.Collections.Generic;&amp;nbsp; &lt;br /&gt;using System.Linq;&amp;nbsp; &lt;br /&gt;using System.Text;&amp;nbsp;&lt;/p&gt;&lt;p&gt;namespace WpfApplication1&amp;nbsp; &lt;br /&gt;{&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Win32Native&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetParent")]&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public extern static IntPtr SetParent(IntPtr childPtr, IntPtr parentPtr);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;&lt;p&gt;第二:新建两个窗体:&lt;/p&gt;&lt;p&gt;Window1.xaml&lt;/p&gt;&lt;p&gt;Window2.xaml&lt;/p&gt;&lt;p&gt;第三:Window1.xaml.cs中添加引用&lt;/p&gt;&lt;p&gt;using System.Windows.Interop;&lt;/p&gt;&lt;p&gt;第四:在Window1窗体中放上一个Button1&lt;/p&gt;&lt;p&gt;其事件如下:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;private void button1_Click(object sender, RoutedEventArgs e)&amp;nbsp; &lt;br /&gt;{&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Window2 w2 = new Window2();&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w2.Show();&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WindowInteropHelper parentHelper = new WindowInteropHelper(this);&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WindowInteropHelper childHelper = new WindowInteropHelper(w2);&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Win32Native.SetParent(childHelper.Handle, parentHelper.Handle);&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; testMdiWindow.WindowState = WindowState.Maximized;//加上这句可实现窗口加载时最大化，注意语句位置&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&amp;nbsp;WinForms实现方法较简单一些，&lt;/p&gt;&lt;p&gt;private void button1_Click(object sender, RoutedEventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Window2 w2 = new Window2();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w2.MdiParent = this;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w2.Show();&lt;/p&gt;&lt;p&gt;&lt;br /&gt;本文来自CSDN博客，转载请标明出处：&lt;a href="http://blog.csdn.net/dotkit/archive/2009/11/11/4799055.aspx"&gt;http://blog.csdn.net/dotkit/archive/2009/11/11/4799055.aspx&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2335127.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2012/02/01/2335127.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2011/12/06/2277545.html</id><title type="text">如何用C#动态编译、执行代码</title><summary type="text">在开始之前，先熟悉几个类及部分属性、方法：CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。 一、CSharpCodeProvider 提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码，可以使用VBCodeProvider。 CreateCompiler()：获取编译器的实例。 二、ICodeCompiler 定义用于调用源代码编译的接口或使用指定编译器的CodeDOM树。每种编译方法都接受指示编译器的CompilerParameters对象，并返...</summary><published>2011-12-06T01:51:00Z</published><updated>2011-12-06T01:51:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2011/12/06/2277545.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2011/12/06/2277545.html"/><content type="html">&lt;p&gt;&amp;nbsp; 在开始之前，先熟悉几个类及部分属性、方法：&lt;a href="http://msdn2.microsoft.com/zh-cn/library/microsoft.csharp.csharpcodeprovider(VS.80).aspx"&gt;CSharpCodeProvider&lt;/a&gt;、&lt;a title="ICodeCompiler" href="http://msdn2.microsoft.com/zh-cn/library/system.codedom.compiler.icodecompiler(VS.80).aspx" target="_blank"&gt;ICodeCompiler&lt;/a&gt;、&lt;a href="http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/cpref/html/frlrfsystemcodedomcompilercompilerparametersclasstopic.asp" target="_blank"&gt;CompilerParameters&lt;/a&gt;、&lt;a href="http://www.msdn.net/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemcodedomcompilercompilerresultsmemberstopic.asp" target="_blank"&gt;CompilerResults&lt;/a&gt;、&lt;a href="http://msdn2.microsoft.com/zh-cn/library/system.reflection.assembly(VS.80).aspx" target="_blank"&gt;Assembly&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;一、CSharpCodeProvider&lt;/span&gt;&lt;br /&gt;提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码，可以使用&lt;a href="http://www.msdn.net/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfmicrosoftvisualbasicvbcodeproviderclasstopic.asp" target="_blank"&gt;VBCodeProvider&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;CreateCompiler()&lt;/span&gt;：获取编译器的实例。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;二、ICodeCompiler&lt;/span&gt;&lt;br /&gt;定义用于调用源代码编译的接口或使用指定编译器的&lt;a href="http://www.msdn.net/library/chs/default.asp?url=/library/CHS/cpgenref/html/cpconCodeDOMQuickReference.asp" target="_blank"&gt;CodeDOM&lt;/a&gt;树。每种编译方法都接受指示编译器的&lt;a href="http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/cpref/html/frlrfsystemcodedomcompilercompilerparametersclasstopic.asp" target="_blank"&gt;CompilerParameters&lt;/a&gt;对象，并返回指示编译结果的&lt;a href="http://www.msdn.net/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemcodedomcompilercompilerresultsmemberstopic.asp" target="_blank"&gt;CompilerResults&lt;/a&gt;对象。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;CompilerAssemblyFromSource(CompilerParameters option, string source)&lt;/span&gt;：使用指定的编译器，从包含源代码的字符串设置编译程序集。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;三、CompilerParameters&lt;br /&gt;&lt;/span&gt;表示用于调用编译器的参数。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ReferencedAssemblies&lt;/span&gt;：获取当前项目所引用的程序集。&lt;span style="font-style: italic;"&gt;Add&lt;/span&gt;方法为程序集添加引用。&lt;br /&gt;&lt;span style="font-style: italic;"&gt;GenerateExecutable&lt;/span&gt;：获取或设置一个值，该值指示是否生成可执行文件。若此属性为false，则生成DLL，默认是false。&lt;br /&gt;&lt;span style="font-style: italic;"&gt;GenerateInMemory&lt;/span&gt;：获取或设置一个值，该值指示是否在内存中生成输出。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;四、CompilerResults&lt;/span&gt;&lt;br /&gt;表示从编译器返回的编译结果。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;CompiledAssembly&lt;/span&gt;：获取或设置以编译的程序集，Assembly类型。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;五、Assembly&lt;/span&gt;&lt;br /&gt;就是程序集了（不知道如何描述了）。&lt;br /&gt;&lt;br /&gt;大致了解了以上知识之后，就可以使用C#动态的编译并执行代码了，一下是一段示例程序：&lt;/p&gt;&lt;div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; width: 98%; padding-top: 4px; background-color: #eeeeee; border: #cccccc 1px solid;"&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Reflection; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Globalization; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; Microsoft.CSharp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.CodeDom; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.CodeDom.Compiler;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Text; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000;"&gt; ConsoleApplication1 &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Main(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 1.CSharpCodePrivoder&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CSharpCodeProvider objCSharpCodePrivoder &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; CSharpCodeProvider();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 2.ICodeComplier&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ICodeCompiler objICodeCompiler &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; objCSharpCodePrivoder.CreateCompiler();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 3.CompilerParameters&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CompilerParameters objCompilerParameters &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; CompilerParameters();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCompilerParameters.ReferencedAssemblies.Add(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;System.dll&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCompilerParameters.GenerateExecutable &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCompilerParameters.GenerateInMemory &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 4.CompilerResults&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CompilerResults cr &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (cr.Errors.HasErrors)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;编译错误：&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000;"&gt; (CompilerError err &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; cr.Errors)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(err.ErrorText);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 通过反射，调用HelloWorld的实例&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assembly objAssembly &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; cr.CompiledAssembly;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; objHelloWorld &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; objAssembly.CreateInstance(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;DynamicCodeGenerate.HelloWorld&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MethodInfo objMI &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; objHelloWorld.GetType().GetMethod(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;OutPut&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(objMI.Invoke(objHelloWorld, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; GenerateCode()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder sb &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;using System;&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;namespace DynamicCodeGenerate&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class HelloWorld&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string OutPut()&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return \&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;Hello world&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;\&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(Environment.NewLine);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.Append(&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #000000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; code &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; sb.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(code);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; code;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2277545.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2011/12/06/2277545.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2011/11/24/2262246.html</id><title type="text">ExtJS 4应用架构设计</title><summary type="text">应用的可扩展性、可维护性和灵活性取决于应用架构的质量。不幸的是，这往往被视为马后炮。概念设计和原型变成了大规模的应用，许多应用的基础基本就是示例代码的复制与粘贴，这很诱人，因为这可以让你在项目在开始阶段有一个快速的进度。 然而，节省下来的时间相对于项目后期的维护、扩展甚至重构应用的时间来说，算不得什么。比较好的的方式是写一个可靠的架构，在实施前编写好遵循的约定和定义应用的视图、模型、存储和控制器等。在这篇文章，我们将会看到一个受欢迎的应用并讨论如何构建用户接口，从而创建可靠的架构。代码结构应用程序架构体系会为实际类和框架大妈提供结构和一致性。建立一个好的架构有以下主要好处：■ 每个应用的工作方</summary><published>2011-11-24T12:44:00Z</published><updated>2011-11-24T12:44:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2011/11/24/2262246.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2011/11/24/2262246.html"/><content type="html">&lt;p&gt;应用的可扩展性、可维护性和灵活性取决于应用架构的质量。不幸的是，这往往被视为马后炮。概念设计和原型变成了大规模的应用，许多应用的基础基本就是示例代码的复制与粘贴，这很诱人，因为这可以让你在项目在开始阶段有一个快速的进度。 然而，节省下来的时间相对于项目后期的维护、扩展甚至重构应用的时间来说，算不得什么。比较好的的方式是写一个可靠的架构，在实施前编写好遵循的约定和定义应用的视图、模型、存储和控制器等。在这篇文章，我们将会看到一个受欢迎的应用并讨论如何构建用户接口，从而创建可靠的架构。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;代码结构&lt;/span&gt;&lt;br /&gt;应用程序架构体系会为实际类和框架大妈提供结构和一致性。建立一个好的架构有以下主要好处：&lt;br /&gt;■ 每个应用的工作方式是相同的，因而你只需要学习一次。&lt;br /&gt;■ 在应用之间很容易分享代码，因为工作方式是相同的。&lt;br /&gt;■ 你可以使用ExtJS的生成工具为你的应用程序创建经过优化的发布版本。&lt;br /&gt;在ExtJS 4创建你的应用时，应该考虑一下我们定义的约定，尤其是统一的目录结构。这个结构要求所有类文件都放到app目录下，在该目录下，可根据命名空间划建立models、views、controllers和stores等4个子目录。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/folderStructure1.png" alt="" /&gt;&lt;br /&gt;虽然ExtJS 4提供了如何构建你的应用的最佳做法，但是你也可以根据自己需要修改我们建议的文件和类的命名约定，例如，你可以为你的控制器在&amp;ldquo;Controller&amp;rdquo;前加上前缀，如&amp;ldquo;Users&amp;rdquo;修改为&amp;ldquo;UsersController&amp;rdquo;。在这种情形下，记得给所有的控制器文件和类加前缀。最重要的一点是，要在开始编写应用程序前定义好这些约定并遵守它。这样，你就可以在任何需要的地方调用这些类。我们强烈建议要遵守控制器、模型、Store、视图这4个文件夹的命名约定，这可以确保你可以使用&lt;a class="bb-url" href="http://www.sencha.com/products/extjs/download/"&gt;SDK Tools beta&lt;/a&gt;对应用进行优化。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;寻找平衡点&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;视图&lt;/span&gt;&lt;br /&gt;将应用程序的UI分割成视图是好的开始。通常做法是，你提供线框，而设计师创建UI实体模型。尝试一下使用以下模型，让我们的设计师如何使用ExtJS重建（非常有吸引力）Pandora应用。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/base_layout.png" alt="" /&gt;&lt;br /&gt;我们需要在视图粒度与通用性之间寻求一个平衡。让我们看看当划分太多视图的时候会发生什么。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/too-granular.png" alt="" /&gt;&lt;br /&gt;将UI划分成太多小的视图将会让视图在控制器中变得难以管理、引用和控制。另外，由于每个视图都有其自己的文件，创建过多的视图会让定义UI块或视图逻辑时很难找到视图文件。&lt;br /&gt;另一方面，我们不希望视图变得太通用，因为这样在修改时会失去灵活性。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/too-general.png" alt="" /&gt;&lt;br /&gt;在这种情况下，每个视图已经过于简化。当视图的几个部件需要自定义视图逻辑的时候，视图类最终会有太多的负担，产生的视图类变得很难维护。另外，当设计师考虑改变UI时，我们不得不重构视图定义和视图逻辑，这是相当烦人的事。&lt;br /&gt;当我们可以轻松的在页面上重新排列视图，热切不需要每次都重构它们的时候，说明已经取得了平衡。例如，我们可以把广告作为独立视图，这样，我就可以很容器移动它，甚至删除它。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/balanced.png" alt="" /&gt;&lt;br /&gt;在这一版本，我们根据视图的任务来划分UI。一旦你对使用视图组合UI有整体思路，那么，你就可以在实现它们时对其粒度作出调整。有时候，你会觉得两个视图应该成为一个，或是视图太通用，需要将其划分成多个视图，这是一个良好的开端的基础。我相信我们已经做到了这一点。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;模型&lt;/span&gt;&lt;br /&gt;现在我们已经有了视图的基本结构，是时候考虑模型的问题了。通过考察UI中动态数据的类型，我们可以获得应用中所需的不同模型。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/models.png" alt="" /&gt; &lt;br /&gt;我们已经决定只使用两个模型：Song和Station。我们可以定义多两个模型：Artist和Album。然而，与视图类似，我们并不想定义模型时也变得太通用。在当前情况下，我们并不需要将artist和album信息独立出来，因为当前应用不允许用户根据指定的artist选择song。相反，数据是根据station组织的，song是重点，而artist和album是song的属性。这意味着我们不能将song、artist和album结合到一个模型。这可以大大简化应用的数据边界。这也能简化在服务器端的API，因而我们不需要加载artists和albums。因而，对于这个示例，只需要2个模型：Song和Station。&lt;br /&gt;Stores&lt;br /&gt;现在我们需要考虑如何在应用中使用模型，也就是如何设计Store的问题。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/stores.png" alt="" /&gt;&lt;br /&gt;要搞清楚需要使用那些Store是比较容易的。一个好的策略是先确定页面上所有需要绑定数据的组件。在当前情况下，我们需要列出用户收喜爱stations，一个显示近期播放过的歌曲的scroller，一个搜索区域以显示搜索结果。每一个这样的视图度需要绑定一个Store。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;控制器&lt;/span&gt;&lt;br /&gt;有几种方法可以让你通过应用控制器发布应用的响应。让我们开始考虑当前例子需要那些控制器。&lt;br /&gt;&lt;img class="bb-image" src="http://img1.sencha.com/files/misc/controllers.png" alt="" /&gt;&lt;br /&gt;这里有2个基本控制器：SongController和StationController。ExtJS 4允许你使用一个控制同时其控制几个视图。StationController要处理的事情包括创建新的stations，以及当用户喜爱的station加载后，将其应用到StationList视图。SongController负责管理SongInfo视图和根据用户的liking、disliking、暂停和跳过操作更新RecentSong Store。控制器可通过应用事件的触发和监听实现相互之间的交互。当我们可以创建余下的控制器，一个用于管理playback，另外一个用于搜索stations，我想我们已经找到了好的划分响应的方法。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;三思而后行&lt;/span&gt;&lt;br /&gt;我们分享我们的想法，重点在于希望有助于你写代码前的应用架构的规划。我们期望通过应用程序的细节讨论有助于你建立更灵活的更容易维护架构。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2262246.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2011/11/24/2262246.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/luluping/archive/2011/11/09/2243777.html</id><title type="text">extjs4  tree</title><summary type="text">一、树面板简单示例 Javascript代码 vartree=Ext.create('Ext.tree.Panel',{ title:'树面板简单示例', width:150, height:100, renderTo:Ext.getBody(), root:{ text:'树根',//节点名称 expanded:true,//默认展开根节点 children:[{ text:'节点一',//节点名称 leaf:true//true说明为叶子节点 },{ text:'节点二',//节点名称 leaf:true//t</summary><published>2011-11-09T15:30:00Z</published><updated>2011-11-09T15:30:00Z</updated><author><name>linFen</name><uri>http://www.cnblogs.com/luluping/</uri></author><link rel="alternate" href="http://www.cnblogs.com/luluping/archive/2011/11/09/2243777.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/luluping/archive/2011/11/09/2243777.html"/><content type="html">&lt;p&gt;一、树面板简单示例 &lt;/p&gt;&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Javascript代码 &lt;a title="复制代码" href="http://hnhnhnhnhn.iteye.com/blog/1163427"&gt;&lt;img src="http://hnhnhnhnhn.iteye.com/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a title="收藏这段代码" href="javascript:void()"&gt;&lt;img class="star" src="http://hnhnhnhnhn.iteye.com/images/icon_star.png" alt="收藏代码" /&gt;&lt;img class="spinner" style="display: none;" src="http://hnhnhnhnhn.iteye.com/images/spinner.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;tree&amp;nbsp;=&amp;nbsp;Ext.create(&lt;/span&gt;&lt;span class="string"&gt;'Ext.tree.Panel'&lt;/span&gt;&lt;span&gt;,&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'树面板简单示例'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width&amp;nbsp;:&amp;nbsp;150, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height&amp;nbsp;:&amp;nbsp;100, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;renderTo:&amp;nbsp;Ext.getBody(), &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root:&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'树根'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//节点名称 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expanded:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//默认展开根节点 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children:&amp;nbsp;[{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点一'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//节点名称 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leaf:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span class="comment"&gt;//true说明为叶子节点 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点二'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//节点名称 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leaf:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span class="comment"&gt;//true说明为叶子节点 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}] &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;});&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;var tree = Ext.create('Ext.tree.Panel', {&lt;br/&gt;title: '树面板简单示例',&lt;br/&gt;width : 150,&lt;br/&gt;height : 100,&lt;br/&gt;renderTo: Ext.getBody(),&lt;br/&gt;root: {&lt;br/&gt;    text: '树根',//节点名称&lt;br/&gt;    expanded: true,//默认展开根节点&lt;br/&gt;    children: [{&lt;br/&gt;        text: '节点一',//节点名称&lt;br/&gt;        leaf: true//true说明为叶子节点&lt;br/&gt;    }, {&lt;br/&gt;        text: '节点二',//节点名称&lt;br/&gt;        leaf: true//true说明为叶子节点&lt;br/&gt;    }]&lt;br/&gt;}&lt;br/&gt;});&lt;p&gt;&lt;br /&gt;&lt;br /&gt;二、多列树示例 &lt;/p&gt;&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Javascript代码 &lt;a title="复制代码" href="http://hnhnhnhnhn.iteye.com/blog/1163427"&gt;&lt;img src="http://hnhnhnhnhn.iteye.com/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a title="收藏这段代码" href="javascript:void()"&gt;&lt;img class="star" src="http://hnhnhnhnhn.iteye.com/images/icon_star.png" alt="收藏代码" /&gt;&lt;img class="spinner" style="display: none;" src="http://hnhnhnhnhn.iteye.com/images/spinner.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;tree&amp;nbsp;=&amp;nbsp;Ext.create(&lt;/span&gt;&lt;span class="string"&gt;'Ext.tree.Panel'&lt;/span&gt;&lt;span&gt;,&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'TreeGrid（多列树示例）'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;renderTo:&amp;nbsp;Ext.getBody(), &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width&amp;nbsp;:&amp;nbsp;200, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height&amp;nbsp;:&amp;nbsp;120, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fields:&amp;nbsp;[&lt;/span&gt;&lt;span class="string"&gt;'name'&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'description'&lt;/span&gt;&lt;span&gt;], &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns:&amp;nbsp;[{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xtype:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'treecolumn'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//树状表格列 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'名称'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataIndex:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'name'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width:&amp;nbsp;100, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sortable:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'描述'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dataIndex:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'description'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;flex:&amp;nbsp;1, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sortable:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}], &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root:&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'树根'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'树根的描述'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expanded:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children:&amp;nbsp;[{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点一'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点一的描述'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leaf:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点二'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点二的描述'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leaf:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}] &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;});&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;var tree = Ext.create('Ext.tree.Panel', {&lt;br/&gt;    title: 'TreeGrid（多列树示例）',&lt;br/&gt;    renderTo: Ext.getBody(),&lt;br/&gt;    width : 200,&lt;br/&gt;    height : 120,&lt;br/&gt;    fields: ['name', 'description'],&lt;br/&gt;    columns: [{&lt;br/&gt;        xtype: 'treecolumn',//树状表格列&lt;br/&gt;        text: '名称',&lt;br/&gt;        dataIndex: 'name',&lt;br/&gt;        width: 100,&lt;br/&gt;        sortable: true&lt;br/&gt;    }, {&lt;br/&gt;        text: '描述',&lt;br/&gt;        dataIndex: 'description',&lt;br/&gt;        flex: 1,&lt;br/&gt;        sortable: true&lt;br/&gt;    }],&lt;br/&gt;    root: {&lt;br/&gt;        name: '树根',&lt;br/&gt;        description: '树根的描述',&lt;br/&gt;        expanded: true,&lt;br/&gt;        children: [{&lt;br/&gt;            name: '节点一',&lt;br/&gt;            description: '节点一的描述',&lt;br/&gt;            leaf: true&lt;br/&gt;        }, {&lt;br/&gt;            name: '节点二',&lt;br/&gt;            description: '节点二的描述',&lt;br/&gt;            leaf: true&lt;br/&gt;        }]&lt;br/&gt;    }&lt;br/&gt;});&lt;p&gt;&lt;br /&gt;&lt;br /&gt;三、树面板中的复选框示例 &lt;/p&gt;&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Javascript代码 &lt;a title="复制代码" href="http://hnhnhnhnhn.iteye.com/blog/1163427"&gt;&lt;img src="http://hnhnhnhnhn.iteye.com/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a title="收藏这段代码" href="javascript:void()"&gt;&lt;img class="star" src="http://hnhnhnhnhn.iteye.com/images/icon_star.png" alt="收藏代码" /&gt;&lt;img class="spinner" style="display: none;" src="http://hnhnhnhnhn.iteye.com/images/spinner.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;tree&amp;nbsp;=&amp;nbsp;Ext.create(&lt;/span&gt;&lt;span class="string"&gt;'Ext.tree.Panel'&lt;/span&gt;&lt;span&gt;,&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'复选框示例'&lt;/span&gt;&lt;span&gt;, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width&amp;nbsp;:&amp;nbsp;150, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height&amp;nbsp;:&amp;nbsp;100, &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;renderTo:&amp;nbsp;Ext.getBody(), &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root:&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'树根'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//节点名称 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;expanded:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//默认展开根节点 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children:&amp;nbsp;[{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点一'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//节点名称 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checked&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//默认选中 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leaf:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span class="comment"&gt;//true说明为叶子节点 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;text:&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'节点二'&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//节点名称 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;checked&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;false&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class="comment"&gt;//默认不选中 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;leaf:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span class="comment"&gt;//true说明为叶子节点 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}] &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;});&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/luluping/aggbug/2243777.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/luluping/archive/2011/11/09/2243777.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
