<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_人生就是一场圣战-GODWAR</title><subtitle type="text">最大的敌人就是自己No incapable except unthinkable. God helps those who help themselves</subtitle><id>http://feed.cnblogs.com/blog/u/27657/rss</id><updated>2011-12-30T02:41:32Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/27657/rss"/><entry><id>http://www.cnblogs.com/godwar/archive/2011/12/30/2307085.html</id><title type="text">12月编程语言排行榜：C#前途无量</title><summary type="text">【IT168评论】今日Tiobe却公布了2011年12月编程语言排行榜。虽然前三的位置还是Java、C 和 C++，但是第三位置恐将易主。从 2001年开始，TIOBE指数排行榜第三的这个位置，C++编程语言一直处于坐的比较稳定并持久。虽然Perl、Visual Basic和PHP曾经也位居第三，但它们所保持的时间仅有几个月。2011年12月编程语言排行榜 Top 20 具体榜单： 对比Tiobe 公布的2011年11月编程语言排行榜，前二十排名无多大变化。从下图的排行榜可以看到，依然是C阵营的天下。 C#由安德斯&amp;#183;海尔斯伯格主持开发，微软在2000年发布了这种语言。它是微软推出的一</summary><published>2011-12-30T02:42:00Z</published><updated>2011-12-30T02:42:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/12/30/2307085.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/12/30/2307085.html"/><content type="html">&lt;p&gt;【IT168&amp;nbsp;评论】今日Tiobe却公布了2011年12月编程语言排行榜。虽然前三的位置还是Java、C 和 C++，但是第三位置恐将易主。从 2001年开始，TIOBE指数排行榜第三的这个位置，C++编程语言一直处于坐的比较稳定并持久。虽然Perl、Visual Basic和PHP曾经也位居第三，但它们所保持的时间仅有几个月。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2011年12月编程语言排行榜 Top 20 具体榜单&lt;/strong&gt;：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://image20.it168.com/201112_500x375/874/4e6bb9389af1a2c7.jpg" alt="" width="500" height="515" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对比Tiobe 公布的2011年11月编程语言排行榜，前二十排名无多大变化。从下图的排行榜可以看到，依然是C阵营的天下。&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;img src="http://image20.it168.com/201112_500x375/874/b4b5093f64e4c735.png" alt="" border="1" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;C#由安德斯&amp;middot;海尔斯伯格主持开发，微软在2000年发布了这种语言。它是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C++派生而来，继承了其强大的性能，同时又以.NET 框架类库作为基础，拥有类似Visual Basic的快速开发能力。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2011年12月编程语言排行榜前10位的长期走势图：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;img src="http://image20.it168.com/201112_500x375/874/c1fcbda6c643ed44.jpg" alt="" border="1" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从图中，我们可以看到C#和C++之间的Ratings差距不到 0.05%，这表明C#就要叩响第三位置的大门了。这又将是一场硬仗了，我们将在未来数月内看到结果了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2011年11月编程语言排行榜21至50位排名：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;img src="http://image20.it168.com/201112_800x800/874/13df7cf4ee88ef0a.jpg" alt="" border="1" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;Objective-C在本期中又上升至第5位，上个月是第6位。Logo语言从业上月的第21位升至第18位。&lt;/p&gt;&#xD;
&lt;p&gt;不出所料，今年的编程语言中又有一匹黑马，那就是 Google 的 Dart 语言，Dart 上个月一经发布便窜到了排行榜107位，11月居然到了63.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp; 2011年之前的年度编程语言&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: center;"&gt;&lt;img src="http://image20.it168.com/201112_800x800/874/7b4e1260713eead4.jpg" alt="12月编程语言排行榜：C#前途无亮" border="1" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/2307085.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/12/30/2307085.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/05/18/2050578.html</id><title type="text">便捷的安全检测</title><summary type="text">体验免费便捷的安全检测使用iiScan，会让您及时了解网站的安全情况；使用iiScan，会让您轻轻松松进行安全测试；使用iiScan，会让您网站安全航驶在互联网。而这一切，不需要您任何的硬件支持；不需要您拥有高深的安全知识；更不需要花费您一分钱。了解网站安全情况iiScan为您提供专业的网站安全测试评估，为您的网站提供权威的测试报告，告知您网站安全状况。网站安全隐患主要源自网站本身存在的程序漏洞，类似“上传漏洞”，“SQL注入漏洞”等漏洞已成为网站的安全杀手，而对于一般非安全技术人员是很难察觉这些漏洞隐患。iiScan出现就为让您及时发现网站可能存在的漏洞安全问题，让您及时了解到网站是否存在会</summary><published>2011-05-18T15:15:00Z</published><updated>2011-05-18T15:15:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/05/18/2050578.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/05/18/2050578.html"/><content type="html">&lt;div &gt;&#xD;
&lt;p&gt;&lt;strong&gt;体验免费便捷的安全检测&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div&gt;使用iiScan，会让您及时了解网站的安全情况；&lt;/div&gt;&#xD;
&lt;div&gt;使用iiScan，会让您轻轻松松进行安全测试；&lt;/div&gt;&#xD;
&lt;div&gt;使用iiScan，会让您网站安全航驶在互联网。&lt;/div&gt;&#xD;
&lt;p&gt;而这一切，不需要您任何的硬件支持；不需要您拥有高深的安全知识；更不需要花费您一分钱。&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;&lt;strong&gt;了解网站安全情况&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;img src="http://www.cnblogs.cc2/images/gather.jpg" style="margin-bottom: 0px; margin-left: 0px;" /&gt;&#xD;
&lt;div&gt;iiScan为您提供专业的网站安全测试评估，为您的网站提供权威的测试报告，告知您网站安全状况。&lt;/div&gt;&#xD;
&lt;div&gt;网站安全隐患主要源自网站本身存在的程序漏洞，类似&amp;ldquo;上传漏洞&amp;rdquo;，&amp;ldquo;SQL注入漏洞&amp;rdquo;等漏洞已成为网站的安全杀手，而对于一般非安全技术人员是很难察觉这些漏洞隐患。&lt;/div&gt;&#xD;
&lt;div&gt;iiScan出现就为让您及时发现网站可能存在的漏洞安全问题，让您及时了解到网站是否存在会给您网站带来经济和效益损失的安全隐患漏洞，让您更好保护网站的资产。&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/2050578.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/05/18/2050578.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/04/01/2002496.html</id><title type="text">Windows 7 64位中安装IIS失败？“出现错误。并非所有的功能被成功更改”</title><summary type="text">Windows 7 64位中安装IIS失败？“出现错误。并非所有的功能被成功更改”找了很多资料都没有办法解决，最后我发现其实安装IIS的时候如果在变更IIS组建的时候就没有自动选择上，就一定会出现这样的问题；但是在安装过程中，IIS其实是被安装进去了，在最后检测什么东西的时候失败了，导致还原安装，所以我的对策是：在安装时，一直打开计算管理，监视IIS的Treelist有没有完整出现，一旦出现，我就点击关机，重启后结果就是好了，也就是人为终结还原过程；昨天安装进去了，今天没有发现问题；这种方法不是很推荐，建议安装32位系统，这样兼容性好得多；</summary><published>2011-04-01T11:22:00Z</published><updated>2011-04-01T11:22:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2002496.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2002496.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Windows 7 64位中安装IIS失败？&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#8220;出现错误。并非所有的功能被成功更改&amp;#8221;&lt;/p&gt;&#xD;
&lt;p&gt;找了很多资料都没有办法解决，最后我发现其实安装IIS的时候如果在变更IIS组建的时候就没有自动选择上，就一定会出现这样的问题；&lt;/p&gt;&#xD;
&lt;p&gt;但是在安装过程中，IIS其实是被安装进去了，在最后检测什么东西的时候失败了，导致还原安装，所以我的对策是：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;在安装时，一直打开计算管理，监视IIS的Treelist有没有完整出现，一旦出现，我就点击关机，重启后结果就是好了，也就是人为终结还原过程；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;昨天安装进去了，今天没有发现问题；&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这种方法不是很推荐，建议安装32位系统，这样兼容性好得多；&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/20101007134802-1035427483.jpg" width="365" height="135" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/2002496.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/04/01/2002496.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/04/01/2001712.html</id><title type="text">Microsoft VBScript 运行时错误 错误 &amp;#39;800a000d&amp;#39; 类型不匹配: &amp;#39;regEx.Replace&amp;#39;</title><summary type="text">Microsoft VBScript 运行时错误 错误 &amp;#39;800a000d&amp;#39; 类型不匹配: &amp;#39;regMicrosoft VBScript 运行时错误 错误 &amp;#39;800a000d&amp;#39; 类型不匹配: &amp;#39;regEx.Replace&amp;#39; /bbs/Conn.asp，行 40=re.replace(Rs(&amp;quot;Subject&amp;quot;),&amp;quot;&amp;quot;)均替换为：=re.replace(&amp;quot;&amp;quot;&amp;amp;Rs(&amp;quot;Subject&amp;quot;),&amp;quot;&amp;quot;)</summary><published>2011-03-31T23:10:00Z</published><updated>2011-03-31T23:10:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001712.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001712.html"/><content type="html">&lt;div &gt;Microsoft VBScript 运行时错误 错误 '800a000d' 类型不匹配: 'reg&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;Microsoft VBScript 运行时错误&lt;font face=""&gt; &lt;/font&gt;&lt;font size="2" face="宋体"&gt;错误 '800a000d'&lt;/font&gt;&lt;font face=""&gt; &lt;/font&gt;&#xD;
&lt;p&gt;&lt;font size="2" face="宋体"&gt;类型不匹配: 'regEx.Replace'&lt;/font&gt; &#xD;
&lt;p&gt;&lt;font size="2" face="宋体"&gt;/bbs/Conn.asp&lt;/font&gt;&lt;font size="2" face="宋体"&gt;，行 40&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="2" face="宋体"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font size="2" face="宋体"&gt;&#xD;
&lt;p&gt;&lt;font color="#ff0000" size="4"&gt;=re.replace(Rs("Subject"),"")&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#ff0000" size="4"&gt;均替换为：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#ff0000" size="4"&gt;=re.replace(&lt;font style="background-color: #ffff00"&gt;""&amp;amp;&lt;/font&gt;Rs("Subject"),"")&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/2001712.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001712.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/04/01/2001711.html</id><title type="text">64位系统上的Jet for Access, Excel, Txt</title><summary type="text">原著： Ibrahim de Untruepe文章解释了怎样在64位系统下，使用Jet驱动程序与Access, Excel, Text通讯。概述 默认情况下，Microsoft OLE DB Provider for Jet 和 Jet ODBC 驱动程序只能在32为环境下运行，无法运行在64位模式下。 例如，你有一个32位应用程序，它使用微软的Microsoft OLE DB Provider for Jet。如果你将应用程序迁移至64位模式下运行，应用程序将无法 Microsoft OLE DB Provider for Jet连接到数据源。出现这个问题，是因为应用程序需要一个64位版本的</summary><published>2011-03-31T22:57:00Z</published><updated>2011-03-31T22:57:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001711.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001711.html"/><content type="html">&lt;div id="article_info"&gt;&#xD;
&lt;div id="article_publishdate"&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div id="article_writtenby"&gt;原著： Ibrahim de Untruepe&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div id="article_summary"&gt;文章解释了怎样在64位系统下，使用Jet驱动程序与Access, Excel, Text通讯。&lt;/div&gt;&#xD;
&lt;div id="article_main"&gt;&#xD;
&lt;div &gt;概述 &lt;/div&gt;&#xD;
&lt;div &gt;　　默认情况下，Microsoft OLE DB Provider for Jet 和 Jet ODBC 驱动程序只能在32为环境下运行，无法运行在64位模式下。&lt;br /&gt;&lt;br /&gt;　　例如，你有一个32位应用程序，它使用微软的Microsoft OLE DB Provider for Jet。如果你将应用程序迁移至64位模式下运行，应用程序将无法 Microsoft OLE DB Provider for Jet连接到数据源。出现这个问题，是因为应用程序需要一个64位版本的 Microsoft OLE DB Provider for Jet。另外，一个网站可能即有32位应用程序，也有64位应用程序。&lt;/div&gt;&#xD;
&lt;div &gt;解决方案&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;p&gt;如果你需要程序运行在64位环境，并打开Access, Excel 和 Text文件，你需要配置一些选项，才可以正常运行。&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;在WoW64模式下运行程序(64位系统上模拟的32位环境)。它可以使32位驱动程序正常工作。&lt;/li&gt;&lt;li&gt;如果应用程序是一个运行在IIS 7上的Web程序，你可以将Web站点对应的应用程序池配置成运行在32位模式下。&lt;/li&gt;&lt;li&gt;微软随Office 2010发布了一个新的驱动程序，&amp;#8220;2010 Office System Driver&amp;#8221;，它同时支持32位和64位。你可以使用这些驱动程序，在64位环境连接到Access, Excel和Text文件，利用它的新64位驱动程序。提供程序名为&amp;#8220;Microsoft.ACE.OLEDB.14.0&amp;#8221;。同时，你不需要购买或安装任何的Office套件，组件可以单独下载。&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&amp;amp;displaylang=en&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&#xD;
&lt;div &gt;总结 &lt;/div&gt;&#xD;
&lt;div &gt;　　它可以再64为系统上打开 Excel, Access 和 text 文件。&lt;br /&gt;　　你可以同时配置你的应用程序运行在32位驱动程序下，或让程序使用64位的新驱动程序。&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/2001711.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001711.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/04/01/2001710.html</id><title type="text">64位IIS(IIS6/IIS7)上运行Jet.Oledb的设置</title><summary type="text">由于64位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序，也不支持更早的Microsoft Access Driver (*.mdb)方式连接。所以用于 Access 和 Excel 数据库的 Microsoft OLE DB Provider for Jet 在 64 位版本中不可用，也就是说，如下两种连接字符串都已经无法正常工作了： &amp;quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&amp;quot;&amp;amp;Server.mappath(db) &amp;quot;driver=Microsoft Acces</summary><published>2011-03-31T22:56:00Z</published><updated>2011-03-31T22:56:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001710.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001710.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table cellspacing="0" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;由于64位操作系统不支持Microsoft OLE DB Provider for Jet驱动程序，也不支持更早的Microsoft Access Driver (*.mdb)方式连接。所以用于 Access 和 Excel 数据库的 Microsoft OLE DB Provider for Jet 在 64 位版本中不可用，也就是说，如下两种连接字符串都已经无法正常工作了： &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Da&lt;wbr&gt;ta Source="&amp;amp;Server.mappath(db) &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;"driver=Microsoft Access Driver (*.mdb);DBQ="&amp;amp;Server.MapPath(db) &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;既然这样，就只能使用一个办法，将IIS的运行环境设置为32位：&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;IIS6上的做法:&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;1.命令行键入:&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;cscript.exe %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;即设置IIS6允许32位程序运行在64位机器上&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;2.重新注册.net FrameWorks&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;3.完成之后，应该会看到多出一个32位的asp.net,如下图:&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;a href="http://img.bimg.126.net/photo/oT-Yd0yBRA0-CG53ZHtJgg==/4015240542779164167.jpg" target="_blank"&gt;&lt;img alt="转：64位IIS(IIS6/IIS7)上运行Jet.Oledb的设置 - 心通CTC数字校园 - CTC数字校园研究所" src="http://img.bimg.126.net/photo/oT-Yd0yBRA0-CG53ZHtJgg==/4015240542779164167.jpg" __1301612008499__="ev_2729217315" /&gt;&lt;/a&gt;&lt;a href="http://img.bimg.126.net/photo/2czPJxoS6qcpP_5bI9UKmQ==/4015240542779164168.jpg" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://img.bimg.126.net/photo/qlX3aZGvtKT_NjHTapo2Yg==/4015240542779164169.jpg" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://img.bimg.126.net/photo/JNUaEOUTPZcIk96yPxLI9Q==/3164341688181821477.jpg" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;将其设置为允许，缺点：这样会使整个IIS上的所有站点都以32位兼容方式运行&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;IIS7上的做法要简单很多:&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;应用程序池，高级设置--&amp;gt;允许32位应用程序，如下图:&lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;&lt;a href="http://img.bimg.126.net/photo/2czPJxoS6qcpP_5bI9UKmQ==/4015240542779164168.jpg"&gt;&lt;img border="0" alt="转：64位IIS(IIS6/IIS7)上运行Jet.Oledb的设置 - 心通CTC数字校园 - CTC数字校园研究所" src="http://img.bimg.126.net/photo/2czPJxoS6qcpP_5bI9UKmQ==/4015240542779164168.jpg" __1301612008499__="ev_4357965443" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p style="text-indent: 2em"&gt;建议专门针对兼容32位应用驱动新建一个应用池。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/2001710.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/04/01/2001710.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/03/31/2000538.html</id><title type="text">超经典！90后看不懂的操作系统</title><summary type="text">回忆上学时代。这个系统你还记得吗？（90后的就不要看了。） 收藏的软件比较多了。 windows95nt4.0979898seme2000xp2003vista7....... 先看一下这个古老的系统是怎么安装的。。</summary><published>2011-03-31T00:43:00Z</published><updated>2011-03-31T00:43:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/03/31/2000538.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/03/31/2000538.html"/><content type="html">&lt;div &gt;回忆上学时代。这个系统你还记得吗？（90后的就不要看了。） &lt;br /&gt;&lt;br /&gt;收藏的软件比较多了。 &lt;br /&gt;windows&amp;nbsp;95&amp;nbsp;nt4.0&amp;nbsp;&amp;nbsp;97&amp;nbsp;98&amp;nbsp;98se&amp;nbsp;me&amp;nbsp;2000&amp;nbsp;xp&amp;nbsp;2003&amp;nbsp;vista&amp;nbsp;&amp;nbsp;&amp;nbsp;7....... &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;先看一下这个古老的系统是怎么安装的。。 &lt;br /&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/0.jpg" width="720" height="400" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/1.jpg" width="720" height="400" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/2.jpg" width="720" height="400" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/3.jpg" width="720" height="400" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/4.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/5.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/6.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/7.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/8.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/9.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/10.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/11.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/12.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/13.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/14.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/15.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/16.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/17.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/18.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/19.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/20.jpg" width="640" height="400" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/21.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/22.jpg" width="640" height="480" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/godwar/23.jpg" width="640" height="400" /&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/2000538.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/03/31/2000538.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/03/17/1987057.html</id><title type="text">如何在浏览器看到ASP的错误详细信息(IIS7.0)</title><summary type="text">iis 7.0 ，在我们做的页面出现错误的时候，页面默认不会像iis 5.1 那样提示具体的错误信息。只会提示这样的一串英文信息：An error occurred on the server when processing the URL. Please contact the system administrator. &amp;lt;p/&amp;gt; If you are the system administrator please click &amp;lt;a href=&amp;quot;herehttp://go.microsoft.com/fwlink/?LinkID=82731&amp;quot;&amp;gt;he</summary><published>2011-03-17T06:58:00Z</published><updated>2011-03-17T06:58:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/03/17/1987057.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/03/17/1987057.html"/><content type="html">&lt;table style="width: 100%; table-layout: fixed"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;div id="blog_text" &gt;&#xD;
&lt;p&gt;iis 7.0 ，在我们做的页面出现错误的时候，页面默认不会像iis 5.1 那样提示具体的错误信息。只会提示这样的一串英文信息：&lt;font color="#000000"&gt;An error occurred on the server when processing the URL. Please contact the system administrator. &amp;lt;p/&amp;gt; If you are the system administrator please click &amp;lt;a href="&lt;a href='http://go.microsoft.com/fwlink/?LinkID=82731"&gt;here&lt;/a'&gt;http://go.microsoft.com/fwlink/?LinkID=82731"&amp;gt;here&amp;lt;/a&lt;/a&gt;&amp;gt; to find out more about this error.&lt;br /&gt;这段英文信息对我们解决代码或者系统的问题几乎是毫无利用价值，那我们怎样把具体的错误信息提示出来呢？&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;方法主要有两种：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;方法一：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;1、打开IIS7的asp设置，展开&amp;#8220;调试属性&amp;#8221;选项，&amp;#8220;将错误发送到浏览器&amp;#8221;这项默认的是False，改为True，然后点右侧的应用！&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;如果是英文版的话，选择ASP选项卡，展开Debugging Properties，将Sending Errors to Brower 选为TRUE就行了；&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;2、如果浏览器还看不到，那么将Internet选项中的显示有好提示信息勾掉，那就可以了。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;方法二：在CMD中以管理员身份输入以下命令&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;%windir%\system32\inetsrv\appcmd set config -section:asp -scriptErrorSentToBrowser:true &lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#000000"&gt;通过以上的设置，就可以提示具体的错误信息了！大家可以通过错误信息对自己的页面进行修改&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/1987057.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/03/17/1987057.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/02/28/1967090.html</id><title type="text">PHP and ASP.NET - A Feature List</title><summary type="text">http://www.codeproject.com/KB/applications/php_asp_net.aspxThe choice of technology is completely dependent on the requirements. The factors that influence the decision of choice are based on the following:Complexity of Business logicDensity of contentsExpected number of Hits (if it is a website)Bud</summary><published>2011-02-28T08:22:00Z</published><updated>2011-02-28T08:22:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/02/28/1967090.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/02/28/1967090.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/applications/php_asp_net.aspx"&gt;http://www.codeproject.com/KB/applications/php_asp_net.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The choice of technology is completely dependent on the requirements. The factors that influence the decision of choice are based on the following:&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;Complexity of Business logic&lt;/li&gt;&lt;li&gt;Density of contents&lt;/li&gt;&lt;li&gt;Expected number of Hits (if it is a website)&lt;/li&gt;&lt;li&gt;Budget&lt;/li&gt;&lt;li&gt;Size of project, etc. &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;There are multiple options available for many features. The major ones are listed which are my recommendations. &lt;/p&gt;&#xD;
&lt;table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none"  border="1" cellspacing="0" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt;background: #fabf8f; border-left-color: #f0f0f0; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&lt;strong&gt;ASP.NET &lt;/strong&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt;background: #fabf8f; border-left-color: #f0f0f0; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;&lt;strong&gt;PHP &lt;/strong&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt;background: #fabf8f; border-left-color: #f0f0f0; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;strong&gt;Comments &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Latest Stable Version &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;4.0 &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;5.3.3 &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;As of 19 Aug 2010 &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;License &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;MS EULA &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;PHP License v3.01 &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Price &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;ASP.NET - .NET Framework is free. So ASP.NET also free&lt;/li&gt;&lt;li&gt;Web Server &amp;#8211; IIS &amp;#8211; Not Free. OS cost applicable&lt;/li&gt;&lt;li&gt;OS &amp;#8211; Windows Server &amp;#8211; Not Free &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;PHP &amp;#8211; Free&lt;/li&gt;&lt;li&gt;Web Server &amp;#8211; Free&lt;/li&gt;&lt;li&gt;OS &amp;#8211; Linux is free, Windows is costly &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;PHP can be installed on any OS and Web server. But ASP.NET is recommended for IIS only (even though ports to few web servers available) &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Third Party Hosting Price &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Cost involved &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Cost Involved &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Both are not costly but if you compare, PHP is found to be a little bit cheaper &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Development Cost &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Developer cost Involved Visual Studio Express Editions are free Rapid-Application-Development Model. So development takes less time &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Developer Cost Involved Free/Open Source IDEs available Much coding involved &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Both are same but ASP.NET is more on Rapid-Application-Development and PHP is more on Coding &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Cross Platform &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Yes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Yes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Whatever server side language you use, browsers render only as HTML. But development is not cross-platform even though ASP.NET got ports for Linux available &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;&lt;span &gt;Code&lt;/span&gt; Portability&amp;nbsp; &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Partial &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Yes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;For PHP, a &lt;span &gt;code&lt;/span&gt; written on Linux/Apache will work on Windows or any OS/Web Server. But .NET, even though we have ports available, you will require some tweaks to make it run. &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Cloud Feasibility &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Possible &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Possible &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Additionally, for ASP.NET -SQL Azure is also available for database hosting. &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Mode of source &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Closed Source &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Open Source &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Application developers have no benefits for either it is closed or open &lt;strong&gt;UPDATE: &lt;/strong&gt;Microsoft also opened .NET framework &lt;span &gt;code&lt;/span&gt; for reference. Note that it is just for reference. You cannot do anything except reading. A real open source must be able to download, make amendments, re-compile. You cannot make your own .NET versions. &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Promoted by &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Microsoft &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;PHP Community &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Customer Support by Owner &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Yes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;No &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Security Fixes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Auto Update &amp;#8211; part of OS &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Need to update separately when available &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Both parties release fixes for bugs and security issues instantly &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Developer Help &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Community &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Community &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Both technologies got fans worldwide. They will provide help and guidance through forums, mail lists, news groups, etc. &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Languages &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;C#&lt;/li&gt;&lt;li&gt;VB.NET&lt;/li&gt;&lt;li&gt;Jscript, etc. &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;PHP &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Database &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Any Database Good fit: Microsoft SQL Server &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Any Database Good fit: MySQL &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Supports most of the databases &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Frameworks / OOPs &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;There is an inbuilt framework (called web forms framework) available which will force developers to use OOPs &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;You can write both procedural and OOPs based &lt;span &gt;code&lt;/span&gt; &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;&lt;span &gt;MVC&lt;/span&gt; &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Microsoft ASP.NET &lt;span &gt;MVC&lt;/span&gt; &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Symfony &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Development IDE &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;Recommended: Microsoft Visual Studio&lt;/li&gt;&lt;li&gt;Any IDE &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;Recommended: Zend Studio&lt;/li&gt;&lt;li&gt;Any IDE &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Even Notepad can be used for coding. PHP is more easy for that, but if you can afford Visual Studio, then ASP.NET. &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;ORM &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;ADO.NET Entity Framework&lt;/li&gt;&lt;li&gt;NHibernate &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Doctrine &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Templating &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;NVelocity &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Smarty &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Extensibility &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;ASP.NET uses Microsoft.NET framework. So you can make use of any functionality available on .NET framework&lt;/li&gt;&lt;li&gt;HTTPHandlers&lt;/li&gt;&lt;li&gt;HTTPModules&lt;/li&gt;&lt;li&gt;ISASP Extensions, etc. &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;PECL &amp;#8211; PHP Extension Community Library &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Easy to learn &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Yes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Yes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Personally I found PHP to be easier for a beginner to learn programming &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Recommended for Huge systems? &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Yes &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;No &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;As per my analysis, PHP is recommended for small-to-medium projects and ASP.NET and JSP for medium-to-big applications &lt;strong&gt;UPDATE:&lt;/strong&gt; If you think about Facebook, please understand that: &#xD;
&lt;ol&gt;&lt;li&gt;it uses a re-written PHP and a&lt;/li&gt;&lt;li&gt;transformer+compiler called HipHop which transforms PHP &lt;span &gt;code&lt;/span&gt; to highly optimized C++ &lt;span &gt;code&lt;/span&gt; and then compiles with gcc. We are talking here about the PHP we get for application developers from PHP.NET (as it is). &lt;/li&gt;&lt;/ol&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Content Management Systems &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;DotNetNuke&lt;/li&gt;&lt;li&gt;SharePoint&lt;/li&gt;&lt;li&gt;N2CMS &amp;#8230; &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;Typo3&lt;/li&gt;&lt;li&gt;Joomla&lt;/li&gt;&lt;li&gt;Magento &amp;#8230; &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Wide variety of options &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Advancement &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Growing very fast &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Growing with limited speed &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Micorosft&amp;#8217;s team is keen to develop and integrate new features. But since PHP is promoted by community, it takes time to reach that level &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Backward Compatibility &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Old &lt;span &gt;code&lt;/span&gt; will work on new framework versions without change &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Old &lt;span &gt;code&lt;/span&gt; might need tweaks to make it work on latest versions &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Security &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;IIS must be improved from the&amp;nbsp;past and now a days it is one of the secure web servers &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Major web servers are secure &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;ASP.NET, PHP, Oss and its servers are mostly secure. Now developers need to make sure their coding is secure. &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Performance &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Faster &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;Faster for small programs and slower for medium-to-big programs &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;Very basic old argument &amp;#8211; ASP.NET is compiled and PHP is interpreted (line by line compilation and execution) &lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Deployment &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;Multiple methods available E.g.: Publish, XCopy, MSI &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;You need to copy/paste &lt;span &gt;code&lt;/span&gt; to server somehow (e.g.: FTP) &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 74.65pt; padding-right: 5.4pt;background: #fbd4b4; border-right: black 1pt solid; padding-top: 0in" valign="top" width="100"&gt;Some useful features &lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 133.25pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="178"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;WCF (Windows Communication Foundation), Web Service, .NET Remoting etc.&lt;/li&gt;&lt;li&gt;ASP.NET AJAX&lt;/li&gt;&lt;li&gt;Built-in Caching features &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135.9pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="181"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;Web Service&lt;/li&gt;&lt;li&gt;Third party Ajax libraries&lt;/li&gt;&lt;li&gt;Third party Caching libraries &lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&#xD;
&lt;td style="border-bottom: black 1pt solid; padding-bottom: 0in; background-color: transparent; border-top-color: #f0f0f0; padding-left: 5.4pt; width: 135pt; padding-right: 5.4pt; border-left-color: #f0f0f0; border-right: black 1pt solid; padding-top: 0in" valign="top" width="180"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;I do not claim all I stated above are true, but all that I believe to be true. Also this list is in no way complete. It is time consuming to build a full list, so I included the major points only. &lt;/p&gt;&#xD;
&lt;p&gt;Correct me if any point is wrong or if I missed any important points.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/1967090.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/02/28/1967090.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/godwar/archive/2011/02/28/1967081.html</id><title type="text">Javascript DataGrid using the MVC</title><summary type="text">http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspxDownload demo project - 19.6 KBDownload source file - 10.5 KB Introduction The MVC pattern is the way of breaking an application or GUI control into three parts: the controller, the model, and the view. The MVC pattern was designed to d</summary><published>2011-02-28T08:13:00Z</published><updated>2011-02-28T08:13:00Z</updated><author><name>巍巍边疆</name><uri>http://www.cnblogs.com/godwar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/godwar/archive/2011/02/28/1967081.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/godwar/archive/2011/02/28/1967081.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx"&gt;http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul &gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid/Demo.zip"&gt;Download demo project - 19.6 KB&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid/Grid.zip"&gt;Download source file - 10.5 KB&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;img alt="Screenshot - gridScreen.jpg" src="http://www.codeproject.com/KB/scripting/Javascript_DataGrid/gridScreen.jpg" width="600" height="374" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Introduction &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The &lt;span &gt;MVC&lt;/span&gt; pattern is the way of breaking an application or GUI control into three parts: the controller, the model, and the view. The &lt;span &gt;MVC&lt;/span&gt; pattern was designed to deal with input, data processing, and rendering the data into the GUI realm. The user input, data processing and rendering the data are separated and handled by the view, model, and controller objects.&lt;/p&gt;&#xD;
&lt;p&gt;The controller interprets the mouse and keyboard inputs from the user and maps these commands to the view and model objects to change the state. The model manages one or more data elements. The view manages the client area of the display and is responsible for presenting the data to the user. A view typically has a kit of the methods that know how to render the graphics. A controller is an object that is responsible for user interaction with the application. A controller accepts input from the user and forces the view and the model to perform actions. For instance, if the user clicks the mouse button or clicks some item on interface, the controller is responsible for determining how the app should respond to the end-user. The model, view, and controller are related. Therefore, they must reference each other (the picture below show the Model-View-Controller relationships).&lt;/p&gt;&#xD;
&lt;p&gt;I think that the &lt;span &gt;MVC&lt;/span&gt; paradigm is the best way of breaking the GUI control, that is why I choose this pattern, and I do like this pattern. It doesn't matter what environment you use, whether it's a Java, C# or even JavaScript. The idea is to break the application into three logic classes. &lt;/p&gt;&#xD;
&lt;div id="premain0"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg0" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="0"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse0" preid="0"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="0"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre0" lang="text"&gt;--------------&#xD;
                 |   Model    |&#xD;
                 --------------&#xD;
                /\           /\&#xD;
                /             \&#xD;
               /               \&#xD;
              /                 \&#xD;
             /                   \&#xD;
      -------------- &amp;lt;------ --------------&#xD;
      |    View    |         | Controller |&#xD;
      --------------         --------------&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Background &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;My passion is AJAX applications and JavaScript controls. I don't like to use ActiveX or Java applets in the browser. Sure, there are many reasons why you have to do this, but in most cases I think it is better to implement it via JavaScript &lt;span &gt;code&lt;/span&gt;. I'm talking about GUI controls.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span &gt;Code&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;As stated above, the &lt;span &gt;MVC&lt;/span&gt; paradigm supposes to break an application or GUI control into three logic classes. There are three logic classes in this control. &lt;/p&gt;&#xD;
