﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-E帆人生</title><link>http://www.cnblogs.com/faner/</link><description>心怀希望就永远有希望...</description><language>zh-cn</language><lastBuildDate>Fri, 05 Dec 2008 11:35:26 GMT</lastBuildDate><pubDate>Fri, 05 Dec 2008 11:35:26 GMT</pubDate><ttl>60</ttl><item><title>DataGrid,DataList 与 repeater控件</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140790.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:47:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140790.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140790.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140790.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140790.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!087064084081086065082085080095086095081065080094086">
<p style="text-indent: 2em">摘自: 百度知道&nbsp;&nbsp;</p>
<p style="text-indent: 2em">在三种控件当中，DataGrid是迄今为止功能最为丰富的，但也是最不灵活的控件。这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对&lt;tr&gt;标签，而每个字段的值输出时则建立一对&lt;td&gt;标签。 </p>
<p style="text-indent: 2em">DataGrid含有几个属性可以提高其可用性。如，通过设置DataGrid的AllowSorting属性为true，并加入少量代码，DataGrid就具备了按不同字段排序的功能。此外，设定相关属性来实现分页以及单条记录编辑的功能更加增强了DataGrid的可用性。 </p>
<p style="text-indent: 2em">除了在可用性方面的支持以外，DataGrid同时也相当节省开发时间。使用DataGrid在WEB页面上显示数据只需要两行代码。一行用来设定与DataGrid绑定的数据源（DataSource），另一条则用来执行绑定命令（DataBind()）。当然，在Repeater中实现这样的功能并非不可能，只是，相比较使用DataGrid而言，你需要花费相当多的时间和精力来实现这些功能。 </p>
<p style="text-indent: 2em">尽管DataGrid有这样那样令人印象深刻的优点，它的两个缺点也同样不能忽视。首先，如前所述，DataGrid在个性化输出数据方面功能有限。当然，你可以定制字体、颜色以及线条宽度等等，但它始终只能是HTML表格。 </p>
<p style="text-indent: 2em">每个在DataGrid中的列都是DataGridColumn类的一个实例。有五种DataGrid列的形式： </p>
<p style="text-indent: 2em">&#183;BoundColumn </p>
<p style="text-indent: 2em">&#183;ButtonColumn </p>
<p style="text-indent: 2em">&#183;EditColumn </p>
<p style="text-indent: 2em">&#183;HyperLinkColumn </p>
<p style="text-indent: 2em">&#183;TemplateColumn </p>
<p style="text-indent: 2em">每种类型都会以一种方式允许页面访问与DataGrid进行交互。例如，BoundColumn将DataSource的字段值显示为纯文本；而HyperLinkColumn则将之显示为一个超级链接。另外，开发者可以通过写一个继承自DataGridColumn的自定义类来定制DataGrid列的样式。 </p>
<p style="text-indent: 2em">尽管DataGrid具有这么多的增强可用性的属性，却仍然显得死板而不够灵活。这是因为，不论什么样的属性，都需要对DataGrid所生成的表格进行相关的设置而生效。这无疑会使表格变得臃肿而失去灵活性。例如，DataGridColumn的设置会对表格的每一行的相应列生效。DataGrid的这种局限性阻碍了更有创意地显示数据。比如，你希望每五条记录被显示在一行，或根本不想要表格来显示数据，你将不得不放弃使用DataGrid。 </p>
<p style="text-indent: 2em">DataGrid的第二个缺陷是它的性能。在三种数据控件中，DataGrid是相对性能最差的。由DataGrid所生成的ViewState将会相当庞大，特别是在DataGrid含有较多的行时。当然，你也可以关闭ViewState功能，但代价是你将不能使用排序、分页以及记录编辑等功能。 </p>
<p style="text-indent: 2em">为了测量DataGrid的性能，我使用了微软的Web Application Stress Tool (WAST)。精确的测试条件设定以及测试用代码将会在本文的结尾给出。 </p>
<p style="text-indent: 2em">WAST将会对WEB服务器发出对一个特定URL的请求。每个测试将会针对一个URL在一分钟之内连续不断地请求。WAST将会一个代表性能的数值，代表WEB服务器将会在一秒钟内执行ASP.Net页面多少次。 </p>
<p style="text-indent: 2em">两个测试将显示一个仅仅显示数据的DataGrid。DataGrid将会显示Northwinds数据库中的Customers表的4个字段的内容（总计91条记录）。DataGrid的AutoGenerateColumns属性将会被设为True。第一个测试将DataGrid置于一个Form中，第二个则不置于Form中。将控件置于Form中而不指定其EnableViewState为False，则控件将会一直使用ViewState来维持其状态。对ViewState的设定是为了有一个耗时的处理过程，来看一下它对于每秒种的页面请求有什么样的影响。测试结果见图1。 </p>
<p style="text-indent: 2em">图1：对DataGrid的每秒请求次数 </p>
<p style="text-indent: 2em">在下面我们要讨论并测试的DataList和Repeater中，我们会看到它们的性能将优于DataGrid。 </p>
<p style="text-indent: 2em">〔DataList控件〕 </p>
<p style="text-indent: 2em">如前所述，DataGrid使用表格来显示数据。你也许需要更进一步地控制数据的显示。例如，你想使数据在表格中显示，但不是每行只有一条记录，而是多条。又或者，你并不想使用表格来显示数据，而是只将它们显示在一系列&lt;span&gt;标签中。 </p>
<p style="text-indent: 2em">DataList放弃了DataGrid中列表显示数据的概念，而是使用事先定义好的模板（Template）来定制显示。通过使用模板，可以同时使用HTML标签或数据绑定。这里的数据绑定的形式为：&lt;%# &#8230; %&gt;，用来显示数据源中给定条目的数据记录。如下的ItemTemplate将会显示数据源中CompanyName字段： </p>
<p style="text-indent: 2em">&lt;asp:DataList runat="server" id="myDataList"&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;%# DataBinder.Eval(Container.DataItem, "CompanyName") %&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:DataList&gt; </p>
<p style="text-indent: 2em">通过修改上面的模板，我们可以使CompanyName字段显示为粗体字，而ContactName字段则以正常式样显示在CompanyName之下。 </p>
<p style="text-indent: 2em">&lt;asp:DataList runat="server" id="myDataList"&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;b&gt;&lt;%# DataBinder.Eval(Container.DataItem, "CompanyName") %&gt;&lt;/b&gt; </p>
<p style="text-indent: 2em">&lt;br /&gt; </p>
<p style="text-indent: 2em">&lt;%# DataBinder.Eval(Container.DataItem, "ContactName") %&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:DataList&gt; </p>
<p style="text-indent: 2em">对于DataList数据源中的每一条记录，ItemTemplate会通过定义HTML标签来以相同的样式显示数据。ItemTemplate还支持其它其它6种模板： </p>
<p style="text-indent: 2em">&#183;AlternatingItemTemplate </p>
<p style="text-indent: 2em">&#183;EditItemTemplate </p>
<p style="text-indent: 2em">&#183;FooterTemplate </p>
<p style="text-indent: 2em">&#183;HeaderTemplate </p>
<p style="text-indent: 2em">&#183;ItemTemplate </p>
<p style="text-indent: 2em">&#183;SelectedItemTemplate </p>
<p style="text-indent: 2em">&#183;SeparatorTemplate </p>
<p style="text-indent: 2em">默认情况下DataList会将记录显示在HTML表格中。然而，通过设定RepeatColumn属性，你可以设置在一行中显示多少条记录。更进一步，你甚至可以指定DatList的内容不显示在表格中，而是&lt;span&gt;标签中。这可以通过设定RepearLayout属性来实现。 </p>
<p style="text-indent: 2em">通过模板、RepeatColumn和RepeatLayout属性，很明显DataList在定制数据输出样式方面较DataGrid更具灵活性，使得用户界面设计可以更加友好。当然，我们还需要进行功能性的对比，如分页、排序、记录编辑等等。 </p>
<p style="text-indent: 2em">通过EditItemIndex模板和EditCommand，UpdateCommand以及CancelCommand事件，DataList将支持记录编辑的功能。不过，比较DataGrid而言，这需要耗费更多的开发时间来实现。这种开发时间上的不一致主要有两个原因： </p>
<p style="text-indent: 2em">&#183;编辑/更新/删除按钮在DataGrid中可以通过设定EditCommandColumn来自动添加；而在DataList中则需要手动添加。 </p>
<p style="text-indent: 2em">&#183;DataGrid的BoundColumn列样式自动使用文本框控件来显示记录编辑界面。而在DataList中，你必须通过EditItemTemplate明确地指定使用什么样的编辑界面。 </p>
<p style="text-indent: 2em">实现DataList中的分页、排序功能同记录编辑功能情况一样，并不算非常复杂。这些功能可以通过巧妙的编程加以实现，只是耗费一些开发时间。所以，如果需要用户对数据记录进行排序或编辑的话，使用DataGrid要比使用DataList方便得多。 </p>
<p style="text-indent: 2em">DataList的性能要比DataGrid好一些，特别是当DataList被包含在Form当中时。图2显示了WAST对DataList的测试。 </p>
<p style="text-indent: 2em">图2：对DataList的每秒请求次数 </p>
<p style="text-indent: 2em">可以看出，在被Web Form包含的情况下，DataList的性能要明显好于DataGrid。 </p>
<p style="text-indent: 2em">〔Repeater控件〕 </p>
<p style="text-indent: 2em">Repeater控件是三种数据控件中在HTML输出方面最为灵活的控件。Repeater会按照你所要求的样式严格地输出数据记录。所以，如果你不想以表格方式或者简单的&lt;span&gt;输出数据，那么最好使用Repeater。 </p>
<p style="text-indent: 2em">与DataList一样，Repeater使用模板来指定输出样式。Repeater支持如下五种模板： </p>
<p style="text-indent: 2em">&#183;AlternatingItemTemplate </p>
<p style="text-indent: 2em">&#183;FooterTemplate </p>
<p style="text-indent: 2em">&#183;HeaderTemplate </p>
<p style="text-indent: 2em">&#183;ItemTemplate </p>
<p style="text-indent: 2em">&#183;SeparatorTemplate </p>
<p style="text-indent: 2em">HederTemplate和FooterTemplate指定在真正的记录输出之前或之后应处理的HTML内容。AlternatingItemTemplate和ItemTemplate则指定实际的每条输出记录的HTML样式。如，你需要绑定一个包含雇员信息的DataSet到一个Repeater，字段名为EmployeeName。如果你想在页面中不排序地显示这些记录，你可以使用如下的语句： </p>
<p style="text-indent: 2em">&lt;asp:Repeater runat="server" id="rptEmployees"&gt; </p>
<p style="text-indent: 2em">&lt;HeaderTemplate&gt; </p>
<p style="text-indent: 2em">&lt;ul&gt; </p>
<p style="text-indent: 2em">&lt;/HeaderTemplate&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;li&gt;&lt;%# DataBinder.Eval(Container.DataItem, "EmployeeName") %&gt;&lt;/li&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;FooterTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/ul&gt; </p>
<p style="text-indent: 2em">&lt;/FooterTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:Repeater&gt; </p>
<p style="text-indent: 2em">Repeater类不是继承自WebControl类的，这一点与DataGrid和DataList不同。所以，Repeater没有样式方面的属性可供设定。也就是说，如果你想格式化输出Repeater的数据记录，你必须使用HTML标签来设定样式。如，在一例中，如果我们想将雇员名字显示成粗体，我们必须在ItemTemplate设置相应的HTML标签： </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;li&gt;&lt;b&gt;&lt;%# DataBinder.Eval(Container.DataItem, "EmployeeName")%&gt;&lt;/b&gt;&lt;/li&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">而如果使用DataGrid或DataList，我们只通过设定ItemStyle-Font-Bold属性为True即可实现。 </p>
<p style="text-indent: 2em">Repeater在格式化设定上的欠缺，直接反映到开发时间的延长上来。对输出数据样式上的越多要求，就越会导致开发周期的延长。这些在模板中规定样式的HTML标签也越发得显得混乱，而且，在将来页面更改时会更加困难，特别是当一个新的开发人员接替工作时。而使用DataGrid或DataList你尽可以只设定样式属性，而不使用模板。而且，如果使用Visual Studio.Net或ASP.Net Web Matrix工作时，这些属性更可以被直接设定而无需编码。 </p>
<p style="text-indent: 2em">因为Repeater开发时间的延长，其在内建功能（分页、排序及编辑）上的支持也显得不足。因此在可用性方面，Repeater有着明显的缺陷。当然，&lt;b&gt;如果&lt;/b&gt;用户对于如何显示数据无所谓的话，这也算不了什么大问题。我之所以强调这个&#8220;如果&#8221;，是因为尽管用户有时在设计时并不要求能够分页、排序或编辑记录，但这样的要求往往会在开发后期，或在他们能看到显示出来的记录后产生。 </p>
<p style="text-indent: 2em">Repeater唯一优于DataGrid和DataList的特点是它的性能，尤其明显优于DataGrid。而比DataList略高一点点。 </p>
<p style="text-indent: 2em">〔结论〕 </p>
<p style="text-indent: 2em">在ASP.Net页面上显示数据时，多数的程序员会选择他们所熟悉的控件来使用，特别是DataGrid。然而，这样盲目的选择在没有&#8220;最好的通用控件&#8221;的情况下是不明智的。在选择控件来显示数据前，不妨问自己几个问题来帮助决策：是否允许用户对记录排序？是不是记录需要显示在非表格的情况下？页面是否会被高频度地访问，因此应多考虑性能？ </p>
<p style="text-indent: 2em">DataGrid提供了最多的功能，如允许访问者对记录编辑、排序或分页。同时它也是最容易使用的，甚至于简单到只需要将之添加到页面中而不必额外编写代码。不过这些易用性是以性能的损失为代价的。DataGrid在三种控件中是效率最低的，特别是在使用Web Form的情况下。 </p>
<p style="text-indent: 2em">通过使用模板，DataList提供了比DataGrid更加优秀的界面效果。不过这需要以牺牲一定的开发时间为代价。为了添加排序、分页和编辑功能，程序员不得不花费比使用DataGrid更多的精力来进行编码，虽然它的性能要优于DataGrid。 </p>
<p style="text-indent: 2em">最后，Repeater允许对数据记录作最大限度的HTML定制。通常，使用Repeater来显示数据记录比使用DataGrid和DataList要耗费更长的开发时间。另外，它不支持内建的编辑、排序和分页功能。所幸的是，Repeater在性能上要优于其它两种控件，特别是明显优于DataGrid。</p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140790.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>ASP.NET性能优化简述</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140786.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:46:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140786.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140786.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140786.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140786.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!084066093083081069085087080095086095081065080094086">
<p>1. 如果该页面不需要读取，创建和修改 Session 时，可以在页面上将 EnableSessionState 属性设置为 False</p>
<p>2. 当页面只读取Session值，而不需创建和修改时，可以在页面上将 EnableSessionState属性设置为 ReadOnly</p>
<p>3. 如果整站都不需要用到 Session 的话，则在Web.Config 文件中将Session的可用</p>
<p>状态置为 off<br />
&lt;sessionstate mode="off"/&gt;</p>
<p>4. 多使用 客户端脚本</p>
<p>5. 使用 Page.IsPostback 来避免不必要的往返执行</p>
<p>6. 只有在必要时才保存服务器控件的视图状态<br />
&lt;%@ Page EnableViewState="false" %&gt;</p>
<p>7. 不要依赖代码中的异常，它会大大降低应用程序的性能</p>
<p>8. 数据库访问尽量使用存储过程</p>
<p>9. 数据集尽量使用DataReader(只进数据游标)</p>
<p>10. 数据绑定控件尽量使用 Repeater(便利和性能的折中)</p>
<p>11. 如果有可能，应该采用 缓存数据和缓存输出(注意不要缓存太多项，因为缓存也有</p>
<p>开销，特别是内存)</p>
<p>12. 仅对需要的应用程序启用身份认证(Membership也很消耗性能的)</p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140786.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Response.Redirect和Server.Transfer的区别</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140784.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:45:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140784.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140784.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140784.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140784.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!084066087081084074081083083095086095081065080094086">
<p>Response是叫浏览器去重新转向到指定的网页，而Server自然是发生在服务器端为主了，因此会有以下区别： </p>
<p>1. Server.Transfer只能够转跳到本地虚拟目录指定的页面，而Response.Redirect则十分灵活； <br />
2. Server.Transfer可以将页面参数方便传递到指定页面； <br />
3. 使用时，Server.Transfer跳到别的页面后，浏览器显示的地址不会改变，有时反而会造成误会，当然也有些场合需要这样的效果； <br />
4. Server.Transfer可以减少客户端对服务器的请求； </p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140784.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>无法识别的配置节“connectionStrings”的解决方法</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140781.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:44:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140781.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140781.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140781.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140781.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!084067081080082074085085080095086095081065080094086">
<p style="text-indent: 2em">问题：配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 分析器错误信息: 无法识别的配置节&#8220;connectionStrings&#8221;源错误: 行 1： &lt;configuration&gt; 行 2： 行 3： &lt;connectionStrings/&gt; 行 4： ...... 源文件: F:/User/site/CS_2.1.60809.935_SDK/source/Web/web.config &nbsp;&nbsp; 行: 3&nbsp; 原因：用vs2005开发的asp.net应用程序需要使用.net framework 2.0，而在iis中的默认.net环境是1.1。这时将发生不可识别的节点的问题。 </p>
<p style="text-indent: 2em">解决办法：将.net环境升级为2.0，开始－》运行－》cmd－》 C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_regiis.exe -i </p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140781.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>定义数据表之间的关联 (DataSet.Relations.Add)</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140780.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:43:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140780.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140780.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140780.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140780.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!087075083094081075092087082095086095081065080094086">DataSet.Relations.Add("关联名称", 父关联主键字段, 子关联外来键字段) <br />
--------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;DataSet ds = new DataSet(); //建立数据集对象.<br />
&nbsp;&nbsp;&nbsp;&nbsp;OleDbDataAdapter da = new OleDbDataAdapter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;da = Data.Select("select * from dtext", "dtext");//将数据放入数据集..<br />
&nbsp;&nbsp;&nbsp;&nbsp;da.Fill(ds, "dtext");<br />
&nbsp;&nbsp;&nbsp;&nbsp;da = Data.Select("select * from a", "dtext1");//将数据放入数据集..<br />
&nbsp;&nbsp;&nbsp;&nbsp;da.Fill(ds, "dtext1");<br />
&nbsp;&nbsp;&nbsp;&nbsp;ds.Relations.Add("admin",ds.Tables["dtext"].Columns["Dname"],ds.Tables["dtext1"].Columns["Dname"]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Repeater1.DataSource = ds.Tables["dtext"].DefaultView; //进行设定..<br />
&nbsp;&nbsp;&nbsp;&nbsp;Repeater1.DataBind();//执行... <br />
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140780.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>认识Web.config文件 </title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140776.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:42:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140776.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140776.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140776.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140776.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!087068083086087071082083087095086095081065080094086">
<p style="text-indent: 2em">一、认识Web.config文件 </p>
<p style="text-indent: 2em">Web.config文件是一个XML文本文件，它用来储存 ASP.NET Web 应用程序的配置信息（如最常用的设置ASP.NET Web 应用程序的身份验证方式），它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后，默认情况下会在根目录自动创建一个默认的 </p>
<p style="text-indent: 2em">Web.config文件，包括默认的配置设置，所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置，你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息，也可以重写或修改父目录中定义的设置。 </p>
<p style="text-indent: 2em">在运行时对Web.config文件的修改不需要重启服务就可以生效（注：＜processModel＞ 节例外）。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。 </p>
<p style="text-indent: 2em">二、web.config配置文件（默认的配置设置）以下所有的代码都应该位于 </p>
<p style="text-indent: 2em">＜configuration＞ </p>
<p style="text-indent: 2em">＜system.web＞ </p>
<p style="text-indent: 2em">和 </p>
<p style="text-indent: 2em">＜/system.web＞ </p>
<p style="text-indent: 2em">＜/configuration＞ </p>
<p style="text-indent: 2em">之间，出于学习的目的下面的示例都省略了这段XML标记 </p>
<p style="text-indent: 2em">1、＜authentication＞ 节 </p>
<p style="text-indent: 2em">作用：配置 ASP.NET 身份验证支持（为Windows、Forms、PassPort、None四种）。该元素只能在计算机、站点或应用程序级别声明。＜authentication＞ 元素必需与＜authorization＞ 节配合使用。 </p>
<p style="text-indent: 2em">示例： </p>
<p style="text-indent: 2em">以下示例为基于窗体（Forms）的身份验证配置站点，当没有登陆的用户访问需要身份验证的网页，网页自动跳转到登陆网页。 </p>
<p style="text-indent: 2em">＜authentication mode="Forms" ＞ </p>
<p style="text-indent: 2em">＜forms loginUrl="logon.aspx" name=".FormsAuthCookie"/＞ </p>
<p style="text-indent: 2em">＜/authentication＞ </p>
<p style="text-indent: 2em">其中元素loginUrl表示登陆网页的名称，name表示Cookie名称 </p>
<p style="text-indent: 2em">2、＜authorization＞ 节 </p>
<p style="text-indent: 2em">作用：控制对 URL 资源的客户端访问（如允许匿名用户访问）。此元素可以在任何级别（计算机、站点、应用程序、子目录或页）上声明。必需与＜authentication＞ 节配合使用。 </p>
<p style="text-indent: 2em">示例：以下示例禁止匿名用户的访问 </p>
<p style="text-indent: 2em">＜authorization＞ </p>
<p style="text-indent: 2em">＜deny users="?"/＞ </p>
<p style="text-indent: 2em">＜/authorization＞ </p>
<p style="text-indent: 2em">注：你可以使用user.identity.name来获取已经过验证的当前的用户名；可以使用 </p>
<p style="text-indent: 2em">web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的实例请参考: </p>
<p style="text-indent: 2em">Forms验证 <a href="http://www.fanvb.net/websample/dataauth.aspx">http://www.fanvb.net/websample/dataauth.aspx</a> </p>
<p style="text-indent: 2em">3、＜compilation＞节 </p>
<p style="text-indent: 2em">作用：配置 ASP.NET 使用的所有编译设置。默认的debug属性为&#8220;True&#8221;.在程序编译完成交付使用之后应将其设为True（Web.config文件中有详细说明，此处省略示例） </p>
<p style="text-indent: 2em">4、＜customErrors＞ </p>
<p style="text-indent: 2em">作用：为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。 </p>
<p style="text-indent: 2em">示例：当发生错误时，将网页跳转到自定义的错误页面。 </p>
<p style="text-indent: 2em">＜customErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly"＞ </p>
<p style="text-indent: 2em">＜/customErrors＞ </p>
<p style="text-indent: 2em">其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示：对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。 </p>
<p style="text-indent: 2em">5、＜httpRuntime＞节 </p>
<p style="text-indent: 2em">作用：配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。 </p>
<p style="text-indent: 2em">示例：控制用户上传文件最大为4M，最长时间为60秒，最多请求数为100 </p>
<p style="text-indent: 2em">＜httpRuntime maxRequestLength="4096" executionTimeout="60" appRequestQueueLimit="100"/＞ </p>
<p style="text-indent: 2em">6、 ＜pages＞ </p>
<p style="text-indent: 2em">作用：标识特定于页的配置设置（如是否启用会话状态、视图状态，是否检测用户的输入等）。＜pages＞可以在计算机、站点、应用程序和子目录级别声明。 </p>
<p style="text-indent: 2em">示例：不检测用户在浏览器输入的内容中是否存在潜在的危险数据（注：该项默认是检测，如果你使用了不检测，一要对用户的输入进行编码或验证)，在从客户端回发页时将检查加密的视图状态，以验证视图状态是否已在客户端被篡改。(注：该项默认是不验证） </p>
<p style="text-indent: 2em">＜pages buffer="true" enableViewStateMac="true" validateRequest="false"/＞ </p>
<p style="text-indent: 2em">7、＜sessionState＞ </p>
<p style="text-indent: 2em">作用：为当前应用程序配置会话状态设置（如设置是否启用会话状态，会话状态保存位置）。 </p>
<p style="text-indent: 2em">示例： </p>
<p style="text-indent: 2em">＜sessionState mode="InProc" cookieless="true" timeout="20"/＞ </p>
<p style="text-indent: 2em">＜/sessionState＞ </p>
<p style="text-indent: 2em">注： </p>
<p style="text-indent: 2em">mode="InProc"表示：在本地储存会话状态（你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态） </p>
<p style="text-indent: 2em">cookieless="true"表示：如果用户浏览器不支持Cookie时启用会话状态(默认为False） </p>
<p style="text-indent: 2em">timeout="20"表示：会话可以处于空闲状态的分钟数 </p>
<p style="text-indent: 2em">8、＜trace＞ </p>
<p style="text-indent: 2em">作用：配置 ASP.NET 跟踪服务，主要用来程序测试判断哪里出错。 </p>
<p style="text-indent: 2em">示例：以下为Web.config中的默认配置： </p>
<p style="text-indent: 2em">＜trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" /＞ </p>
<p style="text-indent: 2em">注： </p>
<p style="text-indent: 2em">enabled="false"表示不启用跟踪；requestLimit="10"表示指定在服务器上存储的跟踪请求的数目 </p>
<p style="text-indent: 2em">pageOutput="false"表示只能通过跟踪实用工具访问跟踪输出； </p>
<p style="text-indent: 2em">traceMode="SortByTime"表示以处理跟踪的顺序来显示跟踪信息 </p>
<p style="text-indent: 2em">localOnly="true" 表示跟踪查看器 (trace.axd) 只用于宿主 Web 服务器 </p>
<p style="text-indent: 2em">三、自定义Web.config文件配置节 </p>
<p style="text-indent: 2em">自定义Web.config文件配置节过程分为两步。 </p>
<p style="text-indent: 2em">一是在在配置文件顶部 ＜configSections＞ 和 ＜/configSections＞标记之间声明配置节的名称和处理该节中配置数据的 .NET Framework 类的名称。 </p>
<p style="text-indent: 2em">二是在 ＜configSections＞ 区域之后为声明的节做实际的配置设置。 </p>
<p style="text-indent: 2em">示例：创建一个节存储数据库连接字符串 </p>
<p style="text-indent: 2em">＜configuration＞ </p>
<p style="text-indent: 2em">＜configSections＞ </p>
<p style="text-indent: 2em">＜section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/＞ </p>
<p style="text-indent: 2em">＜/configSections＞ </p>
<p style="text-indent: 2em">＜appSettings＞ </p>
<p style="text-indent: 2em">＜add key="scon" value="server=a;database=northwind;uid=sa;pwd=123"/＞ </p>
<p style="text-indent: 2em">＜/appSettings＞ </p>
<p style="text-indent: 2em">＜system.web＞ </p>
<p style="text-indent: 2em">...... </p>
<p style="text-indent: 2em">＜/system.web＞ </p>
<p style="text-indent: 2em">＜/configuration＞ </p>
<p style="text-indent: 2em">四、访问Web.config文件 </p>
<p style="text-indent: 2em">你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例：获取上面例子中建立的连接字符串。 </p>
<p style="text-indent: 2em">Dim sconstr As String = ConfigurationSettings.AppSettings("SconStr") </p>
<p style="text-indent: 2em">Dim scon = New SqlConnection(sconstr)</ca></p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140776.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>DataGrid,DataList 与 repeater控件</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140778.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:42:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140778.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140778.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140778.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140778.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!087064084081086065082085080095086095081065080094086">
<p style="text-indent: 2em">摘自: 百度知道&nbsp;&nbsp;</p>
<p style="text-indent: 2em">在三种控件当中，DataGrid是迄今为止功能最为丰富的，但也是最不灵活的控件。这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对&lt;tr&gt;标签，而每个字段的值输出时则建立一对&lt;td&gt;标签。 </p>
<p style="text-indent: 2em">DataGrid含有几个属性可以提高其可用性。如，通过设置DataGrid的AllowSorting属性为true，并加入少量代码，DataGrid就具备了按不同字段排序的功能。此外，设定相关属性来实现分页以及单条记录编辑的功能更加增强了DataGrid的可用性。 </p>
<p style="text-indent: 2em">除了在可用性方面的支持以外，DataGrid同时也相当节省开发时间。使用DataGrid在WEB页面上显示数据只需要两行代码。一行用来设定与DataGrid绑定的数据源（DataSource），另一条则用来执行绑定命令（DataBind()）。当然，在Repeater中实现这样的功能并非不可能，只是，相比较使用DataGrid而言，你需要花费相当多的时间和精力来实现这些功能。 </p>
<p style="text-indent: 2em">尽管DataGrid有这样那样令人印象深刻的优点，它的两个缺点也同样不能忽视。首先，如前所述，DataGrid在个性化输出数据方面功能有限。当然，你可以定制字体、颜色以及线条宽度等等，但它始终只能是HTML表格。 </p>
<p style="text-indent: 2em">每个在DataGrid中的列都是DataGridColumn类的一个实例。有五种DataGrid列的形式： </p>
<p style="text-indent: 2em">&#183;BoundColumn </p>
<p style="text-indent: 2em">&#183;ButtonColumn </p>
<p style="text-indent: 2em">&#183;EditColumn </p>
<p style="text-indent: 2em">&#183;HyperLinkColumn </p>
<p style="text-indent: 2em">&#183;TemplateColumn </p>
<p style="text-indent: 2em">每种类型都会以一种方式允许页面访问与DataGrid进行交互。例如，BoundColumn将DataSource的字段值显示为纯文本；而HyperLinkColumn则将之显示为一个超级链接。另外，开发者可以通过写一个继承自DataGridColumn的自定义类来定制DataGrid列的样式。 </p>
<p style="text-indent: 2em">尽管DataGrid具有这么多的增强可用性的属性，却仍然显得死板而不够灵活。这是因为，不论什么样的属性，都需要对DataGrid所生成的表格进行相关的设置而生效。这无疑会使表格变得臃肿而失去灵活性。例如，DataGridColumn的设置会对表格的每一行的相应列生效。DataGrid的这种局限性阻碍了更有创意地显示数据。比如，你希望每五条记录被显示在一行，或根本不想要表格来显示数据，你将不得不放弃使用DataGrid。 </p>
<p style="text-indent: 2em">DataGrid的第二个缺陷是它的性能。在三种数据控件中，DataGrid是相对性能最差的。由DataGrid所生成的ViewState将会相当庞大，特别是在DataGrid含有较多的行时。当然，你也可以关闭ViewState功能，但代价是你将不能使用排序、分页以及记录编辑等功能。 </p>
<p style="text-indent: 2em">为了测量DataGrid的性能，我使用了微软的Web Application Stress Tool (WAST)。精确的测试条件设定以及测试用代码将会在本文的结尾给出。 </p>
<p style="text-indent: 2em">WAST将会对WEB服务器发出对一个特定URL的请求。每个测试将会针对一个URL在一分钟之内连续不断地请求。WAST将会一个代表性能的数值，代表WEB服务器将会在一秒钟内执行ASP.Net页面多少次。 </p>
<p style="text-indent: 2em">两个测试将显示一个仅仅显示数据的DataGrid。DataGrid将会显示Northwinds数据库中的Customers表的4个字段的内容（总计91条记录）。DataGrid的AutoGenerateColumns属性将会被设为True。第一个测试将DataGrid置于一个Form中，第二个则不置于Form中。将控件置于Form中而不指定其EnableViewState为False，则控件将会一直使用ViewState来维持其状态。对ViewState的设定是为了有一个耗时的处理过程，来看一下它对于每秒种的页面请求有什么样的影响。测试结果见图1。 </p>
<p style="text-indent: 2em">图1：对DataGrid的每秒请求次数 </p>
<p style="text-indent: 2em">在下面我们要讨论并测试的DataList和Repeater中，我们会看到它们的性能将优于DataGrid。 </p>
<p style="text-indent: 2em">〔DataList控件〕 </p>
<p style="text-indent: 2em">如前所述，DataGrid使用表格来显示数据。你也许需要更进一步地控制数据的显示。例如，你想使数据在表格中显示，但不是每行只有一条记录，而是多条。又或者，你并不想使用表格来显示数据，而是只将它们显示在一系列&lt;span&gt;标签中。 </p>
<p style="text-indent: 2em">DataList放弃了DataGrid中列表显示数据的概念，而是使用事先定义好的模板（Template）来定制显示。通过使用模板，可以同时使用HTML标签或数据绑定。这里的数据绑定的形式为：&lt;%# &#8230; %&gt;，用来显示数据源中给定条目的数据记录。如下的ItemTemplate将会显示数据源中CompanyName字段： </p>
<p style="text-indent: 2em">&lt;asp:DataList runat="server" id="myDataList"&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;%# DataBinder.Eval(Container.DataItem, "CompanyName") %&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:DataList&gt; </p>
<p style="text-indent: 2em">通过修改上面的模板，我们可以使CompanyName字段显示为粗体字，而ContactName字段则以正常式样显示在CompanyName之下。 </p>
<p style="text-indent: 2em">&lt;asp:DataList runat="server" id="myDataList"&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;b&gt;&lt;%# DataBinder.Eval(Container.DataItem, "CompanyName") %&gt;&lt;/b&gt; </p>
<p style="text-indent: 2em">&lt;br /&gt; </p>
<p style="text-indent: 2em">&lt;%# DataBinder.Eval(Container.DataItem, "ContactName") %&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:DataList&gt; </p>
<p style="text-indent: 2em">对于DataList数据源中的每一条记录，ItemTemplate会通过定义HTML标签来以相同的样式显示数据。ItemTemplate还支持其它其它6种模板： </p>
<p style="text-indent: 2em">&#183;AlternatingItemTemplate </p>
<p style="text-indent: 2em">&#183;EditItemTemplate </p>
<p style="text-indent: 2em">&#183;FooterTemplate </p>
<p style="text-indent: 2em">&#183;HeaderTemplate </p>
<p style="text-indent: 2em">&#183;ItemTemplate </p>
<p style="text-indent: 2em">&#183;SelectedItemTemplate </p>
<p style="text-indent: 2em">&#183;SeparatorTemplate </p>
<p style="text-indent: 2em">默认情况下DataList会将记录显示在HTML表格中。然而，通过设定RepeatColumn属性，你可以设置在一行中显示多少条记录。更进一步，你甚至可以指定DatList的内容不显示在表格中，而是&lt;span&gt;标签中。这可以通过设定RepearLayout属性来实现。 </p>
<p style="text-indent: 2em">通过模板、RepeatColumn和RepeatLayout属性，很明显DataList在定制数据输出样式方面较DataGrid更具灵活性，使得用户界面设计可以更加友好。当然，我们还需要进行功能性的对比，如分页、排序、记录编辑等等。 </p>
<p style="text-indent: 2em">通过EditItemIndex模板和EditCommand，UpdateCommand以及CancelCommand事件，DataList将支持记录编辑的功能。不过，比较DataGrid而言，这需要耗费更多的开发时间来实现。这种开发时间上的不一致主要有两个原因： </p>
<p style="text-indent: 2em">&#183;编辑/更新/删除按钮在DataGrid中可以通过设定EditCommandColumn来自动添加；而在DataList中则需要手动添加。 </p>
<p style="text-indent: 2em">&#183;DataGrid的BoundColumn列样式自动使用文本框控件来显示记录编辑界面。而在DataList中，你必须通过EditItemTemplate明确地指定使用什么样的编辑界面。 </p>
<p style="text-indent: 2em">实现DataList中的分页、排序功能同记录编辑功能情况一样，并不算非常复杂。这些功能可以通过巧妙的编程加以实现，只是耗费一些开发时间。所以，如果需要用户对数据记录进行排序或编辑的话，使用DataGrid要比使用DataList方便得多。 </p>
<p style="text-indent: 2em">DataList的性能要比DataGrid好一些，特别是当DataList被包含在Form当中时。图2显示了WAST对DataList的测试。 </p>
<p style="text-indent: 2em">图2：对DataList的每秒请求次数 </p>
<p style="text-indent: 2em">可以看出，在被Web Form包含的情况下，DataList的性能要明显好于DataGrid。 </p>
<p style="text-indent: 2em">〔Repeater控件〕 </p>
<p style="text-indent: 2em">Repeater控件是三种数据控件中在HTML输出方面最为灵活的控件。Repeater会按照你所要求的样式严格地输出数据记录。所以，如果你不想以表格方式或者简单的&lt;span&gt;输出数据，那么最好使用Repeater。 </p>
<p style="text-indent: 2em">与DataList一样，Repeater使用模板来指定输出样式。Repeater支持如下五种模板： </p>
<p style="text-indent: 2em">&#183;AlternatingItemTemplate </p>
<p style="text-indent: 2em">&#183;FooterTemplate </p>
<p style="text-indent: 2em">&#183;HeaderTemplate </p>
<p style="text-indent: 2em">&#183;ItemTemplate </p>
<p style="text-indent: 2em">&#183;SeparatorTemplate </p>
<p style="text-indent: 2em">HederTemplate和FooterTemplate指定在真正的记录输出之前或之后应处理的HTML内容。AlternatingItemTemplate和ItemTemplate则指定实际的每条输出记录的HTML样式。如，你需要绑定一个包含雇员信息的DataSet到一个Repeater，字段名为EmployeeName。如果你想在页面中不排序地显示这些记录，你可以使用如下的语句： </p>
<p style="text-indent: 2em">&lt;asp:Repeater runat="server" id="rptEmployees"&gt; </p>
<p style="text-indent: 2em">&lt;HeaderTemplate&gt; </p>
<p style="text-indent: 2em">&lt;ul&gt; </p>
<p style="text-indent: 2em">&lt;/HeaderTemplate&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;li&gt;&lt;%# DataBinder.Eval(Container.DataItem, "EmployeeName") %&gt;&lt;/li&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;FooterTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/ul&gt; </p>
<p style="text-indent: 2em">&lt;/FooterTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:Repeater&gt; </p>
<p style="text-indent: 2em">Repeater类不是继承自WebControl类的，这一点与DataGrid和DataList不同。所以，Repeater没有样式方面的属性可供设定。也就是说，如果你想格式化输出Repeater的数据记录，你必须使用HTML标签来设定样式。如，在一例中，如果我们想将雇员名字显示成粗体，我们必须在ItemTemplate设置相应的HTML标签： </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;li&gt;&lt;b&gt;&lt;%# DataBinder.Eval(Container.DataItem, "EmployeeName")%&gt;&lt;/b&gt;&lt;/li&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">而如果使用DataGrid或DataList，我们只通过设定ItemStyle-Font-Bold属性为True即可实现。 </p>
<p style="text-indent: 2em">Repeater在格式化设定上的欠缺，直接反映到开发时间的延长上来。对输出数据样式上的越多要求，就越会导致开发周期的延长。这些在模板中规定样式的HTML标签也越发得显得混乱，而且，在将来页面更改时会更加困难，特别是当一个新的开发人员接替工作时。而使用DataGrid或DataList你尽可以只设定样式属性，而不使用模板。而且，如果使用Visual Studio.Net或ASP.Net Web Matrix工作时，这些属性更可以被直接设定而无需编码。 </p>
<p style="text-indent: 2em">因为Repeater开发时间的延长，其在内建功能（分页、排序及编辑）上的支持也显得不足。因此在可用性方面，Repeater有着明显的缺陷。当然，&lt;b&gt;如果&lt;/b&gt;用户对于如何显示数据无所谓的话，这也算不了什么大问题。我之所以强调这个&#8220;如果&#8221;，是因为尽管用户有时在设计时并不要求能够分页、排序或编辑记录，但这样的要求往往会在开发后期，或在他们能看到显示出来的记录后产生。 </p>
<p style="text-indent: 2em">Repeater唯一优于DataGrid和DataList的特点是它的性能，尤其明显优于DataGrid。而比DataList略高一点点。 </p>
<p style="text-indent: 2em">〔结论〕 </p>
<p style="text-indent: 2em">在ASP.Net页面上显示数据时，多数的程序员会选择他们所熟悉的控件来使用，特别是DataGrid。然而，这样盲目的选择在没有&#8220;最好的通用控件&#8221;的情况下是不明智的。在选择控件来显示数据前，不妨问自己几个问题来帮助决策：是否允许用户对记录排序？是不是记录需要显示在非表格的情况下？页面是否会被高频度地访问，因此应多考虑性能？ </p>
<p style="text-indent: 2em">DataGrid提供了最多的功能，如允许访问者对记录编辑、排序或分页。同时它也是最容易使用的，甚至于简单到只需要将之添加到页面中而不必额外编写代码。不过这些易用性是以性能的损失为代价的。DataGrid在三种控件中是效率最低的，特别是在使用Web Form的情况下。 </p>
<p style="text-indent: 2em">通过使用模板，DataList提供了比DataGrid更加优秀的界面效果。不过这需要以牺牲一定的开发时间为代价。为了添加排序、分页和编辑功能，程序员不得不花费比使用DataGrid更多的精力来进行编码，虽然它的性能要优于DataGrid。 </p>
<p style="text-indent: 2em">最后，Repeater允许对数据记录作最大限度的HTML定制。通常，使用Repeater来显示数据记录比使用DataGrid和DataList要耗费更长的开发时间。另外，它不支持内建的编辑、排序和分页功能。所幸的是，Repeater在性能上要优于其它两种控件，特别是明显优于DataGrid。</p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140778.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>关于无法找到脚本库"/aspnet_client/system_web/1_1_4322/webUIValidation.js的问题</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140775.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:41:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140775.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140775.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140775.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140775.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140775.html</trackback:ping><description><![CDATA[在运行中输入cmd,回车 &nbsp; &nbsp; <br />
&nbsp; &nbsp; 然后在DOS提示符下输入:cd &nbsp; c:\windows\microsoft.net\framework\v1.1.4322回车 &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; 然后输入aspnet_regiis &nbsp; -i&nbsp;
 <img src ="http://www.cnblogs.com/faner/aggbug/1140775.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>DataGrid,DataList 与 repeater控件</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140773.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:40:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140773.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140773.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140773.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140773.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!087064084081086065082085080095086095081065080094086">
<p style="text-indent: 2em">摘自: 百度知道&nbsp;&nbsp;</p>
<p style="text-indent: 2em">在三种控件当中，DataGrid是迄今为止功能最为丰富的，但也是最不灵活的控件。这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对&lt;tr&gt;标签，而每个字段的值输出时则建立一对&lt;td&gt;标签。 </p>
<p style="text-indent: 2em">DataGrid含有几个属性可以提高其可用性。如，通过设置DataGrid的AllowSorting属性为true，并加入少量代码，DataGrid就具备了按不同字段排序的功能。此外，设定相关属性来实现分页以及单条记录编辑的功能更加增强了DataGrid的可用性。 </p>
<p style="text-indent: 2em">除了在可用性方面的支持以外，DataGrid同时也相当节省开发时间。使用DataGrid在WEB页面上显示数据只需要两行代码。一行用来设定与DataGrid绑定的数据源（DataSource），另一条则用来执行绑定命令（DataBind()）。当然，在Repeater中实现这样的功能并非不可能，只是，相比较使用DataGrid而言，你需要花费相当多的时间和精力来实现这些功能。 </p>
<p style="text-indent: 2em">尽管DataGrid有这样那样令人印象深刻的优点，它的两个缺点也同样不能忽视。首先，如前所述，DataGrid在个性化输出数据方面功能有限。当然，你可以定制字体、颜色以及线条宽度等等，但它始终只能是HTML表格。 </p>
<p style="text-indent: 2em">每个在DataGrid中的列都是DataGridColumn类的一个实例。有五种DataGrid列的形式： </p>
<p style="text-indent: 2em">&#183;BoundColumn </p>
<p style="text-indent: 2em">&#183;ButtonColumn </p>
<p style="text-indent: 2em">&#183;EditColumn </p>
<p style="text-indent: 2em">&#183;HyperLinkColumn </p>
<p style="text-indent: 2em">&#183;TemplateColumn </p>
<p style="text-indent: 2em">每种类型都会以一种方式允许页面访问与DataGrid进行交互。例如，BoundColumn将DataSource的字段值显示为纯文本；而HyperLinkColumn则将之显示为一个超级链接。另外，开发者可以通过写一个继承自DataGridColumn的自定义类来定制DataGrid列的样式。 </p>
<p style="text-indent: 2em">尽管DataGrid具有这么多的增强可用性的属性，却仍然显得死板而不够灵活。这是因为，不论什么样的属性，都需要对DataGrid所生成的表格进行相关的设置而生效。这无疑会使表格变得臃肿而失去灵活性。例如，DataGridColumn的设置会对表格的每一行的相应列生效。DataGrid的这种局限性阻碍了更有创意地显示数据。比如，你希望每五条记录被显示在一行，或根本不想要表格来显示数据，你将不得不放弃使用DataGrid。 </p>
<p style="text-indent: 2em">DataGrid的第二个缺陷是它的性能。在三种数据控件中，DataGrid是相对性能最差的。由DataGrid所生成的ViewState将会相当庞大，特别是在DataGrid含有较多的行时。当然，你也可以关闭ViewState功能，但代价是你将不能使用排序、分页以及记录编辑等功能。 </p>
<p style="text-indent: 2em">为了测量DataGrid的性能，我使用了微软的Web Application Stress Tool (WAST)。精确的测试条件设定以及测试用代码将会在本文的结尾给出。 </p>
<p style="text-indent: 2em">WAST将会对WEB服务器发出对一个特定URL的请求。每个测试将会针对一个URL在一分钟之内连续不断地请求。WAST将会一个代表性能的数值，代表WEB服务器将会在一秒钟内执行ASP.Net页面多少次。 </p>
<p style="text-indent: 2em">两个测试将显示一个仅仅显示数据的DataGrid。DataGrid将会显示Northwinds数据库中的Customers表的4个字段的内容（总计91条记录）。DataGrid的AutoGenerateColumns属性将会被设为True。第一个测试将DataGrid置于一个Form中，第二个则不置于Form中。将控件置于Form中而不指定其EnableViewState为False，则控件将会一直使用ViewState来维持其状态。对ViewState的设定是为了有一个耗时的处理过程，来看一下它对于每秒种的页面请求有什么样的影响。测试结果见图1。 </p>
<p style="text-indent: 2em">图1：对DataGrid的每秒请求次数 </p>
<p style="text-indent: 2em">在下面我们要讨论并测试的DataList和Repeater中，我们会看到它们的性能将优于DataGrid。 </p>
<p style="text-indent: 2em">〔DataList控件〕 </p>
<p style="text-indent: 2em">如前所述，DataGrid使用表格来显示数据。你也许需要更进一步地控制数据的显示。例如，你想使数据在表格中显示，但不是每行只有一条记录，而是多条。又或者，你并不想使用表格来显示数据，而是只将它们显示在一系列&lt;span&gt;标签中。 </p>
<p style="text-indent: 2em">DataList放弃了DataGrid中列表显示数据的概念，而是使用事先定义好的模板（Template）来定制显示。通过使用模板，可以同时使用HTML标签或数据绑定。这里的数据绑定的形式为：&lt;%# &#8230; %&gt;，用来显示数据源中给定条目的数据记录。如下的ItemTemplate将会显示数据源中CompanyName字段： </p>
<p style="text-indent: 2em">&lt;asp:DataList runat="server" id="myDataList"&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;%# DataBinder.Eval(Container.DataItem, "CompanyName") %&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:DataList&gt; </p>
<p style="text-indent: 2em">通过修改上面的模板，我们可以使CompanyName字段显示为粗体字，而ContactName字段则以正常式样显示在CompanyName之下。 </p>
<p style="text-indent: 2em">&lt;asp:DataList runat="server" id="myDataList"&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;b&gt;&lt;%# DataBinder.Eval(Container.DataItem, "CompanyName") %&gt;&lt;/b&gt; </p>
<p style="text-indent: 2em">&lt;br /&gt; </p>
<p style="text-indent: 2em">&lt;%# DataBinder.Eval(Container.DataItem, "ContactName") %&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:DataList&gt; </p>
<p style="text-indent: 2em">对于DataList数据源中的每一条记录，ItemTemplate会通过定义HTML标签来以相同的样式显示数据。ItemTemplate还支持其它其它6种模板： </p>
<p style="text-indent: 2em">&#183;AlternatingItemTemplate </p>
<p style="text-indent: 2em">&#183;EditItemTemplate </p>
<p style="text-indent: 2em">&#183;FooterTemplate </p>
<p style="text-indent: 2em">&#183;HeaderTemplate </p>
<p style="text-indent: 2em">&#183;ItemTemplate </p>
<p style="text-indent: 2em">&#183;SelectedItemTemplate </p>
<p style="text-indent: 2em">&#183;SeparatorTemplate </p>
<p style="text-indent: 2em">默认情况下DataList会将记录显示在HTML表格中。然而，通过设定RepeatColumn属性，你可以设置在一行中显示多少条记录。更进一步，你甚至可以指定DatList的内容不显示在表格中，而是&lt;span&gt;标签中。这可以通过设定RepearLayout属性来实现。 </p>
<p style="text-indent: 2em">通过模板、RepeatColumn和RepeatLayout属性，很明显DataList在定制数据输出样式方面较DataGrid更具灵活性，使得用户界面设计可以更加友好。当然，我们还需要进行功能性的对比，如分页、排序、记录编辑等等。 </p>
<p style="text-indent: 2em">通过EditItemIndex模板和EditCommand，UpdateCommand以及CancelCommand事件，DataList将支持记录编辑的功能。不过，比较DataGrid而言，这需要耗费更多的开发时间来实现。这种开发时间上的不一致主要有两个原因： </p>
<p style="text-indent: 2em">&#183;编辑/更新/删除按钮在DataGrid中可以通过设定EditCommandColumn来自动添加；而在DataList中则需要手动添加。 </p>
<p style="text-indent: 2em">&#183;DataGrid的BoundColumn列样式自动使用文本框控件来显示记录编辑界面。而在DataList中，你必须通过EditItemTemplate明确地指定使用什么样的编辑界面。 </p>
<p style="text-indent: 2em">实现DataList中的分页、排序功能同记录编辑功能情况一样，并不算非常复杂。这些功能可以通过巧妙的编程加以实现，只是耗费一些开发时间。所以，如果需要用户对数据记录进行排序或编辑的话，使用DataGrid要比使用DataList方便得多。 </p>
<p style="text-indent: 2em">DataList的性能要比DataGrid好一些，特别是当DataList被包含在Form当中时。图2显示了WAST对DataList的测试。 </p>
<p style="text-indent: 2em">图2：对DataList的每秒请求次数 </p>
<p style="text-indent: 2em">可以看出，在被Web Form包含的情况下，DataList的性能要明显好于DataGrid。 </p>
<p style="text-indent: 2em">〔Repeater控件〕 </p>
<p style="text-indent: 2em">Repeater控件是三种数据控件中在HTML输出方面最为灵活的控件。Repeater会按照你所要求的样式严格地输出数据记录。所以，如果你不想以表格方式或者简单的&lt;span&gt;输出数据，那么最好使用Repeater。 </p>
<p style="text-indent: 2em">与DataList一样，Repeater使用模板来指定输出样式。Repeater支持如下五种模板： </p>
<p style="text-indent: 2em">&#183;AlternatingItemTemplate </p>
<p style="text-indent: 2em">&#183;FooterTemplate </p>
<p style="text-indent: 2em">&#183;HeaderTemplate </p>
<p style="text-indent: 2em">&#183;ItemTemplate </p>
<p style="text-indent: 2em">&#183;SeparatorTemplate </p>
<p style="text-indent: 2em">HederTemplate和FooterTemplate指定在真正的记录输出之前或之后应处理的HTML内容。AlternatingItemTemplate和ItemTemplate则指定实际的每条输出记录的HTML样式。如，你需要绑定一个包含雇员信息的DataSet到一个Repeater，字段名为EmployeeName。如果你想在页面中不排序地显示这些记录，你可以使用如下的语句： </p>
<p style="text-indent: 2em">&lt;asp:Repeater runat="server" id="rptEmployees"&gt; </p>
<p style="text-indent: 2em">&lt;HeaderTemplate&gt; </p>
<p style="text-indent: 2em">&lt;ul&gt; </p>
<p style="text-indent: 2em">&lt;/HeaderTemplate&gt; </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;li&gt;&lt;%# DataBinder.Eval(Container.DataItem, "EmployeeName") %&gt;&lt;/li&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;FooterTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/ul&gt; </p>
<p style="text-indent: 2em">&lt;/FooterTemplate&gt; </p>
<p style="text-indent: 2em">&lt;/asp:Repeater&gt; </p>
<p style="text-indent: 2em">Repeater类不是继承自WebControl类的，这一点与DataGrid和DataList不同。所以，Repeater没有样式方面的属性可供设定。也就是说，如果你想格式化输出Repeater的数据记录，你必须使用HTML标签来设定样式。如，在一例中，如果我们想将雇员名字显示成粗体，我们必须在ItemTemplate设置相应的HTML标签： </p>
<p style="text-indent: 2em">&lt;ItemTemplate&gt; </p>
<p style="text-indent: 2em">&lt;li&gt;&lt;b&gt;&lt;%# DataBinder.Eval(Container.DataItem, "EmployeeName")%&gt;&lt;/b&gt;&lt;/li&gt; </p>
<p style="text-indent: 2em">&lt;/ItemTemplate&gt; </p>
<p style="text-indent: 2em">而如果使用DataGrid或DataList，我们只通过设定ItemStyle-Font-Bold属性为True即可实现。 </p>
<p style="text-indent: 2em">Repeater在格式化设定上的欠缺，直接反映到开发时间的延长上来。对输出数据样式上的越多要求，就越会导致开发周期的延长。这些在模板中规定样式的HTML标签也越发得显得混乱，而且，在将来页面更改时会更加困难，特别是当一个新的开发人员接替工作时。而使用DataGrid或DataList你尽可以只设定样式属性，而不使用模板。而且，如果使用Visual Studio.Net或ASP.Net Web Matrix工作时，这些属性更可以被直接设定而无需编码。 </p>
<p style="text-indent: 2em">因为Repeater开发时间的延长，其在内建功能（分页、排序及编辑）上的支持也显得不足。因此在可用性方面，Repeater有着明显的缺陷。当然，&lt;b&gt;如果&lt;/b&gt;用户对于如何显示数据无所谓的话，这也算不了什么大问题。我之所以强调这个&#8220;如果&#8221;，是因为尽管用户有时在设计时并不要求能够分页、排序或编辑记录，但这样的要求往往会在开发后期，或在他们能看到显示出来的记录后产生。 </p>
<p style="text-indent: 2em">Repeater唯一优于DataGrid和DataList的特点是它的性能，尤其明显优于DataGrid。而比DataList略高一点点。 </p>
<p style="text-indent: 2em">〔结论〕 </p>
<p style="text-indent: 2em">在ASP.Net页面上显示数据时，多数的程序员会选择他们所熟悉的控件来使用，特别是DataGrid。然而，这样盲目的选择在没有&#8220;最好的通用控件&#8221;的情况下是不明智的。在选择控件来显示数据前，不妨问自己几个问题来帮助决策：是否允许用户对记录排序？是不是记录需要显示在非表格的情况下？页面是否会被高频度地访问，因此应多考虑性能？ </p>
<p style="text-indent: 2em">DataGrid提供了最多的功能，如允许访问者对记录编辑、排序或分页。同时它也是最容易使用的，甚至于简单到只需要将之添加到页面中而不必额外编写代码。不过这些易用性是以性能的损失为代价的。DataGrid在三种控件中是效率最低的，特别是在使用Web Form的情况下。 </p>
<p style="text-indent: 2em">通过使用模板，DataList提供了比DataGrid更加优秀的界面效果。不过这需要以牺牲一定的开发时间为代价。为了添加排序、分页和编辑功能，程序员不得不花费比使用DataGrid更多的精力来进行编码，虽然它的性能要优于DataGrid。 </p>
<p style="text-indent: 2em">最后，Repeater允许对数据记录作最大限度的HTML定制。通常，使用Repeater来显示数据记录比使用DataGrid和DataList要耗费更长的开发时间。另外，它不支持内建的编辑、排序和分页功能。所幸的是，Repeater在性能上要优于其它两种控件，特别是明显优于DataGrid。</p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140773.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>ASP.NET常用的三十三种实用代码</title><link>http://www.cnblogs.com/faner/archive/2008/04/07/1140765.html</link><dc:creator>faner</dc:creator><author>faner</author><pubDate>Mon, 07 Apr 2008 09:36:00 GMT</pubDate><guid>http://www.cnblogs.com/faner/archive/2008/04/07/1140765.html</guid><wfw:comment>http://www.cnblogs.com/faner/comments/1140765.html</wfw:comment><comments>http://www.cnblogs.com/faner/archive/2008/04/07/1140765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/faner/comments/commentRss/1140765.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/faner/services/trackbacks/1140765.html</trackback:ping><description><![CDATA[<div class="g_t_left c07 content" id="blogtext_fks!087065086082084074085095095095086095081065080094086">
<p style="text-indent: 2em"></p>
<p style="text-indent: 2em">1. 打开新的窗口并传送参数： </p>
<p style="text-indent: 2em">　　传送参数：</p>
<p style="text-indent: 2em">response.write("＜script＞window.open(&#8217;*.aspx?id="+this.DropDownList1.SelectIndex+"&amp;id1="+...+"&#8217;)＜/script＞")</p>
<p style="text-indent: 2em">　　接收参数：</p>
<p style="text-indent: 2em">string a = Request.QueryString("id");</p>
<p style="text-indent: 2em">string b = Request.QueryString("id1");</p>
<p style="text-indent: 2em">　　2.为按钮添加对话框</p>
<p style="text-indent: 2em">Button1.Attributes.Add("onclick","return confirm(&#8217;确认?&#8217;)");</p>
<p style="text-indent: 2em">button.attributes.add("onclick","if(confirm(&#8217;are you sure...?&#8217;)){return true;}else{return false;}")</p>
<p style="text-indent: 2em">　　3.删除表格选定记录</p>
<p style="text-indent: 2em">int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];</p>
<p style="text-indent: 2em">string deleteCmd = "DELETE from Employee where emp_id = " + intEmpID.ToString()</p>
<p style="text-indent: 2em">　　4.删除表格记录警告</p>
<p style="text-indent: 2em">private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　switch(e.Item.ItemType)</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　case ListItemType.Item :</p>
<p style="text-indent: 2em">　　case ListItemType.AlternatingItem :</p>
<p style="text-indent: 2em">　　case ListItemType.EditItem:</p>
<p style="text-indent: 2em">　　　TableCell myTableCell;</p>
<p style="text-indent: 2em">　　　myTableCell = e.Item.Cells[14];</p>
<p style="text-indent: 2em">　　　LinkButton myDeleteButton ;</p>
<p style="text-indent: 2em">　　　myDeleteButton = (LinkButton)myTableCell.Controls[0];</p>
<p style="text-indent: 2em">　　　myDeleteButton.Attributes.Add("onclick","return confirm(&#8217;您是否确定要删除这条信息&#8217;);");</p>
<p style="text-indent: 2em">　　　break;</p>
<p style="text-indent: 2em">　　default:</p>
<p style="text-indent: 2em">　　　break;</p>
<p style="text-indent: 2em">　}</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　5.点击表格行链接另一页</p>
<p style="text-indent: 2em">private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　//点击表格打开</p>
<p style="text-indent: 2em">　if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)</p>
<p style="text-indent: 2em">　　e.Item.Attributes.Add("onclick","window.open(&#8217;Default.aspx?id=" + e.Item.Cells[0].Text + "&#8217;);");</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　双击表格连接到另一页</p>
<p style="text-indent: 2em">　　在itemDataBind事件中</p>
<p style="text-indent: 2em">if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　string OrderItemID =e.item.cells[1].Text;</p>
<p style="text-indent: 2em">　...</p>
<p style="text-indent: 2em">　e.item.Attributes.Add("ondblclick", "location.href=&#8217;../ShippedGrid.aspx?id=" + OrderItemID + "&#8217;");</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　双击表格打开新一页</p>
<p style="text-indent: 2em">if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　string OrderItemID =e.item.cells[1].Text;</p>
<p style="text-indent: 2em">　...</p>
<p style="text-indent: 2em">　e.item.Attributes.Add("ondblclick", "open(&#8217;../ShippedGrid.aspx?id=" + OrderItemID + "&#8217;)");</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　★特别注意：【?id=】 处不能为 【?id =】</p>
<p style="text-indent: 2em">　　6.表格超连接列传递参数</p>
<p style="text-indent: 2em">＜asp:HyperLinkColumn Target="_blank" headertext="ID号" DataTextField="id" NavigateUrl="aaa.aspx?id=&#8217;</p>
<p style="text-indent: 2em">　＜%# DataBinder.Eval(Container.DataItem, "数据字段1")%＞&#8217; &amp; name=&#8217;＜%# DataBinder.Eval(Container.DataItem, "数据字段2")%＞&#8217; /＞</p>
<p style="text-indent: 2em">　　7.表格点击改变颜色</p>
<p style="text-indent: 2em">if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　e.Item.Attributes.Add("onclick","this.style.backgroundColor=&#8217;#99cc00&#8217;;</p>
<p style="text-indent: 2em">　　　 this.style.color=&#8217;buttontext&#8217;;this.style.cursor=&#8217;default&#8217;;");</p>
<p style="text-indent: 2em">} </p>
<p style="text-indent: 2em">　　写在DataGrid的_ItemDataBound里</p>
<p style="text-indent: 2em">if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">e.Item.Attributes.Add("onmouseover","this.style.backgroundColor=&#8217;#99cc00&#8217;;</p>
<p style="text-indent: 2em">　　　this.style.color=&#8217;buttontext&#8217;;this.style.cursor=&#8217;default&#8217;;");</p>
<p style="text-indent: 2em">e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=&#8217;&#8217;;this.style.color=&#8217;&#8217;;");</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　8.关于日期格式</p>
<p style="text-indent: 2em">　　日期格式设定</p>
<p style="text-indent: 2em">DataFormatString="{0:yyyy-MM-dd}"</p>
<p style="text-indent: 2em">　　我觉得应该在itembound事件中</p>
<p style="text-indent: 2em">e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))</p>
<p style="text-indent: 2em">　　9.获取错误信息并到指定页面</p>
<p style="text-indent: 2em">　　不要使用Response.Redirect,而应该使用Server.Transfer</p>
<p style="text-indent: 2em">　　e.g</p>
<p style="text-indent: 2em">// in global.asax</p>
<p style="text-indent: 2em">protected void Application_Error(Object sender, EventArgs e) {</p>
<p style="text-indent: 2em">if (Server.GetLastError() is HttpUnhandledException)</p>
<p style="text-indent: 2em">Server.Transfer("MyErrorPage.aspx");</p>
<p style="text-indent: 2em">//其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay了 :)</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　Redirect会导致post－back的产生从而丢失了错误信息，所以页面导向应该直接在<a href="http://www.chinahtml.com/systems/">服务器</a>端执行，这样就可以在错误处理页面得到出错信息并进行相应的处理 </p>
<p style="text-indent: 2em">　　10.清空Cookie</p>
<p style="text-indent: 2em">Cookie.Expires=[DateTime];</p>
<p style="text-indent: 2em">Response.Cookies("UserName").Expires = 0</p>
<p style="text-indent: 2em">　　11.自定义异常处理</p>
<p style="text-indent: 2em">//自定义异常处理类 </p>
<p style="text-indent: 2em">using System;</p>
<p style="text-indent: 2em">using System.Diagnostics;</p>
<p style="text-indent: 2em">namespace MyAppException</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　/// ＜summary＞</p>
<p style="text-indent: 2em">　/// 从系统异常类ApplicationException继承的应用程序异常处理类。</p>
<p style="text-indent: 2em">　/// 自动将异常内容记录到Windows NT/2000的应用程序日志</p>
<p style="text-indent: 2em">　/// ＜/summary＞</p>
<p style="text-indent: 2em">　public class AppException:System.ApplicationException</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　public AppException()</p>
<p style="text-indent: 2em">　　{</p>
<p style="text-indent: 2em">　　　if (ApplicationConfiguration.EventLogEnabled)LogEvent("出现一个未知错误。");</p>
<p style="text-indent: 2em">　　}</p>
<p style="text-indent: 2em">　public AppException(string message)</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　LogEvent(message);</p>
<p style="text-indent: 2em">　}</p>
<p style="text-indent: 2em">　public AppException(string message,Exception innerException)</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　LogEvent(message);</p>
<p style="text-indent: 2em">　　if (innerException != null)</p>
<p style="text-indent: 2em">　　{</p>
<p style="text-indent: 2em">　　　LogEvent(innerException.Message);</p>
<p style="text-indent: 2em">　　}</p>
<p style="text-indent: 2em">　}</p>
<p style="text-indent: 2em">　//日志记录类</p>
<p style="text-indent: 2em">　using System;</p>
<p style="text-indent: 2em">　using System.Configuration;</p>
<p style="text-indent: 2em">　using System.Diagnostics;</p>
<p style="text-indent: 2em">　using System.IO;</p>
<p style="text-indent: 2em">　using System.Text;</p>
<p style="text-indent: 2em">　using System.Threading;</p>
<p style="text-indent: 2em">　namespace MyEventLog</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　/// ＜summary＞</p>
<p style="text-indent: 2em">　　/// 事件日志记录类，提供事件日志记录支持 </p>
<p style="text-indent: 2em">　　/// ＜remarks＞</p>
<p style="text-indent: 2em">　　/// 定义了4个日志记录方法 (error, warning, info, trace) </p>
<p style="text-indent: 2em">　　/// ＜/remarks＞</p>
<p style="text-indent: 2em">　　/// ＜/summary＞</p>
<p style="text-indent: 2em">　　public class ApplicationLog</p>
<p style="text-indent: 2em">　　{</p>
<p style="text-indent: 2em">　　　/// ＜summary＞</p>
<p style="text-indent: 2em">　　　/// 将错误信息记录到Win2000/NT事件日志中</p>
<p style="text-indent: 2em">　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜/summary＞</p>
<p style="text-indent: 2em">　　　public static void WriteError(String message)</p>
<p style="text-indent: 2em">　　　{</p>
<p style="text-indent: 2em">　　　　WriteLog(TraceLevel.Error, message);</p>
<p style="text-indent: 2em">　　　}</p>
<p style="text-indent: 2em">　　　/// ＜summary＞</p>
<p style="text-indent: 2em">　　　/// 将警告信息记录到Win2000/NT事件日志中</p>
<p style="text-indent: 2em">　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜/summary＞</p>
<p style="text-indent: 2em">　　　public static void WriteWarning(String message)</p>
<p style="text-indent: 2em">　　　{</p>
<p style="text-indent: 2em">　　　　WriteLog(TraceLevel.Warning, message);　　</p>
<p style="text-indent: 2em">　　　}</p>
<p style="text-indent: 2em">　　　/// ＜summary＞</p>
<p style="text-indent: 2em">　　　/// 将提示信息记录到Win2000/NT事件日志中</p>
<p style="text-indent: 2em">　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜/summary＞</p>
<p style="text-indent: 2em">　　　public static void WriteInfo(String message)</p>
<p style="text-indent: 2em">　　　{</p>
<p style="text-indent: 2em">　　　　WriteLog(TraceLevel.Info, message);</p>
<p style="text-indent: 2em">　　　}</p>
<p style="text-indent: 2em">　　　/// ＜summary＞</p>
<p style="text-indent: 2em">　　　/// 将跟踪信息记录到Win2000/NT事件日志中</p>
<p style="text-indent: 2em">　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜/summary＞</p>
<p style="text-indent: 2em">　　　public static void WriteTrace(String message)</p>
<p style="text-indent: 2em">　　　{</p>
<p style="text-indent: 2em">　　　　WriteLog(TraceLevel.Verbose, message);</p>
<p style="text-indent: 2em">　　　}</p>
<p style="text-indent: 2em">　　　/// ＜summary＞</p>
<p style="text-indent: 2em">　　　/// 格式化记录到事件日志的文本信息格式</p>
<p style="text-indent: 2em">　　　/// ＜param name="ex"＞需要格式化的异常对象＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜param name="catchInfo"＞异常信息标题字符串.＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜retvalue＞</p>
<p style="text-indent: 2em">　　　/// ＜para＞格式后的异常信息字符串，包括异常内容和跟踪堆栈.＜/para＞</p>
<p style="text-indent: 2em">　　　/// ＜/retvalue＞</p>
<p style="text-indent: 2em">　　　/// ＜/summary＞</p>
<p style="text-indent: 2em">　　　public static String FormatException(Exception ex, String catchInfo)</p>
<p style="text-indent: 2em">　　　{</p>
<p style="text-indent: 2em">　　　　StringBuilder strBuilder = new StringBuilder();</p>
<p style="text-indent: 2em">　　　　if (catchInfo != String.Empty)</p>
<p style="text-indent: 2em">　　　　{</p>
<p style="text-indent: 2em">　　　　　strBuilder.Append(catchInfo).Append("\r\n");</p>
<p style="text-indent: 2em">　　　　}</p>
<p style="text-indent: 2em">　　　　strBuilder.Append(ex.Message).Append("\r\n").Append(ex.StackTrace);</p>
<p style="text-indent: 2em">　　　　return strBuilder.ToString();</p>
<p style="text-indent: 2em">　　　}</p>
<p style="text-indent: 2em">　　　/// ＜summary＞</p>
<p style="text-indent: 2em">　　　/// 实际事件日志写入方法</p>
<p style="text-indent: 2em">　　　/// ＜param name="level"＞要记录信息的级别（error,warning,info,trace).＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜param name="messageText"＞要记录的文本.＜/param＞</p>
<p style="text-indent: 2em">　　　/// ＜/summary＞</p>
<p style="text-indent: 2em">　　　private static void WriteLog(TraceLevel level, String messageText)</p>
<p style="text-indent: 2em">　　　{</p>
<p style="text-indent: 2em">　　　　try</p>
<p style="text-indent: 2em">　　　　{ </p>
<p style="text-indent: 2em">　　　　　EventLogEntryType LogEntryType;</p>
<p style="text-indent: 2em">　　　　　switch (level)</p>
<p style="text-indent: 2em">　　　　　{</p>
<p style="text-indent: 2em">　　　　　　case TraceLevel.Error:</p>
<p style="text-indent: 2em">　　　　　　　LogEntryType = EventLogEntryType.Error;</p>
<p style="text-indent: 2em">　　　　　　　break;</p>
<p style="text-indent: 2em">　　　　　　case TraceLevel.Warning:</p>
<p style="text-indent: 2em">　　　　　　　LogEntryType = EventLogEntryType.Warning;</p>
<p style="text-indent: 2em">　　　　　　　break;</p>
<p style="text-indent: 2em">　　　　　　case TraceLevel.Info:</p>
<p style="text-indent: 2em">　　　　　　　LogEntryType = EventLogEntryType.Information;</p>
<p style="text-indent: 2em">　　　　　　　break;</p>
<p style="text-indent: 2em">　　　　　　case TraceLevel.Verbose:</p>
<p style="text-indent: 2em">　　　　　　　LogEntryType = EventLogEntryType.SuccessAudit;</p>
<p style="text-indent: 2em">　　　　　　　break;</p>
<p style="text-indent: 2em">　　　　　　default:</p>
<p style="text-indent: 2em">　　　　　　　LogEntryType = EventLogEntryType.SuccessAudit;</p>
<p style="text-indent: 2em">　　　　　　　break;</p>
<p style="text-indent: 2em">　　　　　}</p>
<p style="text-indent: 2em">　　　　　EventLog eventLog = new EventLog("Application", ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );</p>
<p style="text-indent: 2em">　　　　　//写入事件日志</p>
<p style="text-indent: 2em">　　　　　eventLog.WriteEntry(messageText, LogEntryType);</p>
<p style="text-indent: 2em">　　　　}</p>
<p style="text-indent: 2em">　　　catch {} //忽略任何异常</p>
<p style="text-indent: 2em">　　} </p>
<p style="text-indent: 2em">　} //class ApplicationLog</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　12.Panel 横向滚动，纵向自动扩展</p>
<p style="text-indent: 2em">＜asp:panel style="overflow-x:scroll;overflow-y:auto;"＞＜/asp:panel＞</p>
<p style="text-indent: 2em">　　13.回车转换成Tab </p>
<p style="text-indent: 2em">＜script language="javascript" for="document" event="onkeydown"＞</p>
<p style="text-indent: 2em">　if(event.keyCode==13 &amp;&amp; event.srcElement.type!=&#8217;button&#8217; &amp;&amp; event.srcElement.type!=&#8217;submit&#8217; &amp;&amp; 　　　　event.srcElement.type!=&#8217;reset&#8217; &amp;&amp; event.srcElement.type!=&#8217;&#8217;&amp;&amp; event.srcElement.type!=&#8217;textarea&#8217;); </p>
<p style="text-indent: 2em">　　　event.keyCode=9;</p>
<p style="text-indent: 2em">＜/script＞</p>
<p style="text-indent: 2em">onkeydown="if(event.keyCode==13) event.keyCode=9"</p>
<p style="text-indent: 2em">　　14.DataGrid超级连接列</p>
<p style="text-indent: 2em">DataNavigateUrlField="字段名" DataNavigateUrlFormatString="http://xx/inc/delete.aspx?ID={0}"</p>
<p style="text-indent: 2em">　　15.DataGrid行随鼠标变色</p>
<p style="text-indent: 2em">private void DGzf_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　if (e.Item.ItemType!=ListItemType.Header)</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=\""+e.Item.Style["BACKGROUND-COLOR"]+"\"");</p>
<p style="text-indent: 2em">　　e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=\""+ "#EFF3F7"+"\"");</p>
<p style="text-indent: 2em">　}</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　16.模板列</p>
<p style="text-indent: 2em">＜ASP:TEMPLATECOLUMN visible="False" sortexpression="demo" headertext="ID"＞</p>
<p style="text-indent: 2em">＜ITEMTEMPLATE＞</p>
<p style="text-indent: 2em">＜ASP:LABEL text=&#8217;＜%# DataBinder.Eval(Container.DataItem, "ArticleID")%＞&#8217; runat="server" width="80%" id="lblColumn" /＞</p>
<p style="text-indent: 2em">＜/ITEMTEMPLATE＞</p>
<p style="text-indent: 2em">＜/ASP:TEMPLATECOLUMN＞</p>
<p style="text-indent: 2em">＜ASP:TEMPLATECOLUMN headertext="选中"＞</p>
<p style="text-indent: 2em">＜HEADERSTYLE wrap="False" horizontalalign="Center"＞＜/HEADERSTYLE＞</p>
<p style="text-indent: 2em">＜ITEMTEMPLATE＞</p>
<p style="text-indent: 2em">＜ASP:CHECKBOX id="chkExport" runat="server" /＞</p>
<p style="text-indent: 2em">＜/ITEMTEMPLATE＞</p>
<p style="text-indent: 2em">＜EDITITEMTEMPLATE＞</p>
<p style="text-indent: 2em">＜ASP:CHECKBOX id="chkExportON" runat="server" enabled="true" /＞</p>
<p style="text-indent: 2em">＜/EDITITEMTEMPLATE＞</p>
<p style="text-indent: 2em">＜/ASP:TEMPLATECOLUMN＞</p>
<p style="text-indent: 2em">　　后台代码</p>
<p style="text-indent: 2em">protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)</p>
<p style="text-indent: 2em">{</p>
<p style="text-indent: 2em">　//改变列的选定，实现全选或全不选。</p>
<p style="text-indent: 2em">　CheckBox chkExport ;</p>
<p style="text-indent: 2em">　if( CheckAll.Checked)</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　foreach(DataGridItem oDataGridItem in MyDataGrid.Items)</p>
<p style="text-indent: 2em">　　{</p>
<p style="text-indent: 2em">　　　chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");</p>
<p style="text-indent: 2em">　　　chkExport.Checked = true;</p>
<p style="text-indent: 2em">　　}</p>
<p style="text-indent: 2em">　}</p>
<p style="text-indent: 2em">　else</p>
<p style="text-indent: 2em">　{</p>
<p style="text-indent: 2em">　　foreach(DataGridItem oDataGridItem in MyDataGrid.Items)</p>
<p style="text-indent: 2em">　　{</p>
<p style="text-indent: 2em">　　　chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");</p>
<p style="text-indent: 2em">　　　chkExport.Checked = false;</p>
<p style="text-indent: 2em">　　}</p>
<p style="text-indent: 2em">　}</p>
<p style="text-indent: 2em">}</p>
<p style="text-indent: 2em">　　17.数字格式化</p>
<p style="text-indent: 2em">　　【＜%#Container.DataItem("price")%＞的结果是500.0000，怎样格式化为500.00?】</p>
<p style="text-indent: 2em">＜%#Container.DataItem("price","{0:￥#,##0.00}")%＞</p>
<p style="text-indent: 2em">int i=123456;</p>
<p style="text-indent: 2em">string s=i.ToString("###,###.00");</p>
<p style="text-indent: 2em"></p>
</div>
 <img src ="http://www.cnblogs.com/faner/aggbug/1140765.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43812/" target="_blank">[新闻]Google操作系统已开始内部测试？</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>