<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[AspDIY.Net - VB/ASP/.Net]]></title>
<link>http://www.aspdiy.net/</link>
<description><![CDATA[网站设计相关技术文档及心得！]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[983493#qq.com(不必)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>AspDIY.Net</title>
	<url>http://www.aspdiy.net/images/logos.gif</url>
	<link>http://www.aspdiy.net/</link>
	<description>AspDIY.Net</description>
</image>

			<item>
			<link>http://www.aspdiy.net/article/webcode/149.htm</link>
			<title><![CDATA[C# 的异步调用 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Sun,08 Aug 2010 22:23:15 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=149</guid>
		<description><![CDATA[使用异步调用，某些时候可以提高性能，比如说写日志，对数据库进行操作的时候就可以使用异步操作的方式。这种方式相当于多线程并发运行，所以性能会有所提升。我后面会发篇随笔来使用异步调用的方法写日志。<br/>/*<br/> * Authod: sandals<br/> * Date&nbsp;&nbsp;: 2010-08-07 20:30<br/> * Description: 异步调用的实现<br/> * */<br/><br/>using System;<br/>namespace Sandals.Demo.AsynchronousCall<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static class AsyncDemo<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>　　　　 //声明委托<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private delegate string AsyncMethodCalledEventHander(int duration, out int threadId);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //cr&#101;ate an instance of the delegate<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private static AsyncMethodCalledEventHander eventHandler = new AsyncMethodCalledEventHander(MethodForAsyncCall);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// The method to be executed asynchronously<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;duration&#34;&gt;sleep duration for thread&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;threadId&#34;&gt;current thread id&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;returns&gt;&lt;/returns&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private static string MethodForAsyncCall(int duration, out int threadId)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;MethodForAsyncCall begin execute... &#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Threading.Thread.Sleep(duration);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;threadId = System.Threading.Thread.CurrentThread.ManagedThreadId;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return String.Format(&#34;my execute time was {0} &#34;, duration);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// this method for executing asyc method<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;duration&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;returns&gt;&lt;/returns&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static IAsyncResult BeingRun(int duration)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int dumy;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IAsyncResult result = eventHandler.BeginInvoke(duration, out dumy, null, null);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return result;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// this methiod end the asyc method<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;threadId&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;ar&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;returns&gt;&lt;/returns&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static string EndRun(out int threadId, IAsyncResult ar)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (ar == null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new NullReferenceException(&#34;parameter ar can not be a null&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return eventHandler.EndInvoke(out threadId, ar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IAsyncResult result = AsyncDemo.BeingRun(10000);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;the thread {0} continue to execute&#34;, System.Threading.Thread.CurrentThread.ManagedThreadId);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;the thread {0} begin to sleep, date: {1}&#34;, System.Threading.Thread.CurrentThread.ManagedThreadId, DateTime.Now);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Threading.Thread.Sleep(3000);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;the thread {0} sleep end, date: {1}&#34;, System.Threading.Thread.CurrentThread.ManagedThreadId, DateTime.Now);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int threadId = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;call the mothod to end the ansychronous method&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;asynchronous method return value: {0}. thread id: {1}&#34;, AsyncDemo.EndRun(out threadId, result), threadId);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/148.htm</link>
			<title><![CDATA[SQL Server 不删除信息重新恢复自动编号列的序号的方法]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Thu,29 Jul 2010 11:55:08 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=148</guid>
		<description><![CDATA[<div>核对当前特定表的自动增量值，如果需要，可以纠正自动增量的值。</div>
<div><strong>语法：</strong></div>
<div><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong></div>
<div><span>&nbsp;&nbsp;&nbsp; ( 'table_name' </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ , { NORESEED </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | { RESEED [ , new_reseed_value ] } </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ] </span></div>
<div><span>&nbsp;&nbsp;&nbsp; )</span></div>
<div><strong>参数：</strong></div>
<div>&lsquo;tableName&rsquo;是检查当前自动增量的表名。此表名必需是符合的标示符。此表必需包含自动增量字段。</div>
<div>Noreseed,当前特定自动增量的值不被纠正。</div>
<div>RESEED,当前特定自动增量的值被纠正。</div>
<div>New_reseed_value,重新设置自动增量字段的起初值.</div>
<div><strong>注释</strong></div>
<div>如有必要，<strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> 会更正列的当前标识值。然而，如果标识列是使用 NOT FOR REPLICATION 子句（在 Create TABLE 或 Alter TABLE 语句中）创建的，则不更正当前标识值。<span style="font-size: 9pt">如果标识列上有主键或唯一键约束，无效标识信息可能会导致错误信息</span><span style="font-size: 9pt"> 2627</span><span style="font-size: 9pt">。对当前标识值所做的具体更正取决于参数规范。</span></div>
<h1 class="title_txt"><img height="15" alt="原创" width="15" border="0" src="http://blog.csdn.net/images/authorship.gif" />&nbsp; DBCC CheckIdent <cite class="fav_csdnstylebykimi"><a class="fav_csdnstylebykimi" title="收藏到我的网摘中，并分享给我的朋友" href="http://www.aspdiy.net/javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</a> </cite></h1>
<div class="blogstory" sizset="10" sizcache="0"><script type="text/javascript">
						document.body.oncopy = function () {
							if (window.clipboardData) {
								setTimeout(function () {
									var text = clipboardData.getData("text");
									if (text && text.length > 300) {
										text = text + "\r\n\n本文来自CSDN博客，转载请标明出处：" + location.href;
										clipboardData.setData("text", text);
									}
								}, 100);
							}
						}
					</script><script type="text/javascript">						function StorePage() { d = document; t = d.selection ? (d.selection.type != 'None' ? d.selection.createRange().text : '') : (d.getSelection ? d.getSelection() : ''); void (keyit = window.open('http://www.365key.com/storeit.aspx?t=' + escape(d.title) + '&u=' + escape(d.location.href) + '&c=' + escape(t), 'keyit', 'scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes')); keyit.focus(); }</script>
<div>核对当前特定表的自动增量值，如果需要，可以纠正自动增量的值。</div>
<div><strong>语法：</strong></div>
<div><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong></div>
<div><span>&nbsp;&nbsp;&nbsp; ( 'table_name' </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ , { NORESEED </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | { RESEED [ , new_reseed_value ] } </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </span></div>
<div><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ] </span></div>
<div><span>&nbsp;&nbsp;&nbsp; )</span></div>
<div><strong>参数：</strong></div>
<div>&lsquo;tableName&rsquo;是检查当前自动增量的表名。此表名必需是符合的标示符。此表必需包含自动增量字段。</div>
<div>Noreseed,当前特定自动增量的值不被纠正。</div>
<div>RESEED,当前特定自动增量的值被纠正。</div>
<div>New_reseed_value,重新设置自动增量字段的起初值.</div>
<div><strong>注释</strong></div>
<div>如有必要，<strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> 会更正列的当前标识值。然而，如果标识列是使用 NOT FOR REPLICATION 子句（在 Create TABLE 或 Alter TABLE 语句中）创建的，则不更正当前标识值。<span style="font-size: 9pt">如果标识列上有主键或唯一键约束，无效标识信息可能会导致错误信息</span><span style="font-size: 9pt"> 2627</span><span style="font-size: 9pt">。对当前标识值所做的具体更正取决于参数规范。</span></div>
<table cellpadding="0" width="587" border="1" style="width: 440.25pt">
    <tbody>
        <tr>
            <td valign="top" width="44%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 44%; padding-top: 1.5pt">
            <div><strong><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> statement</span></strong></div>
            </td>
            <td valign="top" width="56%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 56%; padding-top: 1.5pt">
            <div><strong><span style="font-size: 12pt">Identity correction(s) made</span></strong></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="44%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 44%; padding-top: 1.5pt">
            <div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> (<strong>'</strong>table_name<strong>'</strong>, NORESEED)</span></div>
            </td>
            <td valign="top" width="56%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 56%; padding-top: 1.5pt">
            <div><span style="font-size: 12pt">不重置当前标识值。<strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> 返回一个报表，它指明当前标识值和应有的标识值。</span></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="44%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 44%; padding-top: 1.5pt">
            <div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> (<strong>'</strong>table_name<strong>'</strong>) or <strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> (<strong>'</strong>table_name<strong>'</strong>, RESEED)</span></div>
            </td>
            <td valign="top" width="56%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 56%; padding-top: 1.5pt">
            <div><span style="font-size: 12pt">如果表的当前标识值小于列中存储的最大标识值，则使用标识列中的最大值对其进行重置。</span></div>
            </td>
        </tr>
        <tr>
            <td valign="top" width="44%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 44%; padding-top: 1.5pt">
            <div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> (<strong>'</strong>table_name<strong>'</strong>, RESEED, new_reseed_value)</span></div>
            </td>
            <td valign="top" width="56%" style="padding-right: 1.5pt; padding-left: 1.5pt; padding-bottom: 1.5pt; width: 56%; padding-top: 1.5pt">
            <div><span style="font-size: 12pt">当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表，则在执行 <strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> 后插入的第一行将使用 new_reseed_value 作为标识。否则，下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标识列中的最大值，以后引用该表时将产生 2627 号错误信息</span></div>
            </td>
        </tr>
    </tbody>
</table>
<div><strong><span style="font-size: 12pt">注：</span></strong></div>
<div><span style="font-size: 12pt">当前标识值可以大于表中的最大值。在此情况下，<strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> 并不自动重置当前标识值。若要在当前标识值大于列中的最大值时对当前标识值进行重置，请使用两种方法中的任意一种： </span></div>
<div><span style="font-size: 12pt">一、执行 <strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> ('table_name', NORESEED) 以确定列中的当前最大值，然后使用 <strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> ('table_name', RESEED, new_reseed_value) 语句将该值指定为 new_reseed_value。</span></div>
<div><span style="font-size: 12pt">二、将 new_reseed_value 置为很小值来执行 <strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> ('table_name', RESEED, new_reseed_value)，然后运行 <strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> ('table_name', RESEED)。</span></div>
</div>
<div><span style="font-size: 12pt">例如：</span></div>
<div><span style="font-size: 12pt">有表city</span></div>
<div><span style="font-size: 12pt">ID name&nbsp;&nbsp; type</span></div>
<div><span style="font-size: 12pt">1&nbsp;&nbsp; 1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a</span></div>
<div><span style="font-size: 12pt">2&nbsp;&nbsp; 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b</span></div>
<div><span style="font-size: 12pt">3&nbsp;&nbsp; 3&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c</span></div>
<div><span style="font-size: 12pt">4&nbsp;&nbsp; 1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a</span></div>
<div><span style="font-size: 12pt">5&nbsp;&nbsp; 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b</span></div>
<div><span style="font-size: 12pt">6&nbsp;&nbsp; 3&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c</span></div>
<div><span style="font-size: 12pt">7&nbsp;&nbsp; 1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a</span></div>
<div><span style="font-size: 12pt">8&nbsp;&nbsp; 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b</span></div>
<div><span style="font-size: 12pt">9&nbsp;&nbsp; 3&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c</span></div>
<div><span style="font-size: 12pt">10 1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a</span></div>
<div><span style="font-size: 12pt">11 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b</span></div>
<div><span style="font-size: 12pt">12 3&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c</span></div>
<div><span style="font-size: 12pt">此时当前identity最大值与ID最大值一样，都为12.</span></div>
<div><span style="font-size: 12pt">现在删除后面一部分数据，city变为</span></div>
<div><span style="font-size: 12pt">ID name&nbsp;&nbsp; type</span></div>
<div><span style="font-size: 12pt">1&nbsp;&nbsp; 1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a</span></div>
<div><span style="font-size: 12pt">2&nbsp;&nbsp; 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b</span></div>
<div><span style="font-size: 12pt">3&nbsp;&nbsp; 3&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c</span></div>
<div><span style="font-size: 12pt">4&nbsp;&nbsp; 1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a</span></div>
<div><span style="font-size: 12pt">5&nbsp;&nbsp; 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b</span></div>
<div><span style="font-size: 12pt">此时当前identity最大值与ID最大值I 一样，ID列最大值为5，identity还是为12.此时要调整过来，将identity值调整为5..具体操作如下：</span></div>
<div><span style="font-size: 12pt">运行<strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> ('city', RESEED, 1)，再运行<strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> ('table_name', RESEED)将其重值。</span></div>
<div><strong><span style="font-size: 12pt">结果集</span></strong></div>
<div><span style="font-size: 12pt">不管是否指定任何选项（针对于包含标识列的表；下例使用 pubs 数据库的 jobs 表），<strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> 返回以下结果集（值可能会有变化）：</span></div>
<div><span style="font-size: 12pt">Checking identity information: current identity value '14', current column value '14'.</span></div>
<div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> execution completed. If <strong style="color: black; background-color: #ffff66">DBCC</strong> printed error messages, contact your system administrator.</span></div>
<div><strong><span style="font-size: 12pt">权限</span></strong></div>
<div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> </span><span style="font-size: 12pt">权限默认授予表所有者、sysadmin 固定服务器角色和 db_owner 固定数据库角色的成员且不可转让。</span></div>
<div><strong><span style="font-size: 12pt">示例</span></strong></div>
<div><span style="font-size: 12pt">A. </span><span style="font-size: 12pt">如有必要，重置当前标识值</span></div>
<div><span style="font-size: 12pt">下例在必要的情况下重置 jobs 表的当前标识值。</span></div>
<div><span style="font-size: 12pt">USE pubs</span></div>
<div><span style="font-size: 12pt">GO</span></div>
<div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> (jobs)</span></div>
<div><span style="font-size: 12pt">GO</span></div>
<div><span style="font-size: 12pt">B. </span><span style="font-size: 12pt">报告当前标识值</span></div>
<div><span style="font-size: 12pt">下例报告 jobs 表中的当前标识值；如果该标识值不正确，并不对其进行更正。</span></div>
<div><span style="font-size: 12pt">USE pubs</span></div>
<div><span style="font-size: 12pt">GO</span></div>
<div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> (jobs, NORESEED)</span></div>
<div><span style="font-size: 12pt">GO</span></div>
<div><span style="font-size: 12pt">C. </span><span style="font-size: 12pt">强制当前标识值为 30</span></div>
<div><span style="font-size: 12pt">下例强制 jobs 表中的当前标识值为 30。</span></div>
<div><span style="font-size: 12pt">USE pubs</span></div>
<div><span style="font-size: 12pt">GO</span></div>
<div><span style="font-size: 12pt"><strong style="color: black; background-color: #ffff66">DBCC</strong> <strong style="color: black; background-color: #a0ffff">CHECKIDENT</strong> (jobs, RESEED, 30)</span></div>
<div>
<p><span style="font-size: 12pt">GO</span></p>
<p><span style="font-size: 12pt">----------------------------------------------------------------------------------------------------------------------------</span></p>
<span style="font-size: 12pt">
<p>如果是清空表中内容再重置标识列可以选择使用 Truncate Table 命令：</p>
<p><strong>Truncate Table</strong><span style="font-size: x-small"><font size="1"> <em>tablename</em></font></span></p>
</span></div>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/146.htm</link>
			<title><![CDATA[双目运算符 &#34;??&#34; ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Tue,27 Jul 2010 22:58:40 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=146</guid>
		<description><![CDATA[using System;&nbsp;&nbsp;<br/><br/>using System.Collections.Generic;&nbsp;&nbsp;<br/><br/>using System.Linq;&nbsp;&nbsp;<br/><br/>using System.Text;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp; <br/><br/>namespace ConsoleApplication1&nbsp;&nbsp;<br/><br/>{&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int? a;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a = null;//此时输出3&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//a = 6;//此时输出6&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int b = a ?? 3;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(b);&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br/><br/>} <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/145.htm</link>
			<title><![CDATA[类和接口的区别 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Mon,26 Jul 2010 19:29:12 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=145</guid>
		<description><![CDATA[.Net提供了接口，这个不同于Class或者Struct的类型定义。接口有些情况，看似和抽象类一样，因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然，接口和抽象类各有长处和缺陷，因此往往在应用当中，两者要结合来使用，从而互补长短。<br/><br/>接下来先说说抽象类和接口的区别。<br/><br/>区别一，两者表达的概念不一样。抽象类是一类事物的高度聚合，那么对于继承抽象类的子类来说，对于抽象类来说，属于“是”的关系；而接口是定义行为规范，因此对于实现接口的子类来说，相对于接口来说，是“行为需要按照接口来完成”。这些听起来有些虚，举个例子。例如，狗是对于所有狗类动物的统称，京哈是狗，牧羊犬是狗，那么狗的一般特性，都会在京哈，牧羊犬中找到，那么狗相对于京哈和牧羊犬来说，就属于这类事物的抽象类型；而对于“叫”这个动作来说，狗可以叫，鸟也可以叫。很明显，前者相当于所说的是抽象类，而后者指的就是接口。<br/><br/>区别二，抽象类在定义类型方法的时候，可以给出方法的实现部分，也可以不给出；而对于接口来说，其中所定义的方法都不能给出实现部分。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//抽象类 <br/>&nbsp;&nbsp;&nbsp;&nbsp;public abstract class AbsTest <br/>&nbsp;&nbsp;&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public virtual void Test() <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.WriteLine( &#34;Test&#34; ); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public abstract void NewTest(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;} <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;//接口 <br/>&nbsp;&nbsp;&nbsp;&nbsp;public interface ITest <br/>&nbsp;&nbsp;&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void Test(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void NewTest(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>区别三，继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法，可以不用重写，也就是说，可以延用抽象类的方法；而对于接口类所定义的方法或者属性来说，在继承类中必须要给出相应的方法和属性实现。<br/><br/>区别四，在抽象类中，新增一个方法的话，继承类中可以不用作任何处理；而对于接口来说，则需要修改继承类，提供新定义的方法。 <br/><br/><br/>--------------------------------------------------------------------------------<br/><br/>知道了两者的区别，再来说说，接口相对于抽象类的优势。 <br/> <br/><br/>好处一，接口不光可以作用于引用类型，也可以作用于值类型。而抽象类来说，只能作用于引用类型。<br/><br/>好处二，.Net的类型继承只能是单继承的，也就是说一个类型只能继承一个类型，而可以继承多个接口。其实，我对于这一点也比较赞同，多继承会使继承树变的混乱。<br/><br/>好处三，由于接口只是定义属性和方法，而与真正实现的类型没有太大的关系，因此接口可以被多个类型重用。相对于此，抽象类与继承类的关系更紧密些。<br/><br/>好处四，通过接口，可以减少类型暴露的属性和方法，从而便于保护类型对象。当一个实现接口的类型，可能包含其他方法或者属性，但是方法返回的时候，可以返回接口对象，这样调用端，只能通过接口提供的方法或者属性，访问对象的相关元素，这样可以有效保护对象的其他元素。<br/><br/>好处五，减少值类型的拆箱操作。对于Struct定义的值类型数据，当存放集合当中，每当取出来，都需要进行拆箱操作，这时采用Struct+Interface结合的方法，从而降低拆箱操作<br/><br/>参看如下文章提供的方法。<br/><br/>相对于抽象类来说，接口有这么多好处，但是接口有一个致命的弱点，就是接口所定义的方法和属性只能相对于继承它的类型（除非在继承类中修改借口定义的函数标示），那么对于多层继承关系的时候，光用接口就很难实现。因为如果让每个类型都去继承接口而进行实现的话，首先不说编写代码比较繁琐，有时候执行的结果还是错误，尤其当子类型对象隐式转换成基类对象进行访问的时候。<br/><br/><br/><br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/><br/>其实在继承中，到底使用接口还是抽象类。接口是固定的，约定俗成的，因此在继承类中必须提供接口相应的方法和属性的实现。而对于抽象类来说，抽象类的定义方法的实现，贯穿整个继承树，因此其中方法的实现或者重写都是不确定的。因此相对而言，抽象类比接口更灵活一些。<br/><br/> <br/><br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抽象类<br/> <br/>多继承&nbsp;&nbsp;&nbsp;&nbsp; 支持&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不支持<br/> <br/>类型限制&nbsp;&nbsp; 没有&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有，只能是引用类型<br/> <br/>方法实现&nbsp;&nbsp; 继承类型中必须给出方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实现继承类中可以不给出<br/> <br/>扩展性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比较麻烦&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相对比较灵活<br/> <br/>多层继承&nbsp;&nbsp;&nbsp;&nbsp;比较麻烦，需要借助虚函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比较灵活<br/> <br/><br/> <br/><br/>总的来说，接口和抽象类是.Net为了更好的实现类型之间继承关系而提供的语言手段，而且两者有些相辅相成的关系。因此我并不强调用什么而不用什么，那么问题的关键在于，如何把这两种手段合理的应用到程序当中，这才是至关重要。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/138.htm</link>
			<title><![CDATA[Asp.net开发必备51种代码]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Sat,06 Mar 2010 11:21:19 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=138</guid>
		<description><![CDATA[.//弹出对话框.点击转向指定页面 <br/>Response.Write(&#34;&lt;script&gt;window.alert(&#39;该会员没有提交申请,请重新提交！&#39;)&lt;/script&gt;&#34;);<br/>Response.Write(&#34;&lt;script&gt;window.location =&#39;<a href="http://www.cgy.cn/bizpulic/upmeb.aspx" target="_blank" rel="external">http://www.cgy.cn/bizpulic/upmeb.aspx</a>&#39;&lt;/script&gt;&#34;);<br/><br/>2.//弹出对话框<br/><br/>Response.Write(&#34;&lt;script language=&#39;javascript&#39;&gt;alert(&#39;产品添加成功！&#39;)&lt;/script &gt;&#34;);<br/><br/>3.//删除文件<br/><br/><br/>string filename =&#34;20059595157517.jpg&#34;;<br/>pub.util.Del&#101;teFile(HttpContext.Current.Server.MapPath(&#34;../file/&#34;)+filename);<br/><br/>4.//绑定下拉列表框datalist<br/><br/>System.Data.DataView dv=conn.Exec_ex(&#34;sel&#101;ct -1 as code,&#39;请选择经营模式&#39; as content from dealin union sel&#101;ct code,content from dealin&#34;);<br/>this.dealincode.DataSource=dv;<br/>this.dealincode.DataTextField=&#34;content&#34;;<br/>this.dealincode.DataValueField=&#34;code&#34;;&nbsp;&nbsp;&nbsp;&nbsp;<br/>this.dealincode.DataBind();<br/>this.dealincode.Items.FindByValue(dv[0][&#34;dealincode&#34;].ToString()).Sel&#101;cted=true;<br/><br/>5.//时间去秒显示<br/><br/>&lt;%# System.DateTime.Parse(DataBinder.Eval(Container.DataItem,&#34;begtime&#34;).ToString()).ToShortDateString()%&gt;<br/><br/>6.//标题带链接<br/><br/>&lt;%# &#34;&lt;a class=\&#34;12c\&#34; target=\&#34;_blank\&#34; href=\&#34;<a href="http://www.51aspx/CV/_%22+DataBinder.%20" target="_blank" rel="external">http://www.51aspx/CV/_%22+DataBinder.%20</a>(Container.DataItem,%22procode%22)+%22.html/&#34;&gt;&#34;+ DataBinder.Eval(Container.DataItem,&#34;proname&#34;)+&#34;&lt;/a&gt;&#34;%&gt;<br/><br/><br/>7.//修改转向<br/><br/>&lt;%# &#34;&lt;A href=\&#34;editpushpro.aspx?id=&#34;+DataBinder.Eval(Container.DataItem,&#34;code&#34;)+&#34;\&#34;&gt;&#34;+&#34;修改&#34;+&#34;&lt;/A&gt;&#34;%&gt;<br/><br/><br/>8.//弹出确定按钮<br/><br/>&lt;%# &#34;&lt;A id=\&#34;btnDel&#101;te\&#34; onclick=\&#34;return confirm(&#39;你是否确定删除这条记录吗?&#39;);\&#34; href=\&#34;pushproduct.aspx?dl=&#34;+DataBinder.Eval(Container.DataItem,&#34;code&#34;)+&#34;\&#34;&gt;&#34;+&#34;删除&#34;+&#34;&lt;/A&gt;&#34;%&gt;<br/><br/><br/>9.//输出数据格式化 &#34;{0:F2}&#34; 是格式 F2表示小数点后剩两位<br/><br/>&lt;%# DataBinder.Eval(Container, &#34;DataItem.PriceMoney&#34;,&#34;{0:F2}&#34;) %&gt;<br/><br/>10.//提取动态网页内容<br/><br/>Uri uri = new Uri(&#34;<a href="http://www.soAsp.net/" target="_blank" rel="external">http://www.soAsp.net/</a>&#34;);<br/>WebRequest req = WebRequest.Cr&#101;ate(uri);<br/>WebResponse resp = req.GetResponse();<br/>Stream str = resp.GetResponseStream();<br/>StreamReader sr = new StreamReader(str,System.Text.Encoding.Default);<br/>string t = sr.ReadToEnd();<br/>this.Response.Write(t.ToString());<br/><br/>11.//获取&#34; . &#34;后面的字符<br/><br/>i.ToString().Trim().Substring(i.ToString().Trim().LastIndexOf(&#34;.&#34;)+1).ToLower().Trim()<br/><br/>12. 打开新的窗口并传送参数： <br/>　　传送参数：<br/><br/>response.write(&#34;＜script＞window.open(’*.aspx?id=&#34;+this.Dro&#112;DownList1.Sel&#101;ctIndex+&#34;&amp;id1=&#34;+...+&#34;’)＜/script＞&#34;)<br/><br/>接收参数：<br/><br/>string a = Request.QueryString(&#34;id&#34;);<br/>string b = Request.QueryString(&#34;id1&#34;);<br/><br/>12.为按钮添加对话框<br/><br/>Button1.Attributes.Add(&#34;onclick&#34;,&#34;return confirm(’确认?’)&#34;);<br/>button.attributes.add(&#34;onclick&#34;,&#34;if(confirm(’are you sure...?’)){return true;}else{return false;}&#34;)<br/><br/>13.删除表格选定记录<br/><br/>int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];<br/>string del&#101;teCmd = &#34;Del&#101;te from Employee wh&#101;re emp_id = &#34; + intEmpID.ToString()<br/><br/>14.删除表格记录警告<br/><br/>private void DataGrid_ItemCr&#101;ated(Object sender,DataGridItemEventArgs e)<br/>{<br/>　　switch(e.Item.ItemType)<br/>　　{<br/>　　case ListItemType.Item :<br/>　　case ListItemType.Alt&#101;rnatingItem :<br/>　　case ListItemType.EditItem:<br/>　　TableCell myTableCell;<br/>　　myTableCell = e.Item.Cells[14];<br/>　　LinkButton myDel&#101;teButton ;<br/>　　myDel&#101;teButton = (LinkButton)myTableCell.Controls[0];<br/>　　myDel&#101;teButton.Attributes.Add(&#34;onclick&#34;,&#34;return confirm(’您是否确定要删除这条信息’);&#34;);<br/>　　break;<br/>　　default:<br/>　　break;<br/>　　}<br/>}<br/><br/>15.点击表格行链接另一页<br/><br/>private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)<br/>{<br/>　　//点击表格打开<br/>　　if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)<br/>　　e.Item.Attributes.Add(&#34;onclick&#34;,&#34;window.open(’Default.aspx?id=&#34; + e.Item.Cells[0].Text + &#34;’);&#34;);<br/>}<br/><br/>双击表格连接到另一页<br/>　　在itemDataBind事件中<br/><br/>if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)<br/>{<br/>　　string o&#114;derItemID =e.item.cells[1].Text;<br/>　　e.item.Attributes.Add(&#34;ondblclick&#34;, &#34;location.href=’../ShippedGrid.aspx?id=&#34; + o&#114;derItemID + &#34;’&#34;);<br/>}<br/><br/>双击表格打开新一页<br/><br/>if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)<br/>{<br/>　　string o&#114;derItemID =e.item.cells[1].Text;<br/>　　e.item.Attributes.Add(&#34;ondblclick&#34;, &#34;open(’../ShippedGrid.aspx?id=&#34; + o&#114;derItemID + &#34;’)&#34;);<br/>}<br/><br/><br/>16.表格超连接列传递参数<br/><br/>＜asp:HyperLinkColumn Target=&#34;_blank&#34; headertext=&#34;ID号&#34; DataTextField=&#34;id&#34; NavigateUrl=&#34;aaa.aspx?id=’<br/>　　＜%# DataBinder.Eval(Container.DataItem, &#34;数据字段1&#34;)%＞’ &amp; name=’＜%# DataBinder.Eval(Container.DataItem, &#34;数据字段2&#34;)%＞’ /＞<br/><br/>17.表格点击改变颜色<br/><br/>if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)<br/>{<br/>　　e.Item.Attributes.Add(&#34;onclick&#34;,&#34;this.style.backgroundColor=’#99cc00’;<br/>　　　 this.style.color=’buttontext’;this.style.cursor=’default’;&#34;);<br/>}<br/><br/>写在DataGrid的_ItemDataBound里<br/><br/>if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.Alt&#101;rnatingItem)<br/>{<br/>e.Item.Attributes.Add(&#34;onmouseover&#34;,&#34;this.style.backgroundColor=’#99cc00’;<br/>　　this.style.color=’buttontext’;this.style.cursor=’default’;&#34;);<br/>e.Item.Attributes.Add(&#34;onmouseout&#34;,&#34;this.style.backgroundColor=’’;this.style.color=’’;&#34;);<br/>}<br/><br/>18.关于日期格式<br/>　　日期格式设定<br/>DataFormatString=&#34;{0:yyyy-MM-dd}&#34;<br/>　　我觉得应该在itembound事件中<br/>e.items.cell[&#34;你的列&#34;].text=DateTime.Parse(e.items.cell[&#34;你的列&#34;].text.ToString(&#34;yyyy-MM-dd&#34;))<br/>19.获取错误信息并到指定页面<br/>不要使用Response.Redirect,而应该使用Server.Transfer<br/>　　e.g<br/><br/>// in global.asax<br/>protected void Application_Error(Object sender, EventArgs e) {<br/>if (Server.GetLastError() is HttpUnhandledException)<br/>Server.Transfer(&#34;MyErrorPage.aspx&#34;);<br/><br/><br/>//其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay了 :)<br/>}<br/>　　Redirect会导致post－back的产生从而丢失了错误信息，所以页面导向应该直接在服务器端执行，这样就可以在错误处理页面得到出错信息并进行相应的处理 <br/>20.清空Cookie<br/><br/>Cookie.Expires=[DateTime];<br/>Response.Cookies(&#34;UserName&#34;).Expires = 0<br/><br/>21.自定义异常处理<br/><br/>//自定义异常处理类 <br/>using System;<br/>using System.Diagnostics;<br/>namespace MyAppException<br/>{<br/>　　/// ＜summary＞<br/>　　/// 从系统异常类ApplicationException继承的应用程序异常处理类。<br/>　　/// 自动将异常内容记录到Windows NT/2000的应用程序日志<br/>　　/// ＜/summary＞<br/>　　public class AppException:System.ApplicationException<br/>　　{<br/>　　public AppException()<br/>　　{<br/>　　if (ApplicationConfiguration.EventLogEnabled)LogEvent(&#34;出现一个未知错误。&#34;);<br/>　　}<br/>　　public AppException(string message)<br/>　　{<br/>　　LogEvent(message);<br/>　　}<br/>　　public AppException(string message,Exception innerException)<br/>　　{<br/>　　LogEvent(message);<br/>　　if (innerException != null)<br/>　　{<br/>　　LogEvent(innerException.Message);<br/>　　}<br/>　　}<br/>　　//日志记录类<br/>　　using System;<br/>　　using System.Configuration;<br/>　　using System.Diagnostics;<br/>　　using System.IO;<br/>　　using System.Text;<br/>　　using System.Threading;<br/>　　namespace MyEventLog<br/>　　{<br/>　　/// ＜summary＞<br/>　　/// 事件日志记录类，提供事件日志记录支持 <br/>　　/// ＜remarks＞<br/>　　/// 定义了4个日志记录方法 (error, warning, info, trace) <br/>　　/// ＜/remarks＞<br/>　　/// ＜/summary＞<br/>　　public class ApplicationLog<br/>　　{<br/>　　/// ＜summary＞<br/>　　/// 将错误信息记录到Win2000/NT事件日志中<br/>　　/// ＜param name=&#34;message&#34;＞需要记录的文本信息＜/param＞<br/>　　/// ＜/summary＞<br/>　　public static void WriteError(String message)<br/>　　{<br/>　　WriteLog(TraceLevel.Error, message);<br/>　　}<br/>　　/// ＜summary＞<br/>　　/// 将警告信息记录到Win2000/NT事件日志中<br/>　　/// ＜param name=&#34;message&#34;＞需要记录的文本信息＜/param＞<br/>　　/// ＜/summary＞<br/>　　public static void WriteWarning(String message)<br/>　　{<br/>　　WriteLog(TraceLevel.Warning, message);　　<br/>　　}<br/>　　/// ＜summary＞<br/>　　/// 将提示信息记录到Win2000/NT事件日志中<br/>　　/// ＜param name=&#34;message&#34;＞需要记录的文本信息＜/param＞<br/>　　/// ＜/summary＞<br/>　　public static void WriteInfo(String message)<br/>　　{<br/>　　WriteLog(TraceLevel.Info, message);<br/>　　}<br/>　　/// ＜summary＞<br/>　　/// 将跟踪信息记录到Win2000/NT事件日志中<br/>　　/// ＜param name=&#34;message&#34;＞需要记录的文本信息＜/param＞<br/>　　/// ＜/summary＞<br/>　　public static void WriteTrace(String message)<br/>　　{<br/>　　WriteLog(TraceLevel.Verbose, message);<br/>　　}<br/>　　/// ＜summary＞<br/>　　/// 格式化记录到事件日志的文本信息格式<br/>　　/// ＜param name=&#34;ex&#34;＞需要格式化的异常对象＜/param＞<br/>　　/// ＜param name=&#34;catchInfo&#34;＞异常信息标题字符串.＜/param＞<br/>　　/// ＜retvalue＞<br/>　　/// ＜para＞格式后的异常信息字符串，包括异常内容和跟踪堆栈.＜/para＞<br/>　　/// ＜/retvalue＞<br/>　　/// ＜/summary＞<br/>　　public static String FormatException(Exception ex, String catchInfo)<br/>　　{<br/>　　StringBuilder strBuilder = new StringBuilder();<br/>　　if (catchInfo != String.Empty)<br/>　　{<br/>　　strBuilder.Append(catchInfo).Append(&#34;\r\n&#34;);<br/>　　}<br/>　　strBuilder.Append(ex.Message).Append(&#34;\r\n&#34;).Append(ex.StackTrace);<br/>　　return strBuilder.ToString();<br/>　　}<br/>　　/// ＜summary＞<br/>　　/// 实际事件日志写入方法<br/>　　/// ＜param name=&#34;level&#34;＞要记录信息的级别（error,warning,info,trace).＜/param＞<br/>　　/// ＜param name=&#34;messageText&#34;＞要记录的文本.＜/param＞<br/>　　/// ＜/summary＞<br/>　　private static void WriteLog(TraceLevel level, String messageText)<br/>　　{<br/>　　try<br/>　　{ <br/>　　EventLogEntryType LogEntryType;<br/>　　switch (level)<br/>　　{<br/>　　case TraceLevel.Error:<br/>　　LogEntryType = EventLogEntryType.Error;<br/>　　break;<br/>　　case TraceLevel.Warning:<br/>　　LogEntryType = EventLogEntryType.Warning;<br/>　　break;<br/>　　case TraceLevel.Info:<br/>　　LogEntryType = EventLogEntryType.Information;<br/>　　break;<br/>　　case TraceLevel.Verbose:<br/>　　LogEntryType = EventLogEntryType.SuccessAudit;<br/>　　break;<br/>　　default:<br/>　　LogEntryType = EventLogEntryType.SuccessAudit;<br/>　　break;<br/>　　}<br/>　　EventLog eventLog = new EventLog(&#34;Application&#34;, ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );<br/>　　//写入事件日志<br/>　　eventLog.WriteEntry(messageText, LogEntryType);<br/>　　}<br/>　　catch {} //忽略任何异常<br/>　　} <br/>　　} //class ApplicationLog<br/>}<br/><br/>22.Panel 横向滚动，纵向自动扩展<br/><br/>＜asp:panel style=&#34;overflow-x:scroll;overflow-y:auto;&#34;＞＜/asp:panel＞<br/><br/>23.回车转换成Tab <br/>(1)<br/><br/><br/>＜script language=&#34;javascript&#34; for=&#34;document&#34; event=&#34;onkeydown&#34;＞<br/>　　if(event.keyCode==13 &amp;&amp; event.srcElement.type!=’button’ &amp;&amp; event.srcElement.type!=’submit’ &amp;&amp; 　　　　event.srcElement.type!=’reset’ &amp;&amp; event.srcElement.type!=’’&amp;&amp; event.srcElement.type!=’textarea’); <br/>　　event.keyCode=9;<br/>＜/script＞<br/><br/>(2) //当在有keydown事件的控件上敲回车时，变为tab<br/><br/>public void Tab(System.Web .UI.WebControls .WebControl webcontrol) <br/>{ <br/>webcontrol.Attributes .Add (&#34;onkeydown&#34;, &#34;if(event.keyCode==13) event.keyCode=9&#34;); <br/>} <br/>24.DataGrid超级连接列<br/>DataNavigateUrlField=&#34;字段名&#34; DataNavigateUrlFormatString=&#34;<a href="http://xx/inc/del" target="_blank" rel="external">http://xx/inc/del</a>&#101;te.aspx?ID={0}&#34;<br/><br/>25.DataGrid行随鼠标变色<br/><br/>private void DGzf_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)<br/>{<br/>　　if (e.Item.ItemType!=ListItemType.Header)<br/>　　{<br/>　　e.Item.Attributes.Add( &#34;onmouseout&#34;,&#34;this.style.backgroundColor=\&#34;&#34;+e.Item.Style[&#34;BACKGROUND-COLOR&#34;]+&#34;\&#34;&#34;);<br/>　　e.Item.Attributes.Add( &#34;onmouseover&#34;,&#34;this.style.backgroundColor=\&#34;&#34;+ &#34;#EFF3F7&#34;+&#34;\&#34;&#34;);<br/>　　}<br/>}<br/><br/>26.模板列<br/><br/>＜ASP:TEMPLATECOLUMN visible=&#34;False&#34; sorte&#173;xpression=&#34;demo&#34; headertext=&#34;ID&#34;＞<br/>＜ITEMTEMPLATE＞<br/>＜ASP LABEL text=’＜%# DataBinder.Eval(Container.DataItem, &#34;ArticleID&#34;)%＞’ runat=&#34;server&#34; width=&#34;80%&#34; id=&#34;lblColumn&#34; /＞<br/>＜/ITEMTEMPLATE＞<br/>＜/ASP:TEMPLATECOLUMN＞<br/>＜ASP:TEMPLATECOLUMN headertext=&#34;选中&#34;＞<br/>＜HEADERSTYLE wrap=&#34;False&#34; horiz＞＜/HEADERSTYLE＞<br/>＜ITEMTEMPLATE＞<br/>＜ASP:CHECKBOX id=&#34;chkExport&#34; runat=&#34;server&#34; /＞<br/>＜/ITEMTEMPLATE＞<br/>＜EDITITEMTEMPLATE＞<br/>＜ASP:CHECKBOX id=&#34;chkExportON&#34; runat=&#34;server&#34; enabled=&#34;true&#34; /＞<br/>＜/EDITITEMTEMPLATE＞<br/>＜/ASP:TEMPLATECOLUMN＞<br/><br/>后台代码<br/><br/>protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)<br/>{<br/>　　//改变列的选定，实现全选或全不选。<br/>　　CheckBox chkExport ;<br/>　　if( CheckAll.Checked)<br/>　　{<br/>　　foreach(DataGridItem oDataGridItem in MyDataGrid.Items)<br/>　　{<br/>　　chkExport = (CheckBox)oDataGridItem.FindControl(&#34;chkExport&#34;);<br/>　　chkExport.Checked = true;<br/>　　}<br/>　　}<br/>　　else<br/>　　{<br/>　　foreach(DataGridItem oDataGridItem in MyDataGrid.Items)<br/>　　{<br/>　　chkExport = (CheckBox)oDataGridItem.FindControl(&#34;chkExport&#34;);<br/>　　chkExport.Checked = false;<br/>　　}<br/>　　}<br/>}<br/><br/>27.数字格式化<br/><br/><br/>【＜%#Container.DataItem(&#34;price&#34;)%＞的结果是500.0000，怎样格式化为500.00?】<br/>＜%#Container.DataItem(&#34;price&#34;,&#34;{0:￥#,##0.00}&#34;)%＞<br/>int i=123456;<br/>string s=i.ToString(&#34;###,###.00&#34;);<br/><br/>28.日期格式化<br/>　　【aspx页面内：＜%# DataBinder.Eval(Container.DataItem,&#34;Company_Ureg_Date&#34;)%＞<br/>　　显示为： 2004-8-11 19:44:28<br/>　　我只想要：2004-8-11 】<br/>＜%# DataBinder.Eval(Container.DataItem,&#34;Company_Ureg_Date&#34;,&#34;{0:yyyy-M-d}&#34;)%＞<br/>　　应该如何改？<br/>　　【格式化日期】<br/>　　取出来,一般是object((DateTime)objectFromDB).ToString(&#34;yyyy-MM-dd&#34;);<br/>　　【日期的验证表达式】<br/>　　A.以下正确的输入格式： [2004-2-29], [2004-02-29 10:29:39 pm], [2004/12/31] <br/>^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$<br/>　　B.以下正确的输入格式：[0001-12-31], [9999 09 30], [2002/03/03] <br/>^\d{4}[\-\/\s]?((((0[13578])|(1[02]))[\-\/\s]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[\-\/\s]?(([0-2][0-9])|(30)))|(02[\-\/\s]?[0-2][0-9]))$ <br/>　　【大小写转换】<br/>HttpUtility.HtmlEncode(string);<br/>HttpUtility.HtmlDecode(string)<br/>29.如何设定全局变量<br/>　　Global.asax中<br/>　　Application_Start()事件中<br/>　　添加Application[属性名] ＝ xxx;<br/>　　就是你的全局变量<br/>30.怎样作到HyperLinkColumn生成的连接后，点击连接，打开新窗口？<br/>　　HyperLinkColumn有个属性Target,将器值设置成&#34;_blank&#34;即可.(Target=&#34;_blank&#34;)<br/>　　【ASPNETMENU】点击菜单项弹出新窗口<br/>　　在你的menuData.xml文件的菜单项中加入URLTarget=&#34;_blank&#34;，如：<br/><br/>＜?xml version=&#34;1.0&#34; encoding=&#34;GB2312&#34;?＞<br/>＜MenuData ImagesBaseURL=&#34;images/&#34;＞ <br/>＜MenuGroup＞<br/>＜MenuItem Label=&#34;内参信息&#34; URL=&#34;Infomation.aspx&#34; ＞<br/>＜MenuGroup ID=&#34;BBC&#34;＞<br/>＜MenuItem Label=&#34;公告信息&#34; URL=&#34;Infomation.aspx&#34; URLTarget=&#34;_blank&#34; LeftIcon=&#34;file.gif&#34;/＞<br/>＜MenuItem Label=&#34;编制信息简报&#34; URL=&#34;NewInfo.aspx&#34; LeftIcon=&#34;file.gif&#34; /＞<br/><br/>最好将你的aspnetmenu升级到1.2版<br/>31.读取DataGrid控件TextBox值<br/><br/>foreach(DataGrid dgi in yourDataGrid.Items)<br/>{<br/>　　TextBox tb = (TextBox)dgi.FindControl(&#34;yourTextBoxId&#34;);<br/>　　tb.Text....<br/>}<br/><br/>33.在DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量) DG_DanJian(单价) DG_JinE(金额)分别在5.6.7列，要求在录入数量及单价的时候自动算出金额即:数量*单价=金额还要求录入时限制为 数值型.我如何用客户端脚本实现这个功能?<br/><br/>＜asp:TemplateColumn HeaderText=&#34;数量&#34;＞ <br/>＜ItemTemplate＞<br/>＜asp:TextBox id=&#34;ShuLiang&#34; runat=’server’ Text=’＜%# DataBinder.Eval(Container.DataItem,&#34;DG_ShuLiang&#34;)%＞’<br/><br/>/＞<br/>＜asp:RegularExpressionValidator id=&#34;revS&#34; runat=&#34;server&#34; C ErrorMessage=&#34;must be integer&#34; Validati /＞<br/>＜/ItemTemplate＞<br/>＜/asp:TemplateColumn＞<br/>＜asp:TemplateColumn HeaderText=&#34;单价&#34;＞ <br/>＜ItemTemplate＞<br/>＜asp:TextBox id=&#34;DanJian&#34; runat=’server’ Text=’＜%# DataBinder.Eval(Container.DataItem,&#34;DG_DanJian&#34;)%＞’<br/><br/>/＞<br/>＜asp:RegularExpressionValidator id=&#34;revS2&#34; runat=&#34;server&#34; C ErrorMessage=&#34;must be numeric&#34; Validati /＞<br/>＜/ItemTemplate＞<br/>＜/asp:TemplateColumn＞<br/>＜asp:TemplateColumn HeaderText=&#34;金额&#34;＞ <br/>＜ItemTemplate＞<br/>＜asp:TextBox id=&#34;JinE&#34; runat=’server’ Text=’＜%# DataBinder.Eval(Container.DataItem,&#34;DG_JinE&#34;)%＞’ /＞<br/>＜/ItemTemplate＞<br/>＜/asp:TemplateColumn＞＜script language=&#34;javascript&#34;＞<br/>function DoCal()<br/>{<br/>　　var e = event.srcElement;<br/>　　var row = e.parentNode.parentNode;<br/>　　var txts = row.all.tags(&#34;INPUT&#34;);<br/>　　if (!txts.length || txts.length ＜ 3)<br/>　　return;<br/>　　var q = txts[txts.length-3].value;<br/>　　var p = txts[txts.length-2].value;<br/>　　if (isNaN(q) || isNaN(p))<br/>　　return;<br/>　　q = parseInt(q);<br/>　　p = parseFloat(p);<br/>　　txts[txts.length-1].value = (q * p).toFixed(2);<br/>}<br/>＜/script＞<br/><br/>34.datagrid选定比较底下的行时，为什么总是刷新一下，然后就滚动到了最上面，刚才选定的行因屏幕的关系就看不到了。<br/>page_load <br/>page.smartNavigation=true<br/>35.在Datagrid中修改数据，当点击编辑键时，数据出现在文本框中，怎么控制文本框的大小 ?<br/><br/>private void DataGrid1_ItemDataBound(obj sender,DataGridItemEventArgs e)<br/>{<br/>　　for(int i=0;i＜e.Item.Cells.Count-1;i++)<br/>　　if(e.Item.ItemType==ListItemType.EditType)<br/>　　{<br/>　　e.Item.Cells.Attributes.Add(&#34;Width&#34;, &#34;80px&#34;)<br/>　　} <br/>}<br/><br/>36.对话框<br/><br/>private static string ScriptBegin = &#34;＜script language=\&#34;JavaScript\&#34;＞&#34;;<br/>private static string ScriptEnd = &#34;＜/script＞&#34;;<br/>public static void ConfirmMessageBox(string PageTarget,string Content)<br/>{<br/>　　string C+Content+&#34;’);&#34;+&#34;if(retValue){window.location=’&#34;+PageTarget+&#34;’;}&#34;;<br/>　　ConfirmContent=ScriptBegin + ConfirmContent + ScriptEnd;<br/>　　Page ParameterPage = (Page)System.Web.HttpContext.Current.Handler;<br/>　　ParameterPage.RegisterStartupScript(&#34;confirm&#34;,ConfirmContent);<br/>　　//Response.Write<br/><br/><br/>(strScript);<br/>}<br/>37. 将时间格式化：string aa=DateTime.Now.ToString(&#34;yyyy年MM月dd日&#34;); <br/>　　1.1 取当前年月日时分秒 <br/>currentTime=System.DateTime.Now;<br/>　　1.2 取当前年 <br/>int 年= DateTime.Now.Year;<br/>　　1.3 取当前月 <br/>int 月= DateTime.Now.Month; <br/>　　1.4 取当前日 <br/>int 日= DateTime.Now.Day; <br/>　　1.5 取当前时 <br/>int 时= DateTime.Now.Hour; <br/>　　1.6 取当前分 <br/>int 分= DateTime.Now.Minute; <br/>　　1.7 取当前秒 <br/>int 秒= DateTime.Now.Second; <br/>　　1.8 取当前毫秒 <br/>int 毫秒= DateTime.Now.Millisecond; <br/>38．自定义分页代码：<br/>　　先定义变量 ：<br/><br/> <br/><br/>public static int pageCount; //总页面数 <br/>public static int curPageIndex=1; //当前页面 <br/>　　下一页： <br/>if(DataGrid1.CurrentPageIndex ＜ (DataGrid1.PageCount - 1)) <br/>{ <br/>　　DataGrid1.CurrentPageIndex += 1; <br/>　　curPageIndex+=1; <br/>} <br/>bind(); // DataGrid1数据绑定函数 <br/>　　上一页： <br/>if(DataGrid1.CurrentPageIndex ＞0) <br/>{ <br/>　　DataGrid1.CurrentPageIndex += 1; <br/>　　curPageIndex-=1; <br/>} <br/>bind(); // DataGrid1数据绑定函数 <br/>　　直接页面跳转： <br/>int a=int.Parse(JumpPage.Value.Trim());//JumpPage.Value.Trim()为跳转值 <br/>if(a＜DataGrid1.PageCount) <br/>{ <br/>　　this.DataGrid1.CurrentPageIndex=a; <br/>} <br/>bind();<br/><br/>39．DataGrid使用： <br/>　　添加删除确认：<br/><br/> <br/><br/>private void DataGrid1_ItemCr&#101;ated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) <br/>{ <br/>　　foreach(DataGridItem di in this.DataGrid1.Items) <br/>　　{ <br/>　　if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.Alt&#101;rnatingItem) <br/>　　{ <br/>　　((LinkButton)di.Cells[8].Controls[0]).Attributes.Add(&#34;onclick&#34;,&#34;return confirm(’确认删除此项吗?’);&#34;); <br/>　　} <br/>　　} <br/>}<br/><br/>　　样式交替：<br/><br/>ListItemType itemType = e.Item.ItemType; <br/>if (itemType == ListItemType.Item ) <br/>{ <br/>　　e.Item.Attributes[&#34;onmouseout&#34;] = &#34;javascript:this.style.backgroundColor=’#FFFFFF’;&#34;; <br/>　　e.Item.Attributes[&#34;onmouseover&#34;] = &#34;javascript:this.style.backgroundColor=’#d9ece1’;cursor=’hand’;&#34; ; <br/>} <br/>else if( itemType == ListItemType.Alt&#101;rnatingItem) <br/>{ <br/>　　e.Item.Attributes[&#34;onmouseout&#34;] = &#34;javascript:this.style.backgroundColor=’#a0d7c4’;&#34;; <br/>　　e.Item.Attributes[&#34;onmouseover&#34;] = &#34;javascript:this.style.backgroundColor=’#d9ece1’;cursor=’hand’;&#34; ; <br/>}<br/><br/>　　添加一个编号列：<br/><br/>DataTable dt= c.ExecuteRtnTableForAccess(sqltxt); //执行sql返回的DataTable <br/>DataColumn dc=dt.Columns.Add(&#34;number&#34;,System.Type.GetType(&#34;System.String&#34;)); <br/>for(int i=0;i＜dt.Rows.Count;i++) <br/>{ <br/>　　dt.Rows[&#34;number&#34;]=(i+1).ToString(); <br/>} <br/>DataGrid1.DataSource=dt; <br/>DataGrid1.DataBind(); <br/>　　DataGrid1中添加一个CheckBox，页面中添加一个全选框 <br/>private void CheckBox2_CheckedChanged(object sender, System.EventArgs e) <br/>{ <br/>　　foreach(DataGridItem thisitem in DataGrid1.Items) <br/>　　{ <br/>　　((CheckBox)thisitem.Cells[0].Controls[1]).Checked=CheckBox2.Checked; <br/>　　} <br/>}<br/><br/><i>　　将当前页面中DataGrid1显示的数据全部删除 <br/></i><br/><br/>foreach(DataGridItem thisitem in DataGrid1.Items) <br/>{ <br/>　　if(((CheckBox)thisitem.Cells[0].Controls[1]).Checked) <br/>　　{ <br/>　　string strloginid= DataGrid1.DataKeys[thisitem.ItemIndex].ToString(); <br/>　　Del (strloginid); //删除函数 <br/>　　} <br/>}<br/><br/><br/><i>40．当文件在不同目录下，需要获取数据库连接字符串（如果连接字符串放在Web.config，然后在Global.asax中初始化） <br/>　　在Application_Start中添加以下代码： <br/></i><br/><br/>Application[&#34;ConnStr&#34;]=this.Context.Request.PhysicalApplicationPath+ConfigurationSettings.<br/>　　AppSettings[&#34;ConnStr&#34;].ToString();<br/><br/><i>3</i><br/><i>41． 变量.ToString() <br/>　　字符型转换 转为字符串 <br/></i><br/><br/>12345.ToString(&#34;n&#34;); //生成 12,345.00 <br/>12345.ToString(&#34;C&#34;); //生成 ￥12,345.00 <br/>12345.ToString(&#34;e&#34;); //生成 1.234500e+004 <br/>12345.ToString(&#34;f4&#34;); //生成 12345.0000 <br/>12345.ToString(&#34;x&#34;); //生成 3039 (16进制) <br/>12345.ToString(&#34;p&#34;); //生成 1,234,500.00%<br/><br/><i>42、变量.Substring(参数1,参数2); <br/>　　截取字串的一部分，参数1为左起始位数，参数2为截取几位。 如：string s1 = str.Substring(0,2); <br/>43．在自己的网站上登陆其他网站：(如果你的页面是通过嵌套方式的话，因为一个页面只能有一个FORM，这时可以导向另外一个页面再提交登陆信息) <br/></i><br/><br/>＜SCRIPT language=&#34;javascript&#34;＞ <br/>＜!-- <br/>　　function gook(pws) <br/>　　{ <br/>　　frm.submit(); <br/>　　} <br/>//--＞ <br/>＜/SCRIPT＞ ＜body leftMargin=&#34;0&#34; topMargin=&#34;0&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34;＞ <br/>＜form name=&#34;frm&#34; action=&#34; <a href="http://www.51aspx.com/" target="_blank" rel="external">http://www.51aspx.com/</a> &#34; method=&#34;post&#34;＞ <br/>＜tr＞ <br/>＜td＞<br/>＜input id=&#34;f_user&#34; type=&#34;hidden&#34; size=&#34;1&#34; name=&#34;f_user&#34; runat=&#34;server&#34;＞<br/>＜input id=&#34;f_domain&#34; type=&#34;hidden&#34; size=&#34;1&#34; name=&#34;f_domain&#34; runat=&#34;server&#34;＞<br/>＜input class=&#34;box&#34; id=&#34;f_pass&#34; type=&#34;hidden&#34; size=&#34;1&#34; name=&#34;pwshow&#34; runat=&#34;server&#34;＞ <br/>＜INPUT id=&#34;lng&#34; type=&#34;hidden&#34; maxLength=&#34;20&#34; size=&#34;1&#34; value=&#34;5&#34; name=&#34;lng&#34;＞<br/>＜INPUT id=&#34;tem&#34; type=&#34;hidden&#34; size=&#34;1&#34; value=&#34;2&#34; name=&#34;tem&#34;＞ <br/>＜/td＞ <br/>＜/tr＞ <br/>＜/form＞<br/><br/><i>　　文本框的名称必须是你要登陆的网页上的名称，如果源码不行可以用vsniffer 看看。 <br/>　　下面是获取用户输入的登陆信息的代码： <br/></i><br/><br/>string name; <br/>name=Request.QueryString[&#34;EmailName&#34;]; <br/>try <br/>{ <br/>　　int a=name.IndexOf(&#34;@&#34;,0,name.Length); <br/>　　f_user.Value=name.Substring(0,a); <br/>　　f_domain.Value=name.Substring(a+1,name.Length-(a+1)); <br/>　　f_pass.Value=Request.QueryString[&#34;Psw&#34;]; <br/>} <br/>catch <br/>{ <br/>　　Script.Alert(&#34;错误的邮箱!&#34;); <br/>　　Server.Transfer(&#34;index.aspx&#34;); <br/>}<br/><br/><br/><i>44.datagrid分页中如果删除时出现超出索引 <br/></i><br/><br/>public void jumppage(System.Web.UI.WebControls.DataGrid dg) <br/>{ <br/>int int_PageLess; //定义页面跳转的页数 <br/>//如果当前页是最后一页 <br/>if(dg.CurrentPageIndex == dg.PageCount-1) <br/>{ <br/>//如果就只有一页 <br/>if(dg.CurrentPageIndex == 0) <br/>{ <br/>//删除后页面停在当前页 <br/>dg.CurrentPageIndex = dg.PageCount-1; <br/>} <br/>else <br/>{ <br/>//如果最后一页只有一条记录 <br/>if((dg.Items.Count % dg.PageSize == 1) || dg.PageSize == 1) <br/>{ <br/>//把最后一页最后一条记录删除后，页面应跳转到前一页 <br/>int_PageLess = 2; <br/>} <br/>else //如果最后一页的记录数大于1，那么在最后一页删除记录后仍然停在当前页 <br/>{ <br/>int_PageLess = 1; <br/>} <br/>dg.CurrentPageIndex = dg.PageCount - int_PageLess; <br/>} <br/>} <br/>}<br/><br/><br/><i>45.警告窗口 <br/>/**//// &lt;summary&gt; <br/>/// 服务器端弹出alert对话框 <br/>/// &lt;/summary&gt; <br/>/// &lt;param name=&#34;str_Message&#34;&gt;提示信息,例子：&#34;不能为空!&#34;&lt;/param&gt; <br/>/// &lt;param name=&#34;page&#34;&gt;Page类&lt;/param&gt; <br/>public void Alert(string str_Message,Page page) <br/>{ <br/>page.RegisterStartupScript(&#34;&#34;,&#34;&lt;script&gt;alert(&#39;&#34;+str_Message+&#34;&#39;);&lt;/script&gt;&#34;); <br/>} <br/>36.重载此警告窗口,使某控件获得焦点<br/></i><br/><br/>/**//// &lt;summary&gt; <br/>/// 服务器端弹出alert对话框，并使控件获得焦点 <br/>/// &lt;/summary&gt; <br/>/// &lt;param name=&#34;str_Ctl_Name&#34;&gt;获得焦点控件Id值,比如：txt_Name&lt;/param&gt; <br/>/// &lt;param name=&#34;str_Message&#34;&gt;提示信息,例子：&#34;请输入您姓名!&#34;&lt;/param&gt; <br/>/// &lt;param name=&#34;page&#34;&gt;Page类&lt;/param&gt; <br/>public void Alert(string str_Ctl_Name,string str_Message,Page page) <br/>{ <br/>page.RegisterStartupScript(&#34;&#34;,&#34;&lt;script&gt;alert(&#39;&#34;+str_Message+&#34;&#39;);document.forms(0).&#34;+str_Ctl_Name+&#34;.focus(); document.forms(0).&#34;+str_Ctl_Name+&#34;.sel&#101;ct();&lt;/script&gt;&#34;); <br/>}<br/><br/><br/><i>47.确认对话框 <br/></i><br/><br/>/**//// &lt;summary&gt; <br/>/// 服务器端弹出confirm对话框 <br/>/// &lt;/summary&gt; <br/>/// &lt;param name=&#34;str_Message&#34;&gt;提示信息,例子：&#34;您是否确认删除!&#34;&lt;/param&gt; <br/>/// &lt;param name=&#34;btn&#34;&gt;隐藏Botton按钮Id值,比如：btn_Flow&lt;/param&gt; <br/>/// &lt;param name=&#34;page&#34;&gt;Page类&lt;/param&gt; <br/>public void Confirm(string str_Message,string btn,Page page) <br/>{ <br/>page.RegisterStartupScript(&#34;&#34;,&#34;&lt;script&gt; if (confirm(&#39;&#34;+str_Message+&#34;&#39;)==true){document.forms(0).&#34;+btn+&#34;.click();}&lt;/script&gt;&#34;); <br/>}<br/><br/><br/><i>48.重载确认对话框，点击确定触发一个隐藏按钮事件，点击取消触发一个隐藏按钮事件<br/></i><br/><br/>/**//// &lt;summary&gt; <br/>/// 服务器端弹出confirm对话框,询问用户准备转向那些操作，包括“确定”和“取消”时的操作 <br/>/// &lt;/summary&gt; <br/>/// &lt;param name=&#34;str_Message&#34;&gt;提示信息，比如：&#34;成功增加数据,单击\&#34;确定\&#34;按钮填写流程,单击\&#34;取消\&#34;修改数据&#34;&lt;/param&gt; <br/>/// &lt;param name=&#34;btn_Redirect_Flow&#34;&gt;&#34;确定&#34;按钮id值&lt;/param&gt; <br/>/// &lt;param name=&#34;btn_Redirect_Self&#34;&gt;&#34;取消&#34;按钮id值&lt;/param&gt; <br/>/// &lt;param name=&#34;page&#34;&gt;Page类&lt;/param&gt; <br/>public void Confirm(string str_Message,string btn_Redirect_Flow,string btn_Redirect_Self,Page page) <br/>{ <br/>page.RegisterStartupScript(&#34;&#34;,&#34;&lt;script&gt; if (confirm(&#39;&#34;+str_Message+&#34;&#39;)==true){document.forms(0).&#34;+btn_Redirect_Flow+&#34;.click();}else{document.forms(0).&#34;+btn_Redirect_Self+&#34;.click();}&lt;/script&gt;&#34;); <br/>}<br/><br/><i>49.获得焦点 <br/></i><br/><br/>/**//// &lt;summary&gt; <br/>/// 使控件获得焦点 <br/>/// &lt;/summary&gt; <br/>/// &lt;param name=&#34;str_Ctl_Name&#34;&gt;获得焦点控件Id值,比如：txt_Name&lt;/param&gt; <br/>/// &lt;param name=&#34;page&#34;&gt;Page类&lt;/param&gt; <br/>public void GetFocus(string str_Ctl_Name,Page page) <br/>{ <br/>page.RegisterStartupScript(&#34;&#34;,&#34;&lt;script&gt;document.forms(0).&#34;+str_Ctl_Name+&#34;.focus(); document.forms(0).&#34;+str_Ctl_Name+&#34;.sel&#101;ct();&lt;/script&gt;&#34;); <br/>}<br/><br/><br/><i>50.子窗体返回主窗体<br/>/</i><br/><br/>**////&lt;summary&gt; <br/>///名称：redirect <br/>///功能：子窗体返回主窗体 <br/>///参数：url <br/>///返回值：空 <br/>///&lt;/summary&gt; <br/>public void redirect(string url,Page page) <br/>{ <br/>if ( Session[&#34;IfDefault&#34;]!=(object)&#34;Default&#34;) <br/>{ <br/>page.RegisterStartupScript(&#34;&#34;,&#34;&lt;script&gt;window.top.document.location.href=&#39;&#34;+url+&#34;&#39;;&lt;/script&gt;&#34;); <br/>} <br/>}<br/><br/><br/><i><br/>51.判断是否为数字 <br/></i><br/><br/>/**//// &lt;summary&gt; <br/>/// 名称：IsNumberic <br/>/// 功能：判断输入的是否是数字 <br/>/// 参数：string oText：源文本 <br/>/// 返回值：　bool true:是　false:否 <br/>/// &lt;/summary&gt; <br/>public bool IsNumberic(string oText) <br/>{ <br/>try <br/>{ <br/>int var1=Convert.ToInt32 (oText); <br/>return true; <br/>} <br/>catch <br/>{ <br/>return false; <br/>} <br/>}<br/><br/><br/><i>获得字符串实际长度（包括中文字符） <br/></i><br/><br/>//获得字符串oString的实际长度 <br/>public int StringLength(string oString) <br/>{ <br/>byte[] strArray=System.Text .Encoding.Default .GetBytes (oString); <br/>int res=strArray.Length ; <br/>return res; <br/>}<br/><br/>0 0 0 <br/>(请您对文章做出评价)]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/137.htm</link>
			<title><![CDATA[超递增序列相关]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Tue,02 Mar 2010 18:09:34 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=137</guid>
		<description><![CDATA[using System;<br/><br/>namespace test<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int[] a = { 1, 2, 4, 8, 16, 32,64,128,256,512,1024,2048 };<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int b = 1279;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string f = getd(a, b);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(f);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static string getd(int[] a, int b)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string f = &#34;&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = a.Length; i &gt;= 0; i--)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int c = (int)Math.Pow(2, i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (c &lt;= b)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f += &#34;,&#34; + c;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b = b - c;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (b&lt;=0) break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return f;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/136.htm</link>
			<title><![CDATA[用params关键字增强代码的可读性 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Thu,28 Jan 2010 09:45:55 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=136</guid>
		<description><![CDATA[以前从来没有接触过params关键字，一直很好奇一些类型的string.Format(...)方法具有无限长的方法参数。有时候被逼用数组代替。发现params关键字有，编写不定长参数的方法很简单<br/><br/> <br/><br/>就是在原先需要不定长常数类型钱加上params就可以了。<br/><br/> <br/><br/>例如<br/><br/>public int Sum(params int[] narray)<br/><br/>{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int ret=0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach(int n in narray)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret+=n;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp; return ret;<br/><br/>}<br/><br/> <br/><br/>方法调用:<br/><br/>int xSum=Sum(1,2,3,4,5,6,7,8.....);<br/><br/> <br/><br/>优点,减少不必要的数组组建，内存开销，代码更直观。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/133.htm</link>
			<title><![CDATA[优化--亮剑.Net--笔记]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Tue,29 Dec 2009 10:00:15 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=133</guid>
		<description><![CDATA[C#编码优化<br/><br/>１.Foreach比for语句具有更好的执行效率。<br/><br/>２.避免用ArrayList,多使用List&lt;&gt;。避免装箱拆箱工作。<br/><br/>3.不要使用UpperCase和Lowercase转换字符串进行比较，用String.Compare代替，它可以忽略大小写进行比较。<br/><br/>4.定义空字符串变量时避免使用String abc=&#34;&#34;,应使用String abc=String.empty。<br/><br/>5.用StringBuilder代替使用字符串连接符&#34;+&#34;。<br/><br/>6.避免在循环里面定义变量，应在循环外定义变量，如有需要再在循环内改变变量值。<br/><br/>页面优化<br/><br/>1.尽量减少HTTP请求次数,合并JS和CSS文件。<br/><br/>2.减少请求文件的大小，减少请法度数据占用的网络带宽，可在JS和CSS文件中删除无用的字符，如，空格，换 行，注释等。<br/><br/>3.删除页面中可有可无的内容，多余的空格和缩进占大部分，道理和上一点一致。<br/><br/>4.保持同一URL的大小写一致性,Internet Explorer的缓冲区也是区分大小写的，所以要保持URL字符串大小写一致，否则，浏览器会以为是服务器不同的文件，导致重新多下载一份。谨记：同一位置的URL，在不同页面中请保持URL字符串的大小写一致性。<br/><br/>5.遵循XHTML规范，对每个标记应该有始有终，虽然没有结束也可以正常，但这无疑让浏览器花费时间来判断和计算此标记应在哪结束。<br/><br/>6.勿将整个页面放在Table里面，因为Table需要把表格里面的所有东西加载后才会显示，正确做法应将内容分割到多个Table里面。<br/><br/>7.做友情连接时，把对方的LOGO复制到自己的服务器上，页面显示的是自己服务器上的图片，这样速度就由自己的网站决定，不受友情网站的影响。（当然，用文字不用LOGO是最快的:))<br/><br/>ASP.NET开发性能优化<br/><br/>1.假如页面只是用来做为显示的，请尽量使用HTML静态页面。<br/><br/>2.避免没有必要的页面回抛操作，在页面的LOAD事件里面，请注意多使用Page.IsPostBack,可以避免无用的操作。<br/><br/>3.尽量在客户端做好数据验证，以少次请求次数，当然服务器的C#代码还是需要重新验证的，客户端的验证是为了用户的体验度，服务器端的验证是为了数据安全。还有，在提示用户输入的数据有错时，请一次性给出所有错误，不要每次只告诉一个错误，比如用户姓名和年龄都没有填写，请一次性告知，无需让用户错了一次之后再告诉用户年龄没有填写。<br/><br/>4.尽可能多使用HTML控件，减少使用服务器控件，服务器控件还需要内部转换成HTML控件。在页面显示数据时，如果只是简单的显示，没有操作的话，请按以下优先级考虑使用的控件 Repeater-&gt;-&gt;DataList-&gt;-&gt;DataGrid(GridView), DataGrid和GridVIew开销太大，如果不是为了修改，删除，添加，分页这些功能，请尽量不要使用。<br/><br/>5.关闭没有必要的ViewState,使用ViewState，每个对象都必须先序列化到ViewState，回传时还要进么反序列化，因此ViewState的代价是非常大的，特别是DataGrid和GridView。先按自己的需求选择开启或者关闭。<br/><br/>6.禁用调试模式，如果程序开启了调试模式，性能会受到非常大的影响，因为程序在调试模式下做了非常多的工作。可在配合文件中System.Web下面设置。<br/><br/> 缓存<br/><br/>1.最简单的页面缓存，即在页面添加,Duration=60，表示缓存时间为60秒，VaryByParam=none表示不希望任务参数来改变缓存内容，VaryByParam=&#34;a&#34;，表示根据a参数的改变来改变缓存的内容，如果要求根据任何参数的改变都需要改变内容，即VaryByParam=&#34;*&#34;，VaryByParam也可以等于控件ID名，根据控件的值来判断是否需要使用缓存。<br/><br/>2.局部缓存（自定义控件缓存),同样，只需要在用户控件的ascx里面添加此代码即可: 意思和在页面添加的是一样的.前面讲的是对页面的某一部分进行缓存，接下来要讲的是相反的，除了页面中某一部分使用缓存之外，其它都不使用缓存，即只缓存一小部分，在页面添加此代码&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>public static string getCurrentTime(HttpContext context){<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return DateTime.Now.ToString();<br/><br/>}<br/><br/>Substitution指定的方法必须符合以下3个条件，1.必须被定义为静态方法。2.必须接受HttpContext类型参数。3.必须返回String类型。<br/><br/>3.应用程序数据缓存，System.Web.Caching.Cache objCache = HttpRuntime.Cache;&nbsp;&nbsp;Cache类是一个字典，可以在其中存储任何内容，同时可以设置过期时间，可以达到很好的缓存效果。<br/><br/>4.数据库缓存依赖，根据数据库的数据改变而改变，数据库如果不改变则一直使用缓存数据。（PS:由于步骤太多，没有细说，可以baidu,google上找找)。<br/><br/>SQL命令优化<br/><br/>1.字段提取越少越好，尽量避免使用&#34;sel&#101;ct *&#34;。<br/><br/>2.多表查询时，使用某字段时，尽量使用表别名.字段名，这样可以明确告知这个字段是对应哪张表，不需要系统再去分析这个对段是在哪张表里面的。<br/><br/>3.尽量使用exists代码In,Not Exists代替Not In。<br/><br/>4.尽量不使用or关键字，这样会引起扫描全表，大大降低了查询的效率。<br/><br/>5.注意wh&#101;re子句的写法，必须考虑语句顺序，应该根据索引顺序，范围大小来确定条件子句的前后顺序，尽可能地让字段顺序与索引顺序一致，范围从大到小。<br/><br/>6.注意表之间连接的数据类型，避免不同类型数据之间的连接。<br/><br/>7.在编写SQL查询之前了解表的索引，有效利用索引能够避免不必要的全表扫描，应避免在wh&#101;re子句中使用 <br/>IS NULL , &lt;&gt; , != , !&gt;,!&lt;,NOT,NOT EXISTS,NOT IN, NOT LIKE等命令，它们会引起全表扫描，导致索引无效。<br/><br/>8.请不要在查询中使用排序功能(ORDER BY)，这样会降低查询的性能，可以将查询结果读至本地数据集中进行排序操作，那样通常会更快。<br/><br/>9.尽量避免使用游标，如果使用游标，尽量避免在游标中使用连表查询。<br/><br/>10.为您的表添加适当的索引，有时可以提高几十倍到几百倍的速度。<br/><br/>夜深，休息，再续....<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/131.htm</link>
			<title><![CDATA[url重写后页面回传问题 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Wed,23 Dec 2009 17:48:58 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=131</guid>
		<description><![CDATA[最近在做项目时遇到了URL重写后当页面回传时，url又刷回原值；这个问题困扰了很久，终于找到解决办法了。具体办法如下：可以通过自定义页面基类，重写默认的HtmlTextWriter方法，重写属性输出WriteAttribute(string name, string value, bool encode)方法，当输出action时，将action属性的值强制转换为当前虚URL(HttpContext.Current.Request.RawUrl，上面的~/showVisasAll_(\w+)\.aspx) <br/>最后就是让所有的页面都调用这个基类，修改一下Web.config就好了<br/>&lt;!-- AspDIY.Net.Controls.FormFix为页面基类--&gt;<br/><br/>&lt;system.web&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;pages pageBaseType=&#34;AspDIY.Net.Controls.FormFix&#34;/&gt;<br/>&lt;/system.web&gt;<br/>注:上面的方法在有.cs或有Inherits属性下无效,如有.cs或Inherits属.则必须修改为public partial class a : AspDIY.Net.Controls.FormFix<br/><br/>以下是源码<br/>using System;<br/>using System.IO;<br/>using System.Web;<br/>using System.Web.UI;<br/><br/>namespace AspDIY.Net.Controls<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// Url重写后Form标记修正<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public class FormFix : Page<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// Url重写后Form标记修正<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public FormFix()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Response.Write(&#34;AAA&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Response.End();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#region Render<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&nbsp;重写默认的HtmlTextWriter方法，修改form标记中的value属性，使其值为重写的URL而不是真实URL。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;writer&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected override void Render(HtmlTextWriter writer)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (writer is System.Web.UI.Html32TextWriter)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer = new FormFixerHtml32TextWriter(writer.InnerWriter);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer = new FormFixerHtmlTextWriter(writer.InnerWriter);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Render(writer);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#region FormFixers<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#region FormFixerHtml32TextWriter<br/>&nbsp;&nbsp;&nbsp;&nbsp;internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private string _url; // 假的URL<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal FormFixerHtml32TextWriter(TextWriter writer)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: base(writer)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_url = HttpContext.Current.Request.RawUrl;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;name&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;value&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;encode&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override void WriteAttribute(string name, string value, bool encode)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 如果当前输出的属性为form标记的action属性，则将其值替换为重写后的虚假URL<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (_url != null &amp;&amp; string.Compare(name, &#34;action&#34;, true) == 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = _url;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.WriteAttribute(name, value, encode);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#region FormFixerHtmlTextWriter<br/>&nbsp;&nbsp;&nbsp;&nbsp;internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private string _url;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal FormFixerHtmlTextWriter(TextWriter writer)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: base(writer)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_url = HttpContext.Current.Request.RawUrl;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;name&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;value&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;param name=&#34;encode&#34;&gt;&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override void WriteAttribute(string name, string value, bool encode)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (_url != null &amp;&amp; string.Compare(name, &#34;action&#34;, true) == 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = _url;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.WriteAttribute(name, value, encode);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/>}<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.aspdiy.net/article/webcode/130.htm</link>
			<title><![CDATA[［转］asp.net中对DataTable数据进行排序、检索、合并、分页、统计 ]]></title>
			<author>983493#qq.com(98tj)</author>
			<category><![CDATA[VB/ASP/.Net]]></category>
			<pubDate>Sat,19 Dec 2009 13:15:22 +0800</pubDate>
			<guid>http://www.aspdiy.net/default.asp?id=130</guid>
		<description><![CDATA[一、排序<br/><br/>1 获取DataTable的默认视图<br/><br/>2 对视图设置排序表达式<br/><br/>3 用排序后的视图导出的新DataTable替换就DataTable<br/><br/>(Asc升序可省略，多列排序用&#34;，&#34;隔开) <br/><br/>DataView dv = dt.DefaultView; <br/><br/>dv.Sort = &#34;id Asc,name Desc&#34;;<br/><br/>dt = dv.ToTable();<br/><br/>二、检索<br/><br/>1 设置查询字符串<br/><br/>2 使用Sel&#101;ct方法获取到所有满足条件的数据行对象数组<br/><br/>(多项查询条件间，用and隔开.模糊查询使用 like %) <br/><br/>DataRow[] matches = dt.Sel&#101;ct(&#34;(id&gt;=20) and (title=&#39;会议&#39;) and (yearstr like &#39;%2007%&#39;)&#34;);<br/><br/>string strName = matches[0][&#34;name&#34;].ToString(); <br/><br/>另外也可以用下面这种方法，将检索出来的新表绑定到GridView<br/><br/>DataView dv = dt.DefaultView;<br/><br/>dv.RowFilter = &#34;id&gt;=2&#34;;<br/><br/>this.GridView1.DataSource = dv;<br/><br/>this.GridView1.DataBind();<br/><br/>三、合并<br/><br/>假定有2个DataTable:Dt1 , Dt2。表结构一样<br/><br/>将Dt2接在Dt1后可采用此方法<br/><br/>dt1.Merge(dt2);<br/><br/>四、分页<br/><br/>PagedDataSource pds = new PagedDataSource();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pds.AllowPaging = true;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pds.DataSource = dvIntegralExpense;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pds.AllowPaging = true;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pds.PageSize = pager.PageSize;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pds.CurrentPageIndex = pager.PageIndex;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rptIntegralExpense.DataSource = pds;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rptIntegralExpense.DataBind();<br/><br/>五:<br/><br/>&nbsp;&nbsp;我们在使用Sql Server这些数据库时，可以轻松的通过Sum、Aver、Count等统计出相关结<br/><br/>果，那么，在已经把数据检索出来的DataSet（DataTable）中呢？特别是通过Web Service获得<br/><br/>了DataSet，这个时候，可是没有办法回头去修改Sel&#101;ct语句来获取这些统计了。那么在DataSe<br/><br/>t/DataTable中是否可以进行统计呢？答案是肯定的。<br/><br/>　　在MSDN中，有一篇MS推荐的统计方法，就是逐行对数据进行求和统计，这个方法，其实有<br/><br/>等于无（或许这个方法只是针对于DataGrid求取小计用吧），因为这个方法中采用的是DataGri<br/><br/>d的ItemDataBind事件来对数据进行累加，同我们手动写代码统计没有什么区别。<br/><br/>　　<br/><br/>　　本文介绍一个简单的方法，不需要逐条记录进行计算就可以轻松的获得DataTable中的记录<br/><br/>统计结果。这个简单的方法就是调用功能强大的DataTable的函数Compute。<br/><br/>　　<br/><br/>　　一、调用说明（仅以C#为例，下同）：<br/><br/>　　<br/><br/>　　public object Compute(string strExpression,string strFilter)<br/><br/>　　<br/><br/>　　参数：<br/><br/>　　<br/><br/>　　strExpression：要计算的表达式字符串，基本上类似于Sql Server中的统计表达式<br/><br/>　　<br/><br/>　　strFilter：统计的过滤字符串，只有满足这个过滤条件的记录才会被统计<br/><br/>　　<br/><br/>　　二、调用举例：<br/><br/>　　<br/><br/>　　以下示例，假设一个产品销售表table，描述某商场中各促销员销售的实际记录，包含字段<br/><br/>为：姓名(Name）、性别（Sex，0为女，1为男）、生日（Birthday）、销售产品的代码（ProID<br/><br/>）、销售的数量（Quantity）、销售价格（Price）。<br/><br/>　　<br/><br/>　　1.统计所有性别为女的销售员的数量：<br/><br/>　　table.Compute(&#34;Count(*)&#34;,&#34;Sex=0&#34;);<br/><br/>　　<br/><br/>　　2.统计所有销售员中年龄大于20岁的<br/><br/>　　table.Compute(&#34;Count(*)&#34;,&#34;Birthday&lt;&#39;&#34;+today);//today为今天的日期字符串<br/><br/>　　<br/><br/>　　3.统计销售产品的平均价格<br/><br/>　　table.Compute(&#34;Aver(Price)&#34;,&#34;true&#34;);<br/><br/>　　<br/><br/>　　4.统计产品代码为1的产品销售数量：<br/><br/>　　table.Compute(&#34;Sum(Quantity)&#34;,&#34;ProID=1&#34;);<br/><br/>　　<br/><br/>　　5.统计所有产品的销售总金额：<br/><br/>　　要统计总销售金额，由于table中不存在某项产品某个促销员销售的金额数据，但我们可以<br/><br/>通过Quantity*Price来获得。比如：<br/><br/>　　table.Compute(&#34;Sum(Quantity*Price)&#34;,&#34;true&#34;);<br/><br/>　　<br/><br/>　　这里一个问题是：DataTable的统计功能没有SqlServer强，这个统计是错误的，因为Compu<br/><br/>te的统计不具备Sum(Quantity*Price)这样数据的功能。那怎么办呢？<br/><br/>　　<br/><br/>　　对于这样复杂数据的统计，我们可以在DataTable中创建一个新的字段来完成，比如Amount<br/><br/>，同时设置该字段的Expression为Quantity*Price，这样我们就可以使用统计功能了：<br/><br/>　　table.Compute(&#34;Sum(Amount)&#34;,&#34;true&#34;);<br/><br/>]]></description>
		</item>
		
</channel>
</rss>