&lt;div id="premain1"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg1" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="1"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse1" preid="1"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="1"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre1" lang="jscript"&gt;&lt;span &gt;var&lt;/span&gt; dataSource = &lt;span &gt;new&lt;/span&gt; DataSource();&lt;span &gt;//&lt;/span&gt;&lt;span &gt;implements the model&#xD;
&lt;/span&gt;&lt;span &gt;var&lt;/span&gt; view = &lt;span &gt;new&lt;/span&gt; View(idHolder,columnsWSize,dataSource);&#xD;
&lt;span &gt;var&lt;/span&gt; controller = &lt;span &gt;new&lt;/span&gt; Controller(view, dataSource);&lt;/pre&gt;&#xD;
&lt;p&gt;The controller class handles all events and forces the dataSource and view classes to perform certain actions.&lt;/p&gt;&#xD;
&lt;div id="premain2"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg2" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="2"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse2" preid="2"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="2"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre2" lang="jscript"&gt;&lt;span &gt;this&lt;/span&gt;.onRemoveRow = &lt;span &gt;function&lt;/span&gt;(rowId)&#xD;
{ &#xD;
    view.removeRow(rowId);&#xD;
    dataSource.removeRow(rowId);&#xD;
}&#xD;
&lt;span &gt;this&lt;/span&gt;.onUpdateRow = &lt;span &gt;function&lt;/span&gt;(rowID)&#xD;
{&#xD;
    view.setGridUnselectedState();&#xD;
    view.setRowWriteState(rowID);&#xD;
}&#xD;
&lt;span &gt;this&lt;/span&gt;.onAddRow = &lt;span &gt;function&lt;/span&gt;()&#xD;
{ &#xD;
    view.setGridUnselectedState();&#xD;
    view.setRowAddState();&#xD;
}&#xD;
view.dataClickedEventHandler = &lt;span &gt;function&lt;/span&gt;()&#xD;
{&#xD;
    thisRef.hideAllMenu();&#xD;
    view.setGridUnselectedState();&#xD;
    event.cancelBubble = &lt;span &gt;true&lt;/span&gt;; &#xD;
}&#xD;
....&lt;/pre&gt;&#xD;
&lt;p&gt;The dataSource class has a kit of the methods which work with data.&lt;/p&gt;&#xD;
&lt;div id="premain3"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg3" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="3"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse3" preid="3"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="3"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre3" lang="jscript"&gt;&lt;span &gt;var&lt;/span&gt; dataHeaders = &lt;span &gt;new&lt;/span&gt; Array();&#xD;
&lt;span &gt;var&lt;/span&gt; dataRows = &lt;span &gt;new&lt;/span&gt; Array();&#xD;
&lt;span &gt;var&lt;/span&gt; sortDirection= asc;&#xD;
&lt;span &gt;var&lt;/span&gt; sortIndex = &lt;span &gt;0&lt;/span&gt;; &#xD;
&#xD;
&lt;span &gt;function&lt;/span&gt; sortItems(data1,data2)&#xD;
{&#xD;
    &lt;span &gt;var&lt;/span&gt; data1Value = data1[sortIndex];&#xD;
    &lt;span &gt;var&lt;/span&gt; data2Value = data2[sortIndex];&#xD;
          &#xD;
    &lt;span &gt;if&lt;/span&gt;(data1Value==null)&#xD;
        data1Value = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;"&lt;/span&gt;;&#xD;
            &#xD;
    &lt;span &gt;if&lt;/span&gt;(data2Value==null)&#xD;
        data2Value = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;"&lt;/span&gt;;&#xD;
    data1Value = data1Value.toUpperCase();&#xD;
    data2Value = data2Value.toUpperCase();&#xD;
     &#xD;
    &lt;span &gt;if&lt;/span&gt;(sortDirection==asc)&#xD;
    {&#xD;
        &lt;span &gt;if&lt;/span&gt;(data1Value &amp;lt; data2Value)&#xD;
            &lt;span &gt;return&lt;/span&gt; -1;&#xD;
        &lt;span &gt;else&lt;/span&gt; &#xD;
        &lt;span &gt;if&lt;/span&gt;(data1Value &amp;gt; data2Value)&#xD;
            &lt;span &gt;return&lt;/span&gt; &lt;span &gt;1&lt;/span&gt;;&#xD;
        &lt;span &gt;else&lt;/span&gt; &#xD;
            &lt;span &gt;return&lt;/span&gt; &lt;span &gt;0&lt;/span&gt;;      &#xD;
    }&#xD;
    &lt;span &gt;else&lt;/span&gt; &#xD;
    {&#xD;
        &lt;span &gt;if&lt;/span&gt;(data1Value &amp;gt; data2Value)&#xD;
            &lt;span &gt;return&lt;/span&gt; -1;&#xD;
        &lt;span &gt;else&lt;/span&gt; &#xD;
            &lt;span &gt;if&lt;/span&gt;(data1Value &amp;lt; data2Value)&#xD;
                &lt;span &gt;return&lt;/span&gt; &lt;span &gt;1&lt;/span&gt;;&#xD;
            &lt;span &gt;else&lt;/span&gt; &#xD;
                &lt;span &gt;return&lt;/span&gt; &lt;span &gt;0&lt;/span&gt;;   &#xD;
    }&#xD;
}&#xD;
&lt;span &gt;this&lt;/span&gt;.clear = &lt;span &gt;function&lt;/span&gt;()&#xD;
{&#xD;
    dataHeaders = &lt;span &gt;new&lt;/span&gt; Array();&#xD;
    dataRows = &lt;span &gt;new&lt;/span&gt; Array();&#xD;
    sortDirection= asc;&#xD;
    sortIndex = &lt;span &gt;0&lt;/span&gt;; &#xD;
}&#xD;
...&lt;/pre&gt;&#xD;
&lt;p&gt;The view class has kit of the methods to work with GUI. &lt;/p&gt;&#xD;
&lt;div id="premain4"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg4" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="4"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse4" preid="4"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="4"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre4" lang="jscript"&gt;&lt;span &gt;this&lt;/span&gt;.isRowWriteState = &lt;span &gt;function&lt;/span&gt;(rowId)&#xD;
{&#xD;
    &lt;span &gt;for&lt;/span&gt;(&lt;span &gt;var&lt;/span&gt; index=0;index &amp;lt; dataContent.rows.length;index++)&#xD;
    {  &#xD;
        &lt;span &gt;if&lt;/span&gt;(dataContent.rows[index].cells&#xD;
            [dataContent.rows[index].cells.length-1].firstChild.children&#xD;
            [&lt;span &gt;1&lt;/span&gt;]!=null &amp;amp;&amp;amp; dataContent.rows[index].rowId == rowId)&#xD;
                &lt;span &gt;return&lt;/span&gt; &lt;span &gt;true&lt;/span&gt;;&#xD;
    }&#xD;
}&#xD;
&lt;span &gt;this&lt;/span&gt;.setRowSelectedState  = &lt;span &gt;function&lt;/span&gt;(rowId)&#xD;
{ &#xD;
    &lt;span &gt;for&lt;/span&gt;(&lt;span &gt;var&lt;/span&gt; index=0; index &amp;lt; dataContent.rows.length; index++)&#xD;
    {&#xD;
        &lt;span &gt;if&lt;/span&gt;(dataContent.rows[index].rowId==rowId)&#xD;
        {   &#xD;
            &lt;span &gt;for&lt;/span&gt;(&lt;span &gt;var&lt;/span&gt; index1 = &lt;span &gt;0&lt;/span&gt;; index1 &amp;lt; &#xD;
                dataContent.rows[index].cells.length; index1++)&#xD;
            {   &#xD;
                &lt;span &gt;var&lt;/span&gt; width = dataContent.rows[index].cells[index1].style.width;&#xD;
                dataContent.rows[index].cells[index1].style.cssText = &#xD;
                    styleCellSelectedData;&#xD;
                dataContent.rows[index].cells[index1].style.width = width;&#xD;
            }&#xD;
            &lt;span &gt;break&lt;/span&gt;;&#xD;
        }&#xD;
             &#xD;
    }&#xD;
    &lt;span &gt;this&lt;/span&gt;.selectedRowId = rowId;&#xD;
}&#xD;
&lt;span &gt;this&lt;/span&gt;.setGridReadState = &lt;span &gt;function&lt;/span&gt;()&#xD;
{&#xD;
    &lt;span &gt;for&lt;/span&gt;(&lt;span &gt;var&lt;/span&gt; index=0;index &amp;lt; dataContent.rows.length;index++)&#xD;
    {  &#xD;
        &lt;span &gt;//&lt;/span&gt;&lt;span &gt;if the stub column has buttons that means the row is in write state&#xD;
&lt;/span&gt;        &lt;span &gt;if&lt;/span&gt;(dataContent.rows[index].cells[dataContent.rows&#xD;
            [index].cells.length-1].firstChild.children[&lt;span &gt;1&lt;/span&gt;]!=null)&#xD;
            {&#xD;
                &lt;span &gt;this&lt;/span&gt;.setRowReadState(dataContent.rows[index].rowId);&#xD;
            }&#xD;
    }&#xD;
}&#xD;
&lt;span &gt;this&lt;/span&gt;.setGridNotAddState = &lt;span &gt;function&lt;/span&gt;()&#xD;
{  &#xD;
&lt;span &gt;if&lt;/span&gt;(data.children.length==2)&#xD;
    data.children[&lt;span &gt;0&lt;/span&gt;].parentElement.removeChild(data.children[&lt;span &gt;0&lt;/span&gt;]);&#xD;
}&#xD;
...&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Disadvantages &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;There are a couple of disadvantages in this grid. It supports only Internet Explorer (I didn't have much time to write extra &lt;span &gt;code&lt;/span&gt; for it to be a cross browser control). But this is a minor disadvantage; the major disadvantage is of &lt;span &gt;code&lt;/span&gt; execution. The execution is not very good during resizing the column and creation. Since it deals with junking the text in cells, I wrote the utility method that did junking:&lt;/p&gt;&#xD;
&lt;div id="premain5"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg5" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="5"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse5" preid="5"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="5"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre5" lang="jscript"&gt;&lt;span &gt;function&lt;/span&gt; junkTextToWSize(str , wSize , cssText)&#xD;
{&#xD;
    &lt;span &gt;var&lt;/span&gt; textLabel = document.getElementById(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;uxTextLabel"&lt;/span&gt;);&#xD;
    &lt;span &gt;if&lt;/span&gt;(textLabel==null)&#xD;
    {&#xD;
        textLabel = document.createElement(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;"&lt;/span&gt;);&#xD;
        textLabel.id = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;uxTextLabel"&lt;/span&gt;; &#xD;
        document.body.appendChild(textLabel);&#xD;
    }&#xD;
    textLabel.innerText = str;&#xD;
    textLabel.style.cssText = cssText;&#xD;
    textLabel.style.visibility = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;hidden"&lt;/span&gt;;&#xD;
    textLabel.style.position = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;absolute"&lt;/span&gt;; &#xD;
          &#xD;
    &lt;span &gt;if&lt;/span&gt;(textLabel.offsetWidth&amp;gt;=wSize)&#xD;
    {&#xD;
        textLabel.innerText = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;..."&lt;/span&gt;+textLabel.innerText&#xD;
        &lt;span &gt;while&lt;/span&gt;(textLabel.offsetWidth&amp;gt;=wSize)&#xD;
        {&#xD;
            textLabel.innerText = textLabel.innerText.substr&#xD;
                        (&lt;span &gt;0&lt;/span&gt;,textLabel.innerText.length-1);&#xD;
        }&#xD;
        &lt;span &gt;var&lt;/span&gt; retString = textLabel.innerText.substr&#xD;
            (&lt;span &gt;3&lt;/span&gt;,textLabel.innerText.length-3)+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;..."&lt;/span&gt;;&#xD;
        &lt;span &gt;return&lt;/span&gt; retString;&#xD;
    }&#xD;
&#xD;
    &lt;span &gt;else&lt;/span&gt; &#xD;
    &lt;span &gt;return&lt;/span&gt; str;&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;This method creates a temp span element to check the size of text. If the text label is too long, it has to be junked and be with the suffix "�". The call of the &lt;code&gt;offsetWidth &lt;/code&gt;is too expensive for IE. I wrote the simple function to try out the &lt;code&gt;offsetWidth &lt;/code&gt;calling. &lt;/p&gt;&#xD;
&lt;div id="premain6"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg6" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="6"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse6" preid="6"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="6"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre6" lang="jscript"&gt;&lt;span &gt;function&lt;/span&gt; buildTable()&#xD;
{       &#xD;
      &lt;span &gt;var&lt;/span&gt; table = document.all.uxTest.appendChild&#xD;
          (document.createElement(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;&amp;lt;table&amp;gt;"&lt;/span&gt;));&#xD;
      &lt;span &gt;for&lt;/span&gt;(&lt;span &gt;var&lt;/span&gt; index=0; index&amp;lt;401; index++ ) &#xD;
      {&#xD;
         &lt;span &gt;var&lt;/span&gt; row = table.insertRow();&#xD;
         &lt;span &gt;for&lt;/span&gt;(&lt;span &gt;var&lt;/span&gt; index1=0; index1 &amp;lt; &lt;span &gt;11&lt;/span&gt;; index1++)&#xD;
         {&#xD;
           &#xD;
              &lt;span &gt;var&lt;/span&gt; cell = row.insertCell()&#xD;
              cell.innerText = index+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;string"&lt;/span&gt;+index1;&#xD;
              &lt;span &gt;//&lt;/span&gt;&lt;span &gt; var offsetWidth = cell.offsetWidth;             &#xD;
&lt;/span&gt;&#xD;
         }        &#xD;
      }   &#xD;
}&#xD;
buildTable();&lt;/pre&gt;&#xD;
&lt;p&gt;This calling will take about 6 seconds, but if you uncommented the "&lt;code&gt;var offsetWidth = cell.offsetWidth;&lt;/code&gt;" it would take over 1 minute to execute. That is why I set the limit of rows in grid to 300 rows. I'm still interested on how to count the width of the text without calling the &lt;code&gt;offsetwidth &lt;/code&gt;property. &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Grid features&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;This grid supports dragging columns, resizing columns, and sorting columns. The double click on the column header will cause sorting the grid by the clicked header column. In order to resize columns, you need to move the header separator, holding the mouse button. It will cause junking the text labels in resizing column if they are too long to be in the cell. To drag a column you need to move the mouse on the header, holding the mouse button. &lt;/p&gt;&#xD;
&lt;p&gt;The grid also has two kind of menus: the selected row menu and the grid menu. Right-clicking on row will cause an appearance of the selected row menu and right-clicking anywhere out of rows will cause an appearance of the grid menu. The grid has two events "onRowUpdated" and "onRowAdded". These events fire on "Add","Update" button click and return the obj that contains new values for grid row. &lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="Screenshot - addUpdateScreen.jpg" src="http://www.codeproject.com/KB/scripting/Javascript_DataGrid/addUpdateScreen.jpg" width="543" height="380" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In order to set row into "add", "update" state you need call the grid methods "grid.addRow()", "grid.updateRow(rowId)". &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Using the &lt;span &gt;code&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;It's pretty simple to use it in any web application.&lt;/p&gt;&#xD;
&lt;div id="premain7"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg7" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="7"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse7" preid="7"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="7"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre7" lang="jscript"&gt;&lt;span &gt;var&lt;/span&gt; grid = &lt;span &gt;new&lt;/span&gt; GolikGrid(&lt;span &gt;null&lt;/span&gt;,&#xD;
 [&lt;span &gt;150&lt;/span&gt;,&lt;span &gt;30&lt;/span&gt;,&lt;span &gt;150&lt;/span&gt;,&lt;span &gt;100&lt;/span&gt;,&lt;span &gt;150&lt;/span&gt;,&lt;span &gt;150&lt;/span&gt;,&lt;span &gt;150&lt;/span&gt;,&lt;span &gt;150&lt;/span&gt;,&lt;span &gt;150&lt;/span&gt;,&lt;span &gt;150&lt;/span&gt;],&lt;span &gt;500&lt;/span&gt;,&lt;span &gt;900&lt;/span&gt; ,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;uxGridHolder"&lt;/span&gt;);&#xD;
&lt;span &gt;var&lt;/span&gt; dataSource = grid.getDataSource();&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Name"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Contact Name"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Title"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Address"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;City"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Region"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Postal &lt;span &gt;Code&lt;/span&gt;"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Country"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Phone"&lt;/span&gt;);&#xD;
dataSource.addHeaderItem(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Fax"&lt;/span&gt;);&#xD;
       &#xD;
dataSource.addRowItem(&lt;span &gt;1&lt;/span&gt;,&lt;span &gt;new&lt;/span&gt; Array(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Wilman Kala"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Serch"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Owner/Marketing Assistant"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Adenauerallee 900"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Seattle"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;SP"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;51100"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Germany"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;0241-039123"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;089-0877451"&lt;/span&gt;));&#xD;
dataSource.addRowItem(&lt;span &gt;2&lt;/span&gt;,&lt;span &gt;new&lt;/span&gt; Array(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Wilman Kala"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Serch"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Owner/Marketing Assistant"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Adenauerallee 900"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Seattle"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;SP"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;51100"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Germany"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;0241-039123"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;089-0877451"&lt;/span&gt;));&#xD;
dataSource.addRowItem(&lt;span &gt;3&lt;/span&gt;,&lt;span &gt;new&lt;/span&gt; Array(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Wilman Kala"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Serch"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Owner/Marketing Assistant"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Adenauerallee 900"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Seattle"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;SP"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;51100"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Germany"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;0241-039123"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;089-0877451"&lt;/span&gt;));&#xD;
dataSource.addRowItem(&lt;span &gt;4&lt;/span&gt;,&lt;span &gt;new&lt;/span&gt; Array(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;HILARION-Abastos"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Dima"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Sales Representative"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Luisenstr. 48"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Sao Paulo"&lt;/span&gt;,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;WA"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;8200"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Denmark"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;(5) 555-4729"&lt;/span&gt;,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;(171) 555-9199"&lt;/span&gt;));&#xD;
grid.dataBind();&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;div id="premain8"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg8" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="8"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse8" preid="8"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="8"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre8" lang="jscript"&gt;&lt;span &gt;var&lt;/span&gt; grid = &lt;span &gt;new&lt;/span&gt; GolikGid(param1,param2,param3,param4,param5);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Param1 &lt;/code&gt;- the id of the grid, can be omitted and &lt;code&gt;null &lt;/code&gt;can be passed instead of the real id. &lt;br /&gt;Note: if you are going to use one grid, you can ignore this param and pass &lt;code&gt;null &lt;/code&gt;but if you going to use a number of grids, you have to pass the unique id for each grid.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Param2 &lt;/code&gt;� the array of the widths for columns. &lt;br /&gt;Note: it's better to set column the actual width of the text otherwise it has to call the "&lt;code&gt;junkTextToWSize&lt;/code&gt;" method which would be causing the overload.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Param3 &lt;/code&gt;- the height of the grid.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Param4 &lt;/code&gt;- the width of the grid.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Param5 &lt;/code&gt;� the id holder for the grid. &lt;br /&gt;Note: if the param is omitted and &lt;code&gt;null &lt;/code&gt;is passed, the grid will be added to the body element instead of to the specified element. &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;div id="premain9"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg9" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="9"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse9" preid="9"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="9"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre9" lang="jscript"&gt;dataSource.addRowItem(param1,param2);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;Param1 &lt;/code&gt;- the id of the row.&lt;/li&gt;&lt;li&gt;&lt;code&gt;Param2 &lt;/code&gt;� the array of cells. &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Init menu&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;As I said before there are two kind of menus in grid: item menu and grid menu. The grid menu takes place on right mouse click on anywhere out of rows(on scroll bars, headers, freespace where supposed to be rows) and row menu takes place by right-clicking on rows. It's pretty simple to build your own menus. All you need to do is create an object, where "key" will be treated as a menu item name and value as menu item handler, then pass it in corresponding methods. &lt;/p&gt;&#xD;
&lt;div id="premain10"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg10" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="10"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse10" preid="10"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="10"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre10" lang="jscript"&gt;&lt;span &gt;var&lt;/span&gt; rowMenuItems = {&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Add New"&lt;/span&gt;:onMenuAddNew,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Update"&lt;/span&gt;:onMenuUpdateRow,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Remove"&lt;/span&gt;:onMenuRemoveRow,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Refresh"&lt;/span&gt;:onMenuRefresh};&#xD;
&lt;span &gt;var&lt;/span&gt; gridMenuItems = {&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Refresh"&lt;/span&gt;:onMenuRefresh,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Remove Column"&lt;/span&gt;:onMenuRemoveColumn,&#xD;
    &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Add New Row"&lt;/span&gt;:onMenuAddNew,&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Help"&lt;/span&gt;:onMenuHelp}; &#xD;
grid.setItemMenu(rowMenuItems);&#xD;
grid.setGridMenu(gridMenuItems);&lt;/pre&gt;&#xD;
&lt;p&gt;You also need to implement all declared handlers for menu items. For example, "Help" grid menu item handler: &lt;/p&gt;&#xD;
&lt;div id="premain11"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg11" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="11"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse11" preid="11"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="11"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre11" lang="jscript"&gt;&lt;span &gt;function&lt;/span&gt; onMenuHelp()&#xD;
{&#xD;
    window.open(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;about:blank"&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Adding, updating, and removing rows in grid&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;There are no native events for grid to get row into "update", "add" state, but there are two events that fire when that actions are completed. &lt;/p&gt;&#xD;
&lt;div id="premain12"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg12" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="12"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse12" preid="12"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="12"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre12" lang="jscript"&gt;&lt;span &gt;//&lt;/span&gt;&lt;span &gt;assign the event handler for onRowUpdated and onRowAdded event&#xD;
&lt;/span&gt;grid.onRowUpdated = onGridRowUpdated;&#xD;
grid.onRowAdded = onGridRowAdded;&lt;/pre&gt;&#xD;
&lt;p&gt;In order to set row into update state, you need to call "grid.updateRow(rowId)" somewhere. For example, "Update" row menu item handler.&lt;/p&gt;&#xD;
&lt;div id="premain13"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg13" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="13"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse13" preid="13"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="13"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre13" lang="jscript"&gt;&lt;span &gt;function&lt;/span&gt; onMenuUpdateRow()&#xD;
{&#xD;
    grid.updateRow(grid.getSelectedRowId());&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;Since the "onMenuUpdateRow" is a handler of row menu, there is an ability to get "selected RowId" by calling the "grid.getSelectedRowId()" method. This calling sets selected row into update state. The user can cancel updating by cliking the cancel button. Once the user clicks "update" button, the grid fire event "grid.onRowUpdated". &lt;br /&gt;For example, "onGridRowUpdated" event handler. &lt;/p&gt;&#xD;
&lt;div id="premain14"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg14" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="14"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse14" preid="14"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="14"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre14" lang="jscript"&gt;&lt;span &gt;function&lt;/span&gt; onGridRowUpdated(row)&#xD;
{&#xD;
    &lt;span &gt;var&lt;/span&gt; updateResult = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;The grid row has been updated.\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;ID "&lt;/span&gt;+row.id+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Name:  "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Name"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Contact Name:  "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Contact Name"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Title:  "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Title"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Address:  "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Address"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;City: "&lt;/span&gt;+row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;City"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Region: "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Region"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Postal &lt;span &gt;Code&lt;/span&gt;: "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Postal &lt;span &gt;Code&lt;/span&gt;"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Country: "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Country"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Phone: "&lt;/span&gt;+row&#xD;
        [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Phone"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Fax: "&lt;/span&gt;+row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Fax"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;  &#xD;
    alert(updateResult);&#xD;
    customDataSource.updateRow(row.id,&lt;span &gt;new&lt;/span&gt; Array(&#xD;
        row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Name"&lt;/span&gt;] ,row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Contact Name"&lt;/span&gt;],&#xD;
        row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Title"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Address"&lt;/span&gt;],&#xD;
        row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;City"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Region"&lt;/span&gt;],&#xD;
        row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Postal &lt;span &gt;Code&lt;/span&gt;"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Country"&lt;/span&gt;],&#xD;
        row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Phone"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Fax"&lt;/span&gt;]));&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;This event handler has an argument that contains the data of an updated row. Each value can be accessed with header name then saved somewhere (in current sample it's custom datasource object that is implemented as presistent storage until page is refreshed). &lt;/p&gt;&#xD;
&lt;p&gt;It is the same story with "Add New" row menu item handler. &lt;/p&gt;&#xD;
&lt;div id="premain15"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg15" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="15"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse15" preid="15"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="15"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre15" lang="jscript"&gt;&lt;span &gt;function&lt;/span&gt; onMenuAddNew()&#xD;
{&#xD;
    grid.addRow();&#xD;
}&#xD;
&lt;span &gt;function&lt;/span&gt; onGridRowAdded(row)&#xD;
{&#xD;
    &lt;span &gt;var&lt;/span&gt; updateResult = &lt;span &gt;"&lt;/span&gt;&lt;span &gt;The grid row has been added.\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Name:  "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Name"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Contact Name:  "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Contact Name"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Title:  "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Title"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Address:  "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Address"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;City: "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;City"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Region: "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Region"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Postal &lt;span &gt;Code&lt;/span&gt;: "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Postal &lt;span &gt;Code&lt;/span&gt;"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Country: "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Country"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Phone: "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Phone"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;&#xD;
    updateResult+=   &lt;span &gt;"&lt;/span&gt;&lt;span &gt;Fax: "&lt;/span&gt;+row&#xD;
       [&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Fax"&lt;/span&gt;]+&lt;span &gt;"&lt;/span&gt;&lt;span &gt;\n"&lt;/span&gt;;  &#xD;
    customDataSource.addRowItem(&lt;span &gt;new&lt;/span&gt; Array(row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Name"&lt;/span&gt;],&#xD;
       row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Contact Name"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Company Title"&lt;/span&gt;],&#xD;
       row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Address"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;City"&lt;/span&gt;],&#xD;
       row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Region"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Postal &lt;span &gt;Code&lt;/span&gt;"&lt;/span&gt;],&#xD;
       row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Country"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Phone"&lt;/span&gt;],row[&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Fax"&lt;/span&gt;]));&#xD;
    &#xD;
    &lt;span &gt;if&lt;/span&gt;(window.confirm(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;The row has been successfully added, &#xD;
        refresh the grid?"&lt;/span&gt;))&#xD;
        initGrid();&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;The "onMenuAddNew" row menu item handler doesn't require the row id, so this row menu event handler can be added to grid menu. On adding a new row, you have to assign the new unique id for this row, so you need to put in persistent storage then re-init the grid to see the new item. &lt;/p&gt;&#xD;
&lt;p&gt;The "onMenuRemoveRow" row menu item handler can't be added to grid menu as it requires the id of the removing row that is accessible only in row menu item context. &lt;/p&gt;&#xD;
&lt;div id="premain16"  width="100%"&gt;&lt;img style="cursor: pointer" id="preimg16" src="http://www.codeproject.com/images/minus.gif" width="9" height="9" preid="16"  alt="" /&gt;&lt;span style="margin-bottom: 0px; cursor: pointer" id="precollapse16" preid="16"&gt; Collapse&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;a href="http://www.codeproject.com/KB/scripting/Javascript_DataGrid.aspx#" preid="16"&gt;Copy &lt;span &gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-top: 0px" id="pre16" lang="jscript"&gt;&lt;span &gt;function&lt;/span&gt; onMenuRemoveRow()&#xD;
{&#xD;
    &lt;span &gt;var&lt;/span&gt; selectedId = grid.getSelectedRowId();&#xD;
    &lt;span &gt;if&lt;/span&gt;(window.confirm(&lt;span &gt;"&lt;/span&gt;&lt;span &gt;Are sure you want to remove this item?"&lt;/span&gt;))&#xD;
    { &#xD;
        grid.removeRow(selectedId);&#xD;
        customDataSource.removeRow(selectedId);&#xD;
     }&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;This approach introduces a flexible way to build your own menus, but it's not necessary to build a menu only. You can do any modification on a grid by other ways. For example, it could be a nice toolbar having "remove, update, add, refresh" icons.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/godwar/aggbug/1967081.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/godwar/archive/2011/02/28/1967081.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
