﻿<?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>BlogJava-302班-随笔分类-.NET技巧特辑</title><link>http://www.blogjava.net/yank/category/21502.html</link><description>java突击队</description><language>zh-cn</language><lastBuildDate>Sat, 14 Dec 2013 16:30:49 GMT</lastBuildDate><pubDate>Sat, 14 Dec 2013 16:30:49 GMT</pubDate><ttl>60</ttl><item><title>新的博客地址，希望大家能够继续支持！</title><link>http://www.blogjava.net/yank/archive/2008/03/26/188777.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Wed, 26 Mar 2008 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2008/03/26/188777.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/188777.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2008/03/26/188777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/188777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/188777.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <a href="http://yank.cnblogs.com/">新的博客地址cnblogs,希望大家能够继续支持！</a>&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2008/03/26/188777.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/188777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2008-03-26 16:17 <a href="http://www.blogjava.net/yank/archive/2008/03/26/188777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅析.Net下的多线程编程</title><link>http://www.blogjava.net/yank/archive/2007/09/27/148886.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Thu, 27 Sep 2007 13:10:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/09/27/148886.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/148886.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/09/27/148886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/148886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/148886.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 多线程是许多操作系统所具有的特性，它能大大提高程序的运行效率，所以多线程编程技术为编程者广泛关注。目前微软的.Net战略正进一步推进，各种相关的技术正为广大编程者所接受，同样在.Net中多线程编程技术具有相当重要的地位。本文我就向大家介绍在.Net下进行多线程编程的基本方法和步骤。&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/09/27/148886.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/148886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-09-27 21:10 <a href="http://www.blogjava.net/yank/archive/2007/09/27/148886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅析.Net下的多线程编程</title><link>http://www.blogjava.net/yank/archive/2007/09/27/148884.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Thu, 27 Sep 2007 13:09:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/09/27/148884.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/148884.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/09/27/148884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/148884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/148884.html</trackback:ping><description><![CDATA[多线程是许多操作系统所具有的特性，它能大大提高程序的运行效率，所以多线程编程技术为编程者广泛关注。目前微软的.Net战略正进一步推进，各种相关的技术正为广大编程者所接受，同样在.Net中多线程编程技术具有相当重要的地位。本文我就向大家介绍在.Net下进行多线程编程的基本方法和步骤。&nbsp; <br />
<br />
&nbsp;&nbsp;开始新线程&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;在.Net下创建一个新线程是非常容易的，你可以通过以下的语句来开始一个新的线程：&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;Thread&nbsp;thread&nbsp;=&nbsp;new&nbsp;Thread&nbsp;(new&nbsp;ThreadStart&nbsp;(ThreadFunc));&nbsp;&nbsp; <br />
&nbsp;&nbsp;thread.Start&nbsp;();&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;第一条语句创建一个新的Thread对象，并指明了一个该线程的方法。当新的线程开始时，该方法也就被调用执行了。该线程对象通过一个System..Threading.ThreadStart类的一个实例以类型安全的方法来调用它要调用的线程方法。&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;第二条语句正式开始该新线程，一旦方法Start（）被调用，该线程就保持在一个"alive"的状态下了，你可以通过读取它的IsAlive属性来判断它是否处于"alive"状态。下面的语句显示了如果一个线程处于"alive"状态下就将该线程挂起的方法：&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;if&nbsp;(thread.IsAlive)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;thread.Suspend&nbsp;();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
<br />
&nbsp;&nbsp;不过请注意，线程对象的Start（）方法只是启动了该线程，而并不保证其线程方法ThreadFunc（）能立即得到执行。它只是保证该线程对象能被分配到CPU时间，而实际的执行还要由操作系统根据处理器时间来决定。&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;一个线程的方法不包含任何参数，同时也不返回任何值。它的命名规则和一般函数的命名规则相同。它既可以是静态的（static）也可以是非静态的（nonstatic）。当它执行完毕后，相应的线程也就结束了，其线程对象的IsAlive属性也就被置为false了。下面是一个线程方法的实例：&nbsp; <br />
<br />
&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;ThreadFunc()&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;10;&nbsp;i++)&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;Console.WriteLine("ThreadFunc&nbsp;{0}",&nbsp;i);&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;前台线程和后台线程&nbsp; <br />
<br />
&nbsp;&nbsp;.Net的公用语言运行时（Common&nbsp;Language&nbsp;Runtime，CLR）能区分两种不同类型的线程：前台线程和后台线程。这两者的区别就是：应用程序必须运行完所有的前台线程才可以退出；而对于后台线程，应用程序则可以不考虑其是否已经运行完毕而直接退出，所有的后台线程在应用程序退出时都会自动结束。&nbsp; <br />
<br />
&nbsp;&nbsp;一个线程是前台线程还是后台线程可由它的IsBackground属性来决定。这个属性是可读又可写的。它的默认值为false，即意味着一个线程默认为前台线程。我们可以将它的IsBackground属性设置为true，从而使之成为一个后台线程。&nbsp; <br />
<br />
&nbsp;&nbsp;下面的例子是一个控制台程序，程序一开始便启动了10个线程，每个线程运行5秒钟时间。由于线程的IsBackground属性默认为false，即它们都是前台线程，所以尽管程序的主线程很快就运行结束了，但程序要到所有已启动的线程都运行完毕才会结束。示例代码如下：&nbsp; <br />
<br />
&nbsp;&nbsp;using&nbsp;System;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;using&nbsp;System.Threading;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;class&nbsp;MyApp&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;Main&nbsp;()&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;10;&nbsp;i++)&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;Thread&nbsp;thread&nbsp;=&nbsp;new&nbsp;Thread&nbsp;(new&nbsp;ThreadStart&nbsp;(ThreadFunc));&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;thread.Start&nbsp;();&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;private&nbsp;static&nbsp;void&nbsp;ThreadFunc&nbsp;()&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;DateTime&nbsp;start&nbsp;=&nbsp;DateTime.Now;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;while&nbsp;((DateTime.Now&nbsp;-&nbsp;start).Seconds&nbsp;&lt;5)&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp;<br />
<br />
接下来我们对上面的代码进行略微修改，将每个线程的IsBackground属性都设置为true，则每个线程都是后台线程了。那么只要程序的主线程结束了，整个程序也就结束了。示例代码如下：&nbsp; <br />
&nbsp;&nbsp;using&nbsp;System;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;using&nbsp;System.Threading;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;class&nbsp;MyApp&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;Main&nbsp;()&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;for&nbsp;(int&nbsp;i=0;&nbsp;i&lt;10;&nbsp;i++)&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;Thread&nbsp;thread&nbsp;=&nbsp;new&nbsp;Thread&nbsp;(new&nbsp;ThreadStart&nbsp;(ThreadFunc));&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;thread.IsBackground&nbsp;=&nbsp;true;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;thread.Start&nbsp;();&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;private&nbsp;static&nbsp;void&nbsp;ThreadFunc&nbsp;()&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;DateTime&nbsp;start&nbsp;=&nbsp;DateTime.Now;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;while&nbsp;((DateTime.Now&nbsp;-&nbsp;start).Seconds&nbsp;&lt;5)&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
<br />
&nbsp;&nbsp;既然前台线程和后台线程有这种差别，那么我们怎么知道该如何设置一个线程的IsBackground属性呢？下面是一些基本的原则：对于一些在后台运行的线程，当程序结束时这些线程没有必要继续运行了，那么这些线程就应该设置为后台线程。比如一个程序启动了一个进行大量运算的线程，可是只要程序一旦结束，那个线程就失去了继续存在的意义，那么那个线程就该是作为后台线程的。而对于一些服务于用户界面的线程往往是要设置为前台线程的，因为即使程序的主线程结束了，其他的用户界面的线程很可能要继续存在来显示相关的信息，所以不能立即终止它们。这里我只是给出了一些原则，具体到实际的运用往往需要编程者的进一步仔细斟酌。&nbsp; <br />
<br />
&nbsp;&nbsp;线程优先级&nbsp; <br />
<br />
&nbsp;&nbsp;一旦一个线程开始运行，线程调度程序就可以控制其所获得的CPU时间。如果一个托管的应用程序运行在Windows机器上，则线程调度程序是由Windows所提供的。在其他的平台上，线程调度程序可能是操作系统的一部分，也自然可能是.Net框架的一部分。不过我们这里不必考虑线程的调度程序是如何产生的，我们只要知道通过设置线程的优先级我们就可以使该线程获得不同的CPU时间。&nbsp; <br />
<br />
&nbsp;&nbsp;线程的优先级是由Thread.Priority属性控制的，其值包含：ThreadPriority.Highest、ThreadPriority.AboveNormal、ThreadPriority.Normal、ThreadPriority.BelowNormal和ThreadPriority.Lowest。从它们的名称上我们自然可以知道它们的优先程度，所以这里就不多作介绍了。&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;线程的默认优先级为ThreadPriority.Normal。理论上，具有相同优先级的线程会获得相同的CPU时间，不过在实际执行时，消息队列中的线程阻塞或是操作系统的优先级的提高等原因会导致具有相同优先级的线程会获得不同的CPU时间。不过从总体上来考虑仍可以忽略这种差异。你可以通过以下的方法来改变一个线程的优先级。&nbsp; <br />
<br />
&nbsp;&nbsp;thread.Priority&nbsp;=&nbsp;ThreadPriority.AboveNormal;&nbsp; <br />
<br />
&nbsp;&nbsp;或是：&nbsp; <br />
<br />
&nbsp;&nbsp;thread.Priority&nbsp;=&nbsp;ThreadPriority.BelowNormal;&nbsp; <br />
<br />
&nbsp;&nbsp;通过上面的第一句语句你可以提高一个线程的优先级，那么该线程就会相应的获得更多的CPU时间；通过第二句语句你便降低了那个线程的优先级，于是它就会被分配到比原来少的CPU时间了。你可以在一个线程开始运行前或是在它的运行过程中的任何时候改变它的优先级。理论上你还可以任意的设置每个线程的优先级，不过一个优先级过高的线程往往会影响到其他线程的运行，甚至影响到其他程序的运行，所以最好不要随意的设置线程的优先级。&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;挂起线程和重新开始线程&nbsp; <br />
<br />
&nbsp;&nbsp;Thread类分别提供了两个方法来挂起线程和重新开始线程，也就是Thread.Suspend能暂停一个正在运行的线程，而Thread.Resume又能让那个线程继续运行。不像Windows内核，.Net框架是不记录线程的挂起次数的，所以不管你挂起线程过几次，只要一次调用Thread.Resume就可以让挂起的线程重新开始运行。&nbsp; <br />
<br />
&nbsp;&nbsp;Thread类还提供了一个静态的Thread.Sleep方法，它能使一个线程自动的挂起一定的时间，然后自动的重新开始。一个线程能在它自身内部调用Thread.Sleep方法，也能在自身内部调用Thread.Suspend方法，可是一定要别的线程来调用它的Thread.Resume方法才可以重新开始。这一点是不是很容易想通的啊？下面的例子显示了如何运用Thread.Sleep方法：&nbsp; <br />
<br />
&nbsp;&nbsp;while&nbsp;(ContinueDrawing)&nbsp;{&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;DrawNextSlide&nbsp;();&nbsp;&nbsp; <br />
&nbsp;&nbsp;Thread.Sleep&nbsp;(5000);&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp; <br />
<br />
&nbsp;&nbsp;终止线程&nbsp; <br />
&nbsp;&nbsp;&nbsp;在托管的代码中，你可以通过以下的语句在一个线程中将另一个线程终止掉：&nbsp; <br />
&nbsp;&nbsp;thread.Abort&nbsp;();&nbsp; <br />
&nbsp;&nbsp;下面我们来解释一下Abort（）方法是如何工作的。因为公用语言运行时管理了所有的托管的线程，同样它能在每个线程内抛出异常。Abort（）方法能在目标线程中抛出一个ThreadAbortException异常从而导致目标线程的终止。不过Abort（）方法被调用后，目标线程可能并不是马上就终止了。因为只要目标线程正在调用非托管的代码而且还没有返回的话，该线程就不会立即终止。而如果目标线程在调用非托管的代码而且陷入了一个死循环的话，该目标线程就根本不会终止。不过这种情况只是一些特例，更多的情况是目标线程在调用托管的代码，一旦Abort（）被调用那么该线程就立即终止了。&nbsp; <br />
<br />
&nbsp;&nbsp;在实际应用中，一个线程终止了另一个线程，不过往往要等那个线程完全终止了它才可以继续运行，这样的话我们就应该用到它的Join（）方法。示例代码如下：&nbsp; <br />
<br />
&nbsp;&nbsp;thread.Abort&nbsp;();&nbsp;//&nbsp;要求终止另一个线程&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;thread.Join&nbsp;();&nbsp;//&nbsp;只到另一个线程完全终止了，它才继续运行&nbsp; <br />
<br />
&nbsp;&nbsp;但是如果另一个线程一直不能终止的话（原因如前所述），我们就需要给Join（）方法设置一个时间限制，方法如下：&nbsp; <br />
<br />
&nbsp;&nbsp;thread.Join&nbsp;(5000);&nbsp;//&nbsp;暂停5秒&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;这样，在5秒后，不管那个线程有没有完全终止，本线程就强行运行了。该方法还返回一个布尔型的值，如果是true则表明那个线程已经完全终止了，而如果是false的话，则表明已经超过了时间限制了。&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;时钟线程&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;.Net框架中的Timer类可以让你使用时钟线程，它是包含在System.Threading名字空间中的，它的作用就是在一定的时间间隔后调用一个线程的方法。下面我给大家展示一个具体的实例，该实例以1秒为时间间隔，在控制台中输出不同的字符串，代码如下：&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;using&nbsp;System;&nbsp;&nbsp; <br />
&nbsp;&nbsp;using&nbsp;System.Threading;&nbsp;&nbsp; <br />
&nbsp;&nbsp;class&nbsp;MyApp&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp; <br />
&nbsp;&nbsp;private&nbsp;static&nbsp;bool&nbsp;TickNext&nbsp;=&nbsp;true;&nbsp;&nbsp; <br />
&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;Main&nbsp;()&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp;&nbsp; <br />
&nbsp;&nbsp;Console.WriteLine&nbsp;("Press&nbsp;Enter&nbsp;to&nbsp;terminate...");&nbsp;&nbsp; <br />
&nbsp;&nbsp;TimerCallback&nbsp;callback&nbsp;=&nbsp;new&nbsp;TimerCallback&nbsp;(TickTock);&nbsp;&nbsp; <br />
&nbsp;&nbsp;Timer&nbsp;timer&nbsp;=&nbsp;new&nbsp;Timer&nbsp;(callback,&nbsp;null,&nbsp;1000,&nbsp;1000);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;Console.ReadLine&nbsp;();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;private&nbsp;static&nbsp;void&nbsp;TickTock&nbsp;(object&nbsp;state)&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;Console.WriteLine&nbsp;(TickNext&nbsp;?&nbsp;"Tick"&nbsp;:&nbsp;"Tock");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;TickNext&nbsp;=&nbsp;!&nbsp;TickNext;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp;从上面的代码中，我们知道第一个函数回调是在1000毫秒后才发生的，以后的函数回调也是在每隔1000毫秒之后发生的，这是由Timer对象的构造函数中的第三个参数所决定的。程序会在1000毫秒的时间间隔后不断的产生新线程，只到用户输入回车才结束运行。不过值得注意的是，虽然我们设置了时间间隔为1000毫秒，但是实际运行的时候往往并不能非常精确。因为Windows操作系统并不是一个实时系统，而公用语言运行时也不是实时的，所以由于线程调度的千变万化，实际的运行效果往往是不能精确到毫秒级的，但是对于一般的应用来说那已经是足够的了，所以你也不必十分苛求。&nbsp; <br />
<br />
&nbsp;&nbsp;小结&nbsp;&nbsp; <br />
&nbsp;&nbsp;本文介绍了在.Net下进行多线程编程所需要掌握的一些基本知识。从文章中我们可以知道在.Net下进行多线程编程相对以前是有了大大的简化，但是其功能并没有被削弱。使用以上的一些基本知识，读者就可以试着编写.Net下的多线程程序了。不过要编写出功能更加强大而且Bug少的多线程应用程序，读者需要掌握诸如线程同步、线程池等高级的多线程编程技术。读者不妨参考一些操作系统方面或是多线程编程方面的技术丛书。
<img src ="http://www.blogjava.net/yank/aggbug/148884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-09-27 21:09 <a href="http://www.blogjava.net/yank/archive/2007/09/27/148884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataTable</title><link>http://www.blogjava.net/yank/archive/2007/07/28/133050.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 28 Jul 2007 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/28/133050.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/133050.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/28/133050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/133050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/133050.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: [Copy to clipboard] [ - ]CODE:。。。。。SqlDataReader reader1 = cmd1.ExecuteReader ();DataTable dt = reader1 .GetSchemaTable SetColumnHeaders(dt);private void SetColumnHeaders(DataTable schema)//设置表头{&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/28/133050.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/133050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-28 21:43 <a href="http://www.blogjava.net/yank/archive/2007/07/28/133050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取页面的所有TextBox的值</title><link>http://www.blogjava.net/yank/archive/2007/07/25/132411.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Wed, 25 Jul 2007 15:37:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/25/132411.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/132411.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/25/132411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/132411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/132411.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 将页面上的所有的TextBox控件的值都置为空&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/25/132411.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/132411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-25 23:37 <a href="http://www.blogjava.net/yank/archive/2007/07/25/132411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql语句的模糊查询</title><link>http://www.blogjava.net/yank/archive/2007/07/22/131701.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sun, 22 Jul 2007 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/22/131701.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/131701.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/22/131701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/131701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/131701.html</trackback:ping><description><![CDATA[SELECT * FROM user WHERE name LIKE ';%三%';<br>将会把name为&#8220;张三&#8221;，&#8220;三脚猫&#8221;，&#8220;唐三藏&#8221;等等有&#8220;三&#8221;的全找出来；<br><br><br>其中LIKE ';%三%'明显多了个分号&#8220;;&#8221;，这还能搜索得出来么？估计是编辑器编译的缘故。<br><br>======重新编辑文如下：<br><br>在进行数据库查询时，有完整查询和模糊查询之分。<br><br>一般模糊语句如下：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef>SELECT 字段 FROM 表 WHERE 某字段 Like 条件<br></td>
        </tr>
    </tbody>
</table>
<br><br>其中关于条件，SQL提供了四种匹配模式：<br><br><strong>1，%</strong>：表示任意0个或多个字符。可匹配任意类型和长度的字符，<font color=#666>有些情况下若是中文，请使用两个百分号（%%）表示</font>。<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'<br><br>将会把u_name为&#8220;张三&#8221;，&#8220;张猫三&#8221;、&#8220;三脚猫&#8221;，&#8220;唐三藏&#8221;等等有&#8220;三&#8221;的记录全找出来。<br><br>另外，如果需要找出u_name中既有&#8220;三&#8221;又有&#8220;猫&#8221;的记录，请使用and条件<br>SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'<br><br>若使用 <font color=#666>SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'</font> <br>虽然能搜索出&#8220;三脚猫&#8221;，但不能搜索出符合条件的&#8220;张猫三&#8221;。<br><br><strong>2，_</strong>： 表示任意单个字符。匹配单个任意字符，它常用来限制表达式的字符长度语句：<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'<br>只找出&#8220;唐三藏&#8221;这样u_name为三个字且中间一个字是&#8220;三&#8221;的；<br><br>再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';<br>只找出&#8220;三脚猫&#8221;这样name为三个字且第一个字是&#8220;三&#8221;的；<br><br><br><strong>3，[ ]</strong>：表示括号内所列字符中的一个（类似正则表达式）。指定一个字符、字符串或范围，要求所匹配对象为它们中的任一个。<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'<br>将找出&#8220;张三&#8221;、&#8220;李三&#8221;、&#8220;王三&#8221;（而不是&#8220;张李王三&#8221;）；<br><br>如 [ ] 内有一系列字符（01234、abcde之类的）则可略写为&#8220;0-4&#8221;、&#8220;a-e&#8221;<br>SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'<br>将找出&#8220;老1&#8221;、&#8220;老2&#8221;、&#8230;&#8230;、&#8220;老9&#8221;；<br><br><strong>4，[^ ] </strong>：表示不在括号所列之内的单个字符。其取值和 [] 相同，但它要求所匹配对象为指定字符以外的任一个字符。<br><br>比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'<br>将找出不姓&#8220;张&#8221;、&#8220;李&#8221;、&#8220;王&#8221;的&#8220;赵三&#8221;、&#8220;孙三&#8221;等；<br><br>SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';<br>将排除&#8220;老1&#8221;到&#8220;老4&#8221;，寻找&#8220;老5&#8221;、&#8220;老6&#8221;、&#8230;&#8230;<br><br><strong>5，查询内容包含通配符时</strong><br><br>由于通配符的缘故，导致我们查询特殊字符&#8220;%&#8221;、&#8220;_&#8221;、&#8220;[&#8221;的语句无法正常实现，而把特殊字符用&#8220;[ ]&#8221;括起便可正常查询。据此我们写出以下函数：<br><br>
<table cellSpacing=1 width="100%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td bgColor=#efefef><br>function sqlencode(str)<br>str=replace(str,"[","[[]") '此句一定要在最前<br>str=replace(str,"_","[_]")<br>str=replace(str,"%","[%]")<br>sqlencode=str<br>end function<br><br></td>
        </tr>
    </tbody>
</table>
<br>在查询前将待查字符串先经该函数处理即可。
<img src ="http://www.blogjava.net/yank/aggbug/131701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-22 10:16 <a href="http://www.blogjava.net/yank/archive/2007/07/22/131701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Datalist自定义分页【A】</title><link>http://www.blogjava.net/yank/archive/2007/07/21/131646.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 21 Jul 2007 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/21/131646.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/131646.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/21/131646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/131646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/131646.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Datalist的上下页，首页，尾页，总页码，查询的总结果数<br>这种方法有个缺点：就是利用虚拟的url,在url中有页码的调用&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/21/131646.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/131646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-21 17:31 <a href="http://www.blogjava.net/yank/archive/2007/07/21/131646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GridView 常用方法合集 </title><link>http://www.blogjava.net/yank/archive/2007/07/21/131642.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 21 Jul 2007 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/21/131642.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/131642.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/21/131642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/131642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/131642.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、利用sqldatasource动态邦定数据，其中sqldatasource1是托放在页面的sqldatasource控件，将数据邦定到gridview1上面<br>2、选择一行，获取关键字，然后传到其他页面<br>3、获取编辑行的关键字<br>4、删除一行，获取关键字。这个地方还是用rowdeleting 事件。<br>5、删除前提示关键字，不仅仅是提示“确认删除吗？” 而是提示“确认删除关键字是***的数据吗？”<br>6、显示页码<br>显示页码要在aspx代码里填入几行数据，上面的代码已经有了 重新写一下：<br><br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/21/131642.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/131642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-21 17:04 <a href="http://www.blogjava.net/yank/archive/2007/07/21/131642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP 2.0 数据绑定函数Eval()的机制 </title><link>http://www.blogjava.net/yank/archive/2007/07/20/131529.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 20 Jul 2007 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/20/131529.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/131529.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/20/131529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/131529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/131529.html</trackback:ping><description><![CDATA[ASP.NET 2.0 的数据绑定函数Eval()简化掉了ASP 1.1神秘的Container.DataItem，比如数据绑定表达式：
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Courier">&nbsp;&lt;%# (Container.DataItem as DataRowView)["ProductName"].ToString() %&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Courier">&nbsp;ASP 1.1简化为：(去掉了类型指定, Eval通过反射实现，本文不再阐述)<br>&nbsp;&lt;%# DataBinder.Eval(Container.DataItem, "ProductName").ToString() %&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Courier">&nbsp;ASP 2.0又简化为，去掉了Container局部变量：<br>&nbsp;&lt;%# <span style="COLOR: red">Eval("ProductName")</span> %&gt;<br>&nbsp;<br>&nbsp;那么，Page.Eval()又是如何知道"ProductName"是那个数据的属性呢，即Container.DataItem真的消失了吗？<br><br>&nbsp;Eval()是Page的父类TemplateControl的方法<br>&nbsp;TemplateControl.Eval()可以自动计算出Container, 机制就是从一个dataBindingContext:Stack堆栈来获取。<br>&nbsp;<br>&nbsp;1. 建立DataItem Container 栈：<br>&nbsp;&nbsp;&nbsp; 在Control.DataBind()中，建立，这样可以保证子控件的DataItem Container始终在栈顶。<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public class Control<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected virtual void DataBind(bool raiseOnDataBinding)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool foundDataItem = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.IsBindingContainer)<br>&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; object o = DataBinder.GetDataItem(this, out foundDataItem);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (foundDataItem)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: red">Page.PushDataItemContext(o);</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 将DataItem压入堆栈<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&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; if (raiseOnDataBinding)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OnDataBinding(EventArgs.Empty);<br>&nbsp;&nbsp;&nbsp;&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; DataBindChildren();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 绑定子控件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br>&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; if (foundDataItem)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: red">Page.PopDataItemContext();</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 将DataItem弹出堆栈<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Courier">&nbsp; 2. 获取DataItem Container<br>&nbsp;&nbsp;&nbsp; public class Page<br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public object GetDataItem()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: red">return this._dataBindingContext.Peek();</span>&nbsp;&nbsp;&nbsp;&nbsp; &lt;-- 读取堆栈顶部的DataItem Container，就是正在绑定的DataItem Container<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; 3. TemplateControl.Eval()<br>&nbsp;&nbsp;&nbsp; public class TemplateControl<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected string Eval (string expression, string format)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: red">return DataBinder.Eval (Page.GetDataItem(), expression, format);</span>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>结论：从上面看出Page.Eval()在计算的时候还是引用了Container.DataItem，只不过这个DataItem通过DataItem Container堆栈自动计算出来的。我认为Page.Eval()看似把问题简化了，其实把问题搞得更加神秘。</p>
<img src ="http://www.blogjava.net/yank/aggbug/131529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-20 17:21 <a href="http://www.blogjava.net/yank/archive/2007/07/20/131529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GridView事件应用</title><link>http://www.blogjava.net/yank/archive/2007/07/16/130527.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Mon, 16 Jul 2007 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/16/130527.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130527.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/16/130527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130527.html</trackback:ping><description><![CDATA[<p>GridView&#8220;GridView1&#8221;激发了未处理的事件&#8220;PageIndexChanging&#8221;。 <br>说明: 执行当前 Web 请求期间，出现未处理的异常。请检查堆栈跟踪信息，以了解有关该错误以及代码中导致错误的出处的详细信息。 </p>
<p>异常详细信息: System.Web.HttpException: GridView&#8220;GridView1&#8221;激发了未处理的事件&#8220;PageIndexChanging&#8221;。</p>
<p>源错误: </p>
<p>执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。&nbsp; </p>
<p>堆栈跟踪: <br>[HttpException (0x80004005): GridView&#8220;GridView1&#8221;激发了未处理的事件&#8220;PageIndexChanging&#8221;。]<br>&nbsp;&nbsp; System.Web.UI.WebControls.GridView.OnPageIndexChanging(GridViewPageEventArgs e) +324<br>&nbsp;&nbsp; System.Web.UI.WebControls.GridView.HandlePage(Int32 newPage) +110<br>&nbsp;&nbsp; System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +516<br>&nbsp;&nbsp; System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +213<br>&nbsp;&nbsp; System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31<br>&nbsp;&nbsp; System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32<br>&nbsp;&nbsp; System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +244<br>&nbsp;&nbsp; System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3837<br>--------------------------------------------------------------------------------<br>版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42 </p>
<p>ASP.NET的CS代码:<br>using System;<br>using System.Data;<br>using System.Data.SqlClient;<br>using System.Configuration;<br>using System.Web;<br>using System.Web.Security;<br>using System.Web.UI;<br>using System.Web.UI.WebControls;<br>using System.Web.UI.WebControls.WebParts;<br>using System.Web.UI.HtmlControls;<br>using System.Collections;</p>
<p>public partial class _Default : System.Web.UI.Page <br>{<br>&nbsp;&nbsp;&nbsp; string zhumin = ConfigurationSettings.AppSettings["ConnectionString"].ToString();</p>
<p>&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e)<br>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!Page.IsPostBack)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BindDataGrid();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsFirstLastPage();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; private void BindDataGrid()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlConnection MyConnection = new SqlConnection(zhumin);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String cmdText = "SELECT * FROM Orders";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlDataAdapter da = new SqlDataAdapter(cmdText,MyConnection);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyConnection.Open();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSet ds = new DataSet();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; da.Fill(ds);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView1.DataSource = ds;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView1.DataBind();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyConnection.Close();<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp; <br>&nbsp;&nbsp;&nbsp; protected void GridView1_PageIndexChanged(object source,System.Web.UI.WebControls.DataGridPageChangedEventArgs e)<br>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView1.PageIndex = e.NewPageIndex;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BindDataGrid();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; protected void PageCut_Click(object sender, EventArgs e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String commangArg = ((LinkButton)sender).CommandArgument;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (commangArg)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "First":<br>&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; GridView1.PageIndex = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&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; case "Prev":<br>&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; GridView1.PageIndex = (int)Math.Max(0,GridView1.PageIndex - 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&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; case "Next":<br>&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; GridView1.PageIndex = (int)Math.Min(GridView1.PageCount - 1, GridView1.PageIndex + 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&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; case "Last":<br>&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; GridView1.PageIndex = GridView1.PageCount - 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&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; default:<br>&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; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BindDataGrid();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IsFirstLastPage();</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; private void IsFirstLastPage()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GridView1.PageCount &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (GridView1.PageCount != 1)<br>&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; if (GridView1.PageIndex == 0)<br>&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; LinkButton2.Enabled = false;<br>&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; else<br>&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; LinkButton2.Enabled = true;<br>&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; if (GridView1.PageIndex == GridView1.PageCount - 1)<br>&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; LinkButton3.Enabled = false;<br>&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; else<br>&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; LinkButton3.Enabled = true;<br>&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; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&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; LinkButton2.Enabled = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LinkButton3.Enabled = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LinkButton1.Enabled = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LinkButton2.Enabled = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LinkButton3.Enabled = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LinkButton4.Enabled = false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<p>最后是我的ASPX代码:<br>&lt;%@ Page Language="C#" AutoEventWireup="true"&nbsp; CodeFile="Default.aspx.cs" Inherits="_Default" %&gt;</p>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><u><font color=#0000ff>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</font></u></a>"&gt;</p>
<p>&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml"><u><font color=#0000ff>http://www.w3.org/1999/xhtml</font></u></a>" &gt;<br>&lt;head runat="server"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;title&gt;无标题页&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&nbsp;&nbsp;&nbsp; &lt;form id="form1" runat="server"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;div&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;center&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="Yellow"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ForeColor="Black" Width="372px"&nbsp; AllowPaging="True"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Columns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:BoundField DataField="OrderID" HeaderText="员工ＩＤ" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:BoundField DataField="EmployeeID" HeaderText="顾客ＩＤ" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:BoundField DataField="ShipVia" HeaderText="ＳhipＩＤ" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Columns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/asp:GridView&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/center&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;br /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;center style="text-align: left"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="First"&gt;首页&lt;/asp:LinkButton&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:LinkButton ID="LinkButton2" runat="server" CommandArgument="Prev"&gt;上一页&lt;/asp:LinkButton&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp; &amp;nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:LinkButton ID="LinkButton3" runat="server" CommandArgument="Next"&gt;下一页&lt;/asp:LinkButton&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&amp;nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:LinkButton ID="LinkButton4" runat="server" CommandArgument="Last"&gt;尾页&lt;/asp:LinkButton&gt;&lt;/center&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;</p>
<img src ="http://www.blogjava.net/yank/aggbug/130527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-16 12:15 <a href="http://www.blogjava.net/yank/archive/2007/07/16/130527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 卸载以前版本的 Visual Studio 2005(步骤)</title><link>http://www.blogjava.net/yank/archive/2007/07/15/130430.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sun, 15 Jul 2007 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/15/130430.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130430.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/15/130430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130430.html</trackback:ping><description><![CDATA[<div><font face=Arial><a target=_blank name=knowninstall></a>卸载以前版本的 Visual Studio 2005</font></div>
<p><font face=Arial>如果已经安装了以前版本的 Visual Studio 2005，如 Visual Studio Team Suite、Visual Studio 标准版或 Visual Studio 专业版的测试版 2 或社区技术预览 (CTP) 版本，则必须严格按照以下所示顺序卸载，然后才能开始安装任何版本的 Visual Studio 2005：
<ol>
    <li>转到&#8220;控制面板&#8221;，启动&#8220;添加/删除程序&#8221;
    <li>删除&#8220;Microsoft SQL Server 2005 Express Edition&#8221;
    <li>删除&#8220;Microsoft SQL Server 2005 Tools Express Edition&#8221;
    <li>删除&#8220;Microsoft SQL Native Client&#8221;
    <li>删除&#8220;Microsoft Visual Studio 64 位系统必备测试版&#8221;（仅在 64 位计算机上安装 Visual Studio 时，才需要执行此步骤）
    <li>删除&#8220;Microsoft Visual Studio Tools for Office System 2005 Runtime 语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft Visual Studio Tools for Office System 2005 Runtime 测试版&#8221;
    <li>删除&#8220;Microsoft Device Emulator 1.0 测试版&#8221;
    <li>删除&#8220;Microsoft .NET Compact Framework 2.0 测试版&#8221;
    <li>删除&#8220;Microsoft .NET Compact Framework 1.0 测试版&#8221;
    <li>删除&#8220;Microsoft Visual Studio 2005 专业版&#8221;或其他相关的 IDE 安装，如 Visual Studio 专业版/标准版/企业级结构设计版/Team Suite 等
    <li>删除&#8220;Microsoft Document Explorer 2005 语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft Document Explorer 2005&#8221;（此步骤对于测试版 2 之后的版本是必需的）
    <li>删除&#8220;Microsoft SQL Mobile 2005 Development Tools&#8221;
    <li>删除&#8220;Microsoft 64 位 SDK&#8221;（只有当 Visual Studio 安装在 64 位计算机上时，才需要执行此步骤）
    <li>删除&#8220;Microsoft Visual Studio 2005 Remote Debugger (x64)&#8221;（仅在 64 位计算机上安装 Visual Studio 时，才需要执行此步骤）
    <li>删除&#8220;Microsoft MDAC 2.8 SP1&#8221;（只有当您运行的是 Windows 2000 时，才需要执行此步骤）
    <li>删除&#8220;Microsoft MSXML 6 SDK 和 Parser&#8221;
    <li>删除&#8220;Microsoft Visual J# .NET Redistributable 2.0 测试版语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft Visual J# Redistributable Package 2.0 测试版&#8221;
    <li>确保所有 Visual Studio 2005 产品均已从系统中删除
    <li>删除&#8220;Microsoft .NET Framework 2.0 测试版语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft .NET Framework 2.0 测试版&#8221; </li>
</ol>
<div>说明：</div>
<ol>
    <li>如果在&#8220;添加/删除程序&#8221;中删除 J# .NET Redistributable Package 2.0 时出现错误，请在命令行窗口中运行&#8220;msiexec /x {9046F10C-F5E7-4871-BED9-8288F19C70DF}&#8221;&lt; <br>&nbsp;
    <li>如果在&#8220;添加/删除程序&#8221;中删除 .NET Framework 2.0 时出现错误，请在命令行窗口中运行&#8220;msiexec /x {71F8EFBF-09AF-418D-91F1-52707CDFA274}&#8221; </li>
</ol>
<p>&nbsp;</p>
<h1><font face=Arial><a target=_blank name=AllVS></a></font></h1>
<br>
<h1><font face=Arial><a target=_blank name=crystalReport></a></font></h1>
<div id=DIV1>转自微软学生中心<a href="http://www.msuniversity.edu.cn/bbs/dispbbs.asp?boardID=64&amp;ID=1513&amp;page=17">http://www.msuniversity.edu.cn/bbs/dispbbs.asp?boardID=64&amp;ID=1513&amp;page=17</a>
<p>&#160;</p>
</div>
</font>
<p>&#160;</p>
<ol>
    <li>转到&#8220;控制面板&#8221;，启动&#8220;添加/删除程序&#8221;
    <li>删除&#8220;Microsoft SQL Server 2005 Express Edition&#8221;
    <li>删除&#8220;Microsoft SQL Server 2005 Tools Express Edition&#8221;
    <li>删除&#8220;Microsoft SQL Native Client&#8221;
    <li>删除&#8220;Microsoft Visual Studio 64 位系统必备测试版&#8221;（仅在 64 位计算机上安装 Visual Studio 时，才需要执行此步骤）
    <li>删除&#8220;Microsoft Visual Studio Tools for Office System 2005 Runtime 语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft Visual Studio Tools for Office System 2005 Runtime 测试版&#8221;
    <li>删除&#8220;Microsoft Device Emulator 1.0 测试版&#8221;
    <li>删除&#8220;Microsoft .NET Compact Framework 2.0 测试版&#8221;
    <li>删除&#8220;Microsoft .NET Compact Framework 1.0 测试版&#8221;
    <li>删除&#8220;Microsoft Visual Studio 2005 专业版&#8221;或其他相关的 IDE 安装，如 Visual Studio 专业版/标准版/企业级结构设计版/Team Suite 等
    <li>删除&#8220;Microsoft Document Explorer 2005 语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft Document Explorer 2005&#8221;（此步骤对于测试版 2 之后的版本是必需的）
    <li>删除&#8220;Microsoft SQL Mobile 2005 Development Tools&#8221;
    <li>删除&#8220;Microsoft 64 位 SDK&#8221;（只有当 Visual Studio 安装在 64 位计算机上时，才需要执行此步骤）
    <li>删除&#8220;Microsoft Visual Studio 2005 Remote Debugger (x64)&#8221;（仅在 64 位计算机上安装 Visual Studio 时，才需要执行此步骤）
    <li>删除&#8220;Microsoft MDAC 2.8 SP1&#8221;（只有当您运行的是 Windows 2000 时，才需要执行此步骤）
    <li>删除&#8220;Microsoft MSXML 6 SDK 和 Parser&#8221;
    <li>删除&#8220;Microsoft Visual J# .NET Redistributable 2.0 测试版语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft Visual J# Redistributable Package 2.0 测试版&#8221;
    <li>确保所有 Visual Studio 2005 产品均已从系统中删除
    <li>删除&#8220;Microsoft .NET Framework 2.0 测试版语言包&#8221;（如果您仅使用英文版，则不需要执行此步骤）
    <li>删除&#8220;Microsoft .NET Framework 2.0 测试版&#8221; </li>
</ol>
<div>说明：</div>
<ol>
    <li>如果在&#8220;添加/删除程序&#8221;中删除 J# .NET Redistributable Package 2.0 时出现错误，请在命令行窗口中运行&#8220;msiexec /x {9046F10C-F5E7-4871-BED9-8288F19C70DF}&#8221;&lt; <br>&nbsp;
    <li>如果在&#8220;添加/删除程序&#8221;中删除 .NET Framework 2.0 时出现错误，请在命令行窗口中运行&#8220;msiexec /x {71F8EFBF-09AF-418D-91F1-52707CDFA274}&#8221; </li>
</ol>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/yank/aggbug/130430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-15 21:13 <a href="http://www.blogjava.net/yank/archive/2007/07/15/130430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取GridView行的主键值</title><link>http://www.blogjava.net/yank/archive/2007/07/15/130314.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 14 Jul 2007 16:12:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/15/130314.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130314.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/15/130314.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130314.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 获取GridView行的主键值<br>string order_Id=this.GridView1.DataKeys[row.RowIndex]["orders_Id"].ToString();<br>标注的是主键的字段<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/15/130314.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/130314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-15 00:12 <a href="http://www.blogjava.net/yank/archive/2007/07/15/130314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断DataSet中是否为空     </title><link>http://www.blogjava.net/yank/archive/2007/07/15/130312.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 14 Jul 2007 16:08:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/15/130312.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130312.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/15/130312.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130312.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130312.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 判断DataSet中是否为空       <br> DataSet ds = new DataSet();<br>        sdr.Fill(ds,"users");<br>        if (ds.Tables["users"].Rows.Count > 0)<br>或者<br>DataSet1.Tables.Rows.Count   &nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/15/130312.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/130312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-15 00:08 <a href="http://www.blogjava.net/yank/archive/2007/07/15/130312.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Asp.net中对话框</title><link>http://www.blogjava.net/yank/archive/2007/07/14/130251.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 14 Jul 2007 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/14/130251.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130251.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/14/130251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130251.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <asp:button id="btnClick" runat="server" OnClientClick="return confirm('Are you sure?');" text="Button"></asp:button> <br>      btnClick.Attributes.Add("onclick", "return confirm('Are you sure?');"); &nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/14/130251.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/130251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-14 12:27 <a href="http://www.blogjava.net/yank/archive/2007/07/14/130251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dropdownlist绑定</title><link>http://www.blogjava.net/yank/archive/2007/07/14/130226.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 13 Jul 2007 18:18:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/14/130226.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130226.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/14/130226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130226.html</trackback:ping><description><![CDATA[第一种方法：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>string</span> ConnString = ConfigurationSettings.AppSettings["ConnectionString"];
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//</span></span><span>创建一个<span>SqlConnection<br></span></span></font><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><st1:place w:st="on"><st1:city w:st="on">SqlConnection</st1:city> <st1:state w:st="on">Conn</st1:state></st1:place> = <span>new</span> SqlConnection( ConnString );</font></span><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>string</span> SQL_Select = "select id, ItemName from DDLItem order by id desc";</font></span></p>
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//</span></span><span>构造一个<span>SqlDataAdapter</span></span></font></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SqlDataAdapter myAdapter = <span>new</span> SqlDataAdapter( SQL_Select, <st1:place w:st="on"><st1:state w:st="on">Conn</st1:state></st1:place>);</font></span></p>
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//</span></span><span>开始读取数据</span></font></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Conn.Open();</font></span></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DataSet dataSet = <span>new</span> DataSet();</font></span></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>myAdapter.Fill( dataSet,"Table1" );</font></span></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Conn.Close();</font></span><span><font size=4>&nbsp;</font></span></p>
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//</span></span><span>开始绑定<span>DropDownList</span></span></font><span><font size=4>&nbsp;</font></span></p>
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//</span></span><span>指定<span>DropDownList</span>使用的数据源</span></font></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DropDownList1.DataSource = dataSet.Tables["Table1"].DefaultView;</font></span></p>
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>//</span></span><span>指定<span>DropDownList</span>使用的表里的那些字段</span></font></p>
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DropDownList1.DataTextField = "ItemName"; <span>//dropdownlist</span></span><span>的<span>Text</span>的字段</span></font></p>
<p align=left><font size=4><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DropDownList1.DataValueField = "id";<span>//dropdownlist</span></span><span>的<span>Value</span>的字段</span></font></p>
<p align=left><span><font size=4><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DropDownList1.DataBind();<br></font></span></p>
第二种方法：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.Open();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlCommand cmd = new SqlCommand(strSql,con);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlDataReader dr = cmd.ExecuteReader();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (dr.Read())<br>&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; DropDownList1.Items.Add(new ListItem(dr["status"].ToString(), dr["status_Id"].ToString()));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src ="http://www.blogjava.net/yank/aggbug/130226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-14 02:18 <a href="http://www.blogjava.net/yank/archive/2007/07/14/130226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET2.0下含有DropDownList的GridView编辑、删除</title><link>http://www.blogjava.net/yank/archive/2007/07/13/130185.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 13 Jul 2007 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/13/130185.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130185.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/13/130185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130185.html</trackback:ping><description><![CDATA[&nbsp;
<p>&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="10" <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Width="542px" AllowPaging="True" AllowSorting="True"<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; DataKeyNames="DB31_1,DB31_2" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnSorting="GridView1_Sorting" &gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Columns&gt;<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; &lt;asp:TemplateField HeaderText="序号"&gt;<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; &lt;ItemTemplate&gt;<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; &lt;%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1%&gt;<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; &lt;/ItemTemplate&gt;<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; &lt;/asp:TemplateField&gt;<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; &lt;asp:TemplateField HeaderText="学历代码" SortExpression="DB1_1"&gt;<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; &lt;EditItemTemplate&gt;<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; &lt;%--&lt;asp:TextBox ID="TextBox1" runat="server" Text='&lt;%# Bind("DB1_1") %&gt;'&gt;&lt;/asp:TextBox&gt;--%&gt;<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; &lt;asp:DropDownList ID ="ddlXL" runat="server"&nbsp; DataValueField='&lt;%# Bind("DB1_1") %&gt;'&gt;&lt;/asp:DropDownList&gt;<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; &lt;/EditItemTemplate&gt;<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; &lt;ItemTemplate&gt;<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; &lt;asp:Label ID="Label1" runat="server" Text='&lt;%# Bind("xueliText") %&gt;'&gt;&lt;/asp:Label&gt;<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; &lt;/ItemTemplate&gt;<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; &lt;/asp:TemplateField&gt;<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; &lt;asp:TemplateField HeaderText="学历名称" SortExpression="DB1_2"&gt;<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; &lt;EditItemTemplate&gt;<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; &lt;asp:TextBox ID="TextBox2" runat="server" Text='&lt;%# Bind("DB1_2") %&gt;'&gt;&lt;/asp:TextBox&gt;<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; &lt;/EditItemTemplate&gt;<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; &lt;ItemTemplate&gt;<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; &lt;asp:Label ID="Label2" runat="server" Text='&lt;%# Bind("DB1_2") %&gt;'&gt;&lt;/asp:Label&gt;<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; &lt;/ItemTemplate&gt;<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; &lt;/asp:TemplateField&gt;<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; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:TemplateField HeaderText="操作" ShowHeader="False"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;EditItemTemplate&gt;<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; &lt;asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"<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; Text="更新"&gt;&lt;/asp:LinkButton&gt;<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; &lt;asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"<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; Text="取消"&gt;&lt;/asp:LinkButton&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/EditItemTemplate&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ItemTemplate&gt;<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; &lt;asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"<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; Text="编辑" OnClientClick="return confirm('确认要编辑吗？');"&gt;&lt;/asp:LinkButton&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:LinkButton ID="LinkButton3" runat="server" CausesValidation="False" CommandName="Delete"<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; Text="删除" OnClientClick="return confirm('确认要删除吗？');"&gt;&lt;/asp:LinkButton&gt;<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; &lt;asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Select"<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; Text="选择"&gt;&lt;/asp:LinkButton&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ItemTemplate&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/asp:TemplateField&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Columns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;AlternatingRowStyle BackColor="Aquamarine" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/asp:GridView&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br><span>&nbsp;&nbsp;&nbsp; /// 绑定<strong class=kgb onmouseover='isShowAds = false;isShowAds2 = false;isShowGoogle = true;InTextAds_GoogleLayer="_u6570_u636E";ads.ShowGoogleAds(this,"_u6570_u636E",event)' style="FONT-WEIGHT: normal; CURSOR: hand; COLOR: #0000ff; TEXT-DECORATION: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=Boi4DhYeXRq-bNoryiATF3qSwCui7hReD9ZEGwI23AYDxBBAEGAQg_9DACSgFOABQ7-bS1QNgnbHdgdQFmAG906wQqgEKMjAwMDAwMDAyNbIBDHd3dy5zeHNreS5jbsgBAdoBLGh0dHA6Ly93d3cuc3hza3kuY24vaXQvaHRtbC8yMDA2NzIwMjY2NTcuaHRtqQL4EmCY0ATBPqgDAegDH-gDBQ&amp;num=4&amp;adurl=http://www.EasyRMS.com&amp;client=ca-pub-6505899966777703")' onmouseout='isShowGoogle = false;InTextAds_GoogleLayer="_u6570_u636E"'>数据</strong>到GridView</span><br>&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; private void GridViewBind()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 检索<a href="http://www.knowsky.com/sql.asp"><u><font color=#0000ff>数据库</font></u></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSql = "SELECT * FROM DB1";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 得到数据集<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.GridView1.DataSource=conn.GetDs(strSql).Tables[0].DefaultView;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.GridView1.DataBind();<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>&nbsp;&nbsp;&nbsp; /// 编辑当前行<br>&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView1.EditIndex = e.NewEditIndex;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //当前编辑行背景色高亮<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.GridView1.EditRowStyle.BackColor = Color.FromName("#F7CE90");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridViewBind();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>&nbsp;&nbsp;&nbsp; /// 取消编辑状态<br>&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView1.EditIndex = -1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridViewBind();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>&nbsp;&nbsp;&nbsp; /// 删除记录过程<br>&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到单位编号<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string rowToDelete = GridView1.DataKeys[e.RowIndex].Values[0].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转换为整数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //int ID=Convert.ToInt32(rowToDelete);<br><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //从<strong class=kgb onmouseover='isShowAds = true;isShowAds2 = true;ads.Move(this,"","%u6700%u5F3A%u7684%u6570%u636E%u5E93%uFF01%u6765%u81EA%u5FAE%u8F6F","20650","数据库","%u6570%u636E%u5E93","http%3A//go.microsoft.com/%3Flinkid%3D6331217", event)' style="FONT-WEIGHT: normal; CURSOR: hand; COLOR: #0000ff; TEXT-DECORATION: underline" onclick='javascript:window.open("http://s3.17luntan.com/ClickPortal/WebClick.aspx?id=20650&amp;k=%u6570%u636E%u5E93&amp;siteid=b2cbdffd-bcbf-4415-a129-3344f19a46a3&amp;url=http%3A//www.sxsky.cn/it/html/200672026657.htm&amp;gourl=http%3A//go.microsoft.com/%3Flinkid%3D6331217&amp;parm=1F3B79A61F6BC47108CB35D7933E8B153E88870C86CE9FAC&amp;alliedsiteid=0");' onmouseout="isShowAds = false;isShowAds2 = false">数据库</strong>中删除</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string str = "DELETE FROM DB1 where DB1_1=" + "'" + rowToDelete + "'" + "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.RunSql(str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重新绑定数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridViewBind();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write("数据库错误，错误原因：" + ex.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.End();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>&nbsp;&nbsp;&nbsp; /// 更新记录过程<br>&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string ID = GridView1.DataKeys[e.RowIndex].Values[0].ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string DB1_1 = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1")).Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //string DB1_2 = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2")).Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string DB1_2 = (((DropDownList))GridView1.Rows[e.RowIndex].FindControl("ddlXL")).SelectedItem.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //判断表单项是否有空并给出提示信息<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (DB1_1 == "" || DB1_2 == "")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Alert("请输入完整信息！", Page);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.BuilderEdit("select * from DB1 where DB1_1 ='" + ID + "'");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.dr["DB1_1"] = DB1_1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.dr["DB1_2"] = DB1_2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.BuilderEditClose();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (OracleException err)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err.Code.ToString() == "1")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Alert("错误：已存在具有相同主键的记录", Page);<br>&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;&nbsp;&nbsp;&nbsp; conn.Alert("错误：未能添加记录", Page);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write("&lt;script language='<a href="http://www.knowsky.com/article.asp?typeid=36"><u><font color=#0000ff>javascript</font></u></a>'&gt;alert('数据已被保存!');&lt;/script&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回浏览状态<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView1.EditIndex = -1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridViewBind();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br>&nbsp;&nbsp;&nbsp; /// 分页事件<br>&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView1.PageIndex = e.NewPageIndex;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridViewBind();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br><span>&nbsp;&nbsp;&nbsp; /// 加入<strong class=kgb onmouseover='isShowAds = false;isShowAds2 = false;isShowGoogle = true;InTextAds_GoogleLayer="_u9F20_u6807";ads.ShowGoogleAds(this,"_u9F20_u6807",event)' style="FONT-WEIGHT: normal; CURSOR: hand; COLOR: #0000ff; TEXT-DECORATION: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=B0MsPhYeXRq-bNoryiATF3qSwCpH81Se93Of0AcCNtwGw2wYQAxgDIP_QwAkoBTgAUN7N8JX______wFgnbHdgdQFmAG906wQqgEKMjAwMDAwMDAyNbIBDHd3dy5zeHNreS5jbsgBAdoBLGh0dHA6Ly93d3cuc3hza3kuY24vaXQvaHRtbC8yMDA2NzIwMjY2NTcuaHRtgAIBqQIfGMxD3uCrPqgDAegDH-gDBQ&amp;num=3&amp;adurl=http://www.amrein.com/agendax&amp;client=ca-pub-6505899966777703")' onmouseout='isShowGoogle = false;InTextAds_GoogleLayer="_u9F20_u6807"'>鼠标</strong>效果及为DropDownList绑定值</span><br>&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br>&nbsp;&nbsp;&nbsp; protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为DropDownList绑定值<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (((DropDownList)e.Row.FindControl("ddlXL")) != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DropDownList ddlXL = (DropDownList)e.Row.FindControl("ddlXL");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddlXL.Items.Clear();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddlXL.Items.Add(new ListItem("博士", "1"));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddlXL.Items.Add(new ListItem("硕士", "2"));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddlXL.Items.Add(new ListItem("学士", "3"));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //加入鼠标滑过的高亮效果<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.Row.RowType == DataControlRowType.DataRow)//判定当前的行是否属于datarow类型的行<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //当鼠标放上去的时候 先保存当前行的背景颜色 并给附一颜色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow',this.style.fontWeight='';");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //当鼠标离开的时候 将背景颜色还原的以前的颜色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor,this.style.fontWeight='';");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //单击行改变行背景颜色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.Row.RowType == DataControlRowType.DataRow)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Row.Attributes.Add("onclick", "this.style.backgroundColor='#99cc00'; this.style.color='buttontext';this.style.cursor='default';");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; }</p>
<img src ="http://www.blogjava.net/yank/aggbug/130185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-13 22:14 <a href="http://www.blogjava.net/yank/archive/2007/07/13/130185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> GridView自定义分页导航 </title><link>http://www.blogjava.net/yank/archive/2007/07/13/130150.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 13 Jul 2007 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/13/130150.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130150.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/13/130150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130150.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 自己做的一个项目中所运用到的技术：|1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 日历控件（带时分秒）2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridView 批量删除,自定义分页,定位页码3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/13/130150.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/130150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-13 18:43 <a href="http://www.blogjava.net/yank/archive/2007/07/13/130150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在GridView中针对鼠标单击的某一独立单元格进行编辑</title><link>http://www.blogjava.net/yank/archive/2007/07/13/130119.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 13 Jul 2007 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/13/130119.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/130119.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/13/130119.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/130119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/130119.html</trackback:ping><description><![CDATA[原文地址：<br><a href="http://www.codeproject.com/useritems/EditGridviewCells.asp" target=_blank><font color=#0000ff><u>http://www.codeproject.com/useritems/EditGridviewCells.asp</u></font></a><br><a href="http://www.codeproject.com/useritems/EditGridviewCells/EditGridviewCells_src.zip" target=_blank><u><font color=#0000ff>[原文源码下载]</font></u></a><br><a href="http://www.cnblogs.com/Files/webabcd/DotNET.rar" target=_blank><u><font color=#0000ff>[译者改后源码下载]</font></u></a><br>[翻译]在GridView中针对鼠标单击的某一独立单元格进行编辑<br>原文发布日期：2007.04.07<br>作者：<a href="http://www.codeproject.com/script/Articles/list_articles.asp?userid=607215" target=_blank><u><font color=#0000ff>Declan&nbsp;Bright</font></u></a><br>翻译：<a href="http://webabcd.cnblogs.com/" target=_blank><u><font color=#0000ff>webabcd</font></u></a><br><strong>介绍</strong><br>ASP.NET的GridView控件允许你通过设置它的EditIndex属性来编辑数据行，此时整个数据行都处于编辑模式。&nbsp;如果你在EditItemTemplate的一些列中使用了DropDownList控件，那么你也许不希望整个数据行都处于编辑模式。&nbsp;因为，如果每一个DropDownList控件都有很多选项的话，那么一次加载所有DropDownList控件的所有选项就会导致页面执行缓慢。&nbsp;<br>另外，如果你的数据行的编辑模式需要占用更多的空间的话，那么针对每一个独立的单元格进行编辑要优于针对整个数据行进行编辑。&nbsp;这里，我将示范如何实现这样的功能，又如何去处理事件验证（event&nbsp;validation）。&nbsp;<br><strong>背景</strong><br>本文基于我之前写的一篇文章：<a href="http://www.codeproject.com/useritems/DoubleClickGridviewRow.asp" target=_blank><u><font color=#0000ff>GridView和DataList响应单击数据行和双击数据行事件</font></u></a>。如果你不知道如何让GridView响应单击数据行事件，那么你可以在阅读本文之前先看看这篇文章。&nbsp;<br><br><strong>编辑某一个独立的GridView单元格。</strong><br><img onmouseover="this.style.cursor='hand';" style="CURSOR: hand" onclick=window.open(this.src); height=435 alt=按此在新窗口打开图片 src="http://www.517sou.net/attachments/month_0704/xum1_EditGridviewCells1.jpg" width=495 onload=javascript:DrawImage(this); border=0><br>我所演示的这个GridView有一个不可见的asp:ButtonField控件，它处于GridView的第一列，名为&#8220;SingleClick&#8221;。&nbsp;它用于给GridView的数据行增加单击事件。&nbsp;<br>
<div class=code_main>&lt;Columns&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;asp:ButtonField&nbsp;Text="SingleClick"&nbsp;CommandName="SingleClick"&nbsp;Visible="False"&nbsp;/&gt;<br>&lt;/Columns&gt;</div>
<br>其它每一列的ItemTemplate中有一个可见的Label控件和一个不可见的TextBox或DropDownList控件。&nbsp;为了方便，我们称Label为显示控件，TextBox或DropDownList为编辑控件。<br>
<div class=code_main>&nbsp;&nbsp;&nbsp;&nbsp;&lt;asp:TemplateField&nbsp;HeaderText="Task"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ItemTemplate&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;asp:Label&nbsp;ID="DescriptionLabel"&nbsp;runat="server"&nbsp;Text='&lt;%#&nbsp;Eval("Description")&nbsp;%&gt;'&gt;&lt;/asp:Label&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;asp:TextBox&nbsp;ID="Description"&nbsp;runat="server"&nbsp;Text='&lt;%#&nbsp;Eval("Description")&nbsp;%&gt;'&nbsp;Width="175px"&nbsp;visible="false"&gt;&lt;/asp:TextBox&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ItemTemplate&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/asp:TemplateField&gt;</div>
<br>这里的办法就是用显示控件来显示数据，当单元格所包含的显示控件被单击的时候，则把显示控件的Visible属性设置为false并且把编辑控件的Visible属性设置为true。&nbsp;这里不用使用EditItemTemplat。&nbsp;<br><br>在RowDataBound事件内循环为每一数据行的每一单元格增加单击事件。&nbsp;使用单元格在数据行中的索引作为事件参数，这样在单元格触发了单击事件后我们就可以知道到底是哪个单元格被单击了。&nbsp;<br>
<div class=code_main>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;GridView1_RowDataBound(object&nbsp;sender,&nbsp;GridViewRowEventArgs&nbsp;e)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e.Row.RowType&nbsp;==&nbsp;DataControlRowType.DataRow)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;从第一个单元格内获得LinkButton控件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkButton&nbsp;_singleClickButton&nbsp;=&nbsp;(LinkButton)e.Row.Cells[0].Controls[0];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;返回一个字符串，表示对包含目标控件的&nbsp;ID&nbsp;和事件参数的回发函数的&nbsp;JavaScript&nbsp;调用<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;_jsSingle&nbsp;=&nbsp;ClientScript.GetPostBackClientHyperlink(_singleClickButton,&nbsp;"");<br><br>&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;for&nbsp;(int&nbsp;columnIndex&nbsp;=&nbsp;_firstEditCellIndex;&nbsp;columnIndex&nbsp;&lt;&nbsp;e.Row.Cells.Count;&nbsp;columnIndex++)<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;//&nbsp;增加列索引作为事件参数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;js&nbsp;=&nbsp;_jsSingle.Insert(_jsSingle.Length&nbsp;-&nbsp;2,&nbsp;columnIndex.ToString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;给单元格增加onclick事件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.Row.Cells[columnIndex].Attributes["onclick"]&nbsp;=&nbsp;js;<br>&nbsp;&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;e.Row.Cells[columnIndex].Attributes["style"]&nbsp;+=&nbsp;"cursor:pointer;cursor:hand;";&nbsp;<br>&nbsp;&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;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<br>在RowCommand事件内读出命令参数和事件参数。&nbsp;这会告诉我们被选中的行和列的索引。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;
<div class=code_main>int&nbsp;_rowIndex&nbsp;=&nbsp;int.Parse(e.CommandArgument.ToString());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;_columnIndex&nbsp;=&nbsp;int.Parse(Request.Form["__EVENTARGUMENT"]);</div>
<br>因为知道了被选中的行和列的索引，所以可以通过把显示控件的Visible设置为false，编辑控件的Visible设置为true来把某个独立的单元格设置为编辑模式。&nbsp;然后通过清除单元格的属性来删除被选中单元格的单击事件。&nbsp;<br>
<div class=code_main>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;获得被选中单元格的显示控件并设置其不可见<br>&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;_displayControl&nbsp;=&nbsp;_gridView.Rows[_rowIndex].Cells[_columnIndex].Controls[1];&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;_displayControl.Visible&nbsp;=&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;获得被选中单元格的编辑控件并设置其可见<br>&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;_editControl&nbsp;=&nbsp;_gridView.Rows[_rowIndex].Cells[_columnIndex].Controls[3];<br>&nbsp;&nbsp;&nbsp;&nbsp;_editControl.Visible&nbsp;=&nbsp;true;<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;清除被选中单元格属性以删除click事件<br>&nbsp;&nbsp;&nbsp;&nbsp;_gridView.Rows[_rowIndex].Cells[_columnIndex].Attributes.Clear();</div>
<br>下面有一些代码用于回发服务器后设置焦点到编辑控件，如果编辑控件是DropDownList的话，那么它的SelectedValue要设置为显示控件的值，如果编辑控件是TextBox的话，那么为了做好编辑的准备就要使它的文本被选中。&nbsp;<br>
<div class=code_main>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置焦点到被选中的编辑控件<br>&nbsp;&nbsp;&nbsp;&nbsp;ClientScript.RegisterStartupScript(GetType(),&nbsp;"SetFocus",&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&lt;script&gt;document.getElementById('"&nbsp;+&nbsp;_editControl.ClientID&nbsp;+&nbsp;"').focus();&lt;/script&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果编辑控件是DropDownList的话<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;SelectedValue设置为显示控件的值<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_editControl&nbsp;is&nbsp;DropDownList&nbsp;&amp;&amp;&nbsp;_displayControl&nbsp;is&nbsp;Label)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((DropDownList)_editControl).SelectedValue&nbsp;=&nbsp;((Label)_displayControl).Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果编辑控件是TextBox的话则选中文本框内文本<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_editControl&nbsp;is&nbsp;TextBox)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((TextBox)_editControl).Attributes.Add("onfocus",&nbsp;"this.select()");<br>&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<br>在这个Demo中，我把事件被触发的历史记录也写到了页里。&nbsp;<br><br>如果GridView处于编辑模式的话，那么要在RowUpdating事件里去查找被选中行的每一个单元格。&nbsp;如果发现单元格处于编辑模式的话，那么就调用&#8220;更新&#8221;代码。&nbsp;在这个Demo中，数据保存在DataTable里，而这个DataTable则储存在session中。&nbsp;<br>
<div class=code_main>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;循环每一列以找到处于编辑模式下的单元格<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;_gridView.Columns.Count;&nbsp;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;获得单元格的编辑控件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;_editControl&nbsp;=&nbsp;_gridView.Rows[e.RowIndex].Cells[i].Controls[3];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_editControl.Visible)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;update&nbsp;the&nbsp;data<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<br>为了确保RowUpdating事件在编辑单元格后被激发，要在Page_Load中来触发这个事件。&nbsp;编辑了TextBox后，通过按回车键或者单击另一单元格来使页面做回发处理，下面的这段代码就是用于确保任何数据的改变都会被更新。<br>
<div class=code_main>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this.GridView1.SelectedIndex&nbsp;&gt;&nbsp;-1)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.GridView1.UpdateRow(this.GridView1.SelectedIndex,&nbsp;false);<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</div>
&nbsp;&nbsp;<br><br><strong>为了验证而注册回发和回调数据</strong><br>在RowDataBound中创建的自定义事件必须要在页中注册。&nbsp;通过重写Render方法来调用ClientScriptManager.RegisterForEventValidation。&nbsp;通过GridViewRow.UniqueID返回行的唯一ID，按纽的唯一ID通过在行的唯一ID后附加&#8220;$ct100&#8221;而生成。&nbsp;<br>
<div class=code_main>&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;Render(HtmlTextWriter&nbsp;writer)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(GridViewRow&nbsp;r&nbsp;in&nbsp;GridView1.Rows)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(r.RowType&nbsp;==&nbsp;DataControlRowType.DataRow)<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;for&nbsp;(int&nbsp;columnIndex&nbsp;=&nbsp;_firstEditCellIndex;&nbsp;columnIndex&nbsp;&lt;&nbsp;r.Cells.Count;&nbsp;columnIndex++)<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;Page.ClientScript.RegisterForEventValidation(r.UniqueID&nbsp;+&nbsp;"$ctl00",&nbsp;columnIndex.ToString());<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;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.Render(writer);<br>&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<br>这将防止任何&#8220;回发或回调参数无效&#8221;的错误。<br><br><strong>这个Demo中的其它示例</strong><br>使用SQL数据源控件编辑某一独立的GridView单元格<br>用SqlDataSouce控件实现这个技术需要对GridView的RowUpdating事件做一些修改。&nbsp;当更新GridView的行的时候，SqlDataSource控件一般要把值（values）从EditItemTemplate转移到NewValues集合里。&nbsp;因为我们没有使用EditItemTemplate，所以这种情况下值（values）不会自动地转移到NewValues集合里。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;e.NewValues.Add(key,&nbsp;value);<br>我在App_Data文件夹下使用了一个简单的SQL&nbsp;Server&nbsp;Express数据库。&nbsp;（要使用你自己的数据库的话，你可以修改web.config里的连接字符串）<br><br><br>使用对象数据源控件编辑某一独立的GridView单元格<br>本示例使用了App_Code文件夹内的两个类：<br>&nbsp;&nbsp;&nbsp;&nbsp;&#183;Task.cs&nbsp;&#8211;&nbsp;任务对象<br>&nbsp;&nbsp;&nbsp;&nbsp;&#183;TaskDataAccess.cs&nbsp;&#8211;&nbsp;管理任务对象<br><br>Aspx页的后置代码与SQL&nbsp;Data&nbsp;Source示例是一样的。&nbsp;ObjectDataSource通过TaskDataAccess.cs类里的GetTasks和UpdateTask方法来管理数据。&nbsp;<br><br><strong>有着电子数据表样式的GridView</strong><br>这里有一个与电子数据表的样式很像的GridView。&nbsp;（虽然它看起来像一个电子数据表，但是并不是真的有像电子数据表一样的功能，它仍然是一个GridView。）&nbsp;<br><br>这里虽然有一些单击后改变单元格样式的附加代码，但是主要的代码还是与上面所述是相同的。<br><img onmouseover="this.style.cursor='hand';" style="CURSOR: hand" onclick=window.open(this.src); height=432 alt=按此在新窗口打开图片 src="http://www.517sou.net/attachments/month_0704/qnft_EditGridviewCells2.jpg" width=490 onload=javascript:DrawImage(this); border=0><br>用SQL数据源控件实现有着电子数据表样式的GridView<br>本示例与上面的基本相同，但是它修改了GridView的RowUpdating事件以使其允许用SqlDataSource控件来工作。<br><br><strong>参考</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&#183;<a href="http://www.codeproject.com/useritems/DoubleClickGridviewRow.asp" target=_blank><u><font color=#0000ff>GridView和DataList响应单击数据行和双击数据行事件</font></u></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&#183;<a href="http://www.asp.net/learn/dataaccess/default.aspx?tabid=63" target=_blank><u><font color=#0000ff>ASP.NET&nbsp;2.0数据教程</font></u></a><br><br><strong>结论</strong><br>如果你想在GridView中一次只针对一个单元格进行编辑，那么这个方法将会对你有所帮助。<br><br>译者注：事件验证（EventValidation）。出于安全目的，此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的，则使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。<br><img src="http://www.517sou.net/images/download.gif" align=absMiddle> <a href="http://www.517sou.net/attachments/month_0704/52t8_editgridview.rar" target=_blank><u><font color=#0000ff>点击下载此文件</font></u></a>
<img src ="http://www.blogjava.net/yank/aggbug/130119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-13 16:35 <a href="http://www.blogjava.net/yank/archive/2007/07/13/130119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 删除添加确认事件</title><link>http://www.blogjava.net/yank/archive/2007/07/12/129790.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Thu, 12 Jul 2007 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/12/129790.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/129790.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/12/129790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/129790.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/129790.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:   e.Item.Cells(1).Attributes.Add("onClick",   "return   confirm('你确定要删除这一项吗？');")   <br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/12/129790.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/129790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-12 11:47 <a href="http://www.blogjava.net/yank/archive/2007/07/12/129790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.net中时间的获取</title><link>http://www.blogjava.net/yank/archive/2007/07/10/129235.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Tue, 10 Jul 2007 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/10/129235.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/129235.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/10/129235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/129235.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/129235.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、DateTime 数字型 <br>System.DateTime currentTime=new System.DateTime(); <br><br>1.1 取当前年月日时分秒 <br>currentTime=System.DateTime.Now; <br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/10/129235.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/129235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-10 09:54 <a href="http://www.blogjava.net/yank/archive/2007/07/10/129235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Asp.net中随机数的生成</title><link>http://www.blogjava.net/yank/archive/2007/07/08/128839.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 07 Jul 2007 17:29:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/08/128839.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/128839.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/08/128839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/128839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/128839.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Random rand=new  Random();<br>string  ran=rand.Next().ToString();返回一个随机整数<br>编号<br> 方法名称<br> 功能描述<br> <br>1<br> Next（）<br> 返回一个0~2147483647之间的整数<br> <br>2<br> Next（i）<br> 返回一个0~i之间的整数<br> <br>3<br> Next（i，j）<br> 返回一个i~j之间的整数<br> <br>4<br>   Nextdouble（）<br> 返回一个0~1之间的随机小数<br> <br>5<br>  Nextdouble（  byte（））<br> 用0~255之间的随机整数作为字节数组各元素的值。 <br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/08/128839.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/128839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-08 01:29 <a href="http://www.blogjava.net/yank/archive/2007/07/08/128839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何发邮件</title><link>http://www.blogjava.net/yank/archive/2007/07/08/128838.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sat, 07 Jul 2007 17:24:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/07/08/128838.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/128838.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/07/08/128838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/128838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/128838.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 　在ASP.NET程序中发送邮件不再象ASP中那样需要组件的支持了，在.NET的框架基类的System.Web.Mail名称空间内包含的MailMessage和SmtpMail类可以实现这个功能。 这个已经有点过时的最新的是System.Net.Mail<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/07/08/128838.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/128838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-07-08 01:24 <a href="http://www.blogjava.net/yank/archive/2007/07/08/128838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET程序中常用的三十三种代码</title><link>http://www.blogjava.net/yank/archive/2007/05/05/115379.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 04 May 2007 17:22:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/05/05/115379.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/115379.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/05/05/115379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/115379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/115379.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 各种ASP.NET技巧，应有尽有。。。&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/05/05/115379.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/115379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-05-05 01:22 <a href="http://www.blogjava.net/yank/archive/2007/05/05/115379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Asp.net中为图像加入版权信息</title><link>http://www.blogjava.net/yank/archive/2007/05/05/115378.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 04 May 2007 17:11:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/05/05/115378.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/115378.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/05/05/115378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/115378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/115378.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 公司最近进行的一个项目，数据库中存入了很多的产品图片，可是都没有版权信息，当时客户要求将所有的图片打上公司名称？&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/05/05/115378.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/115378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-05-05 01:11 <a href="http://www.blogjava.net/yank/archive/2007/05/05/115378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FreeTextBox的应用技巧</title><link>http://www.blogjava.net/yank/archive/2007/05/05/115376.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 04 May 2007 16:50:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/05/05/115376.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/115376.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/05/05/115376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/115376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/115376.html</trackback:ping><description><![CDATA[<p>简介：对于FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用,只需要2个文件：FreeTextBox.DLL和ftb.imagegallery.aspx<br><br>1。下载最新版FreeTextBox(版本3.1.6),解压<br>&nbsp;&nbsp; FreeTextBox 3.1.6 (2006/07/18) <br>&nbsp;&nbsp; 博客园本地下载： http://www.cnblogs.com/Files/cleo/FTBv3-1-6.zip<br>&nbsp;&nbsp; 作者网站下载地址：http://freetextbox.com/download/<br>&nbsp;&nbsp; 详细版本有哪些改进和修改历史可以看这里：http://freetextbox.com/download/changelog.aspx<br></p>
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">FreeTextBox&nbsp;3.1.6&nbsp;(2006/07/18)<br>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;BUG:&nbsp;Firefox&nbsp;postback&nbsp;problems&nbsp;(due&nbsp;to&nbsp;IE&nbsp;specific&nbsp;code)<br>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;CHANGE:&nbsp;createlink&nbsp;now&nbsp;requires&nbsp;text&nbsp;to&nbsp;be&nbsp;selected<br>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;BUG:&nbsp;FontSizesMenuList&nbsp;now&nbsp;functions&nbsp;correctly<br>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;BUG:&nbsp;IE&nbsp;users&nbsp;would&nbsp;see&nbsp;the&nbsp;tag&nbsp;path&nbsp;of&nbsp;the&nbsp;entire&nbsp;document<br>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;BUG:&nbsp;WordClean&nbsp;fix&nbsp;for&nbsp;</span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">b</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">&nbsp;tags<br>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;BUG:&nbsp;bug&nbsp;in&nbsp;FF&nbsp;vs.&nbsp;IE&nbsp;DOM&nbsp;handling&nbsp;of&nbsp;extra&nbsp;\n&nbsp;tag<br></span></div>
<p>&nbsp;&nbsp; Free版本的收费版本的区别可以看这里：http://freetextbox.com/features/<br><br>2。打开ASP.Net2.0项目，添加引用。（如果添加过以前版本的FreeTextBox，先删除以前版本的引用）<br>2.1。拷贝ftb.imagegallery.aspx到你要使用FreeTextBox的目录（当然可以是其他，但是可能要设置路径）<br>3。将FreeTextBox添加到工具栏。（工具栏〉常规〉选择项〉浏览到DLL文件，添加）<br>4。可以将工具栏上的控件拖入到你的页面了<br>&nbsp;&nbsp;&nbsp; </p>
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">FTB:FreeTextBox&nbsp;</span><span style="COLOR: rgb(255,0,0)">ID</span><span style="COLOR: rgb(0,0,255)">="Free1"</span><span style="COLOR: rgb(255,0,0)">&nbsp;&nbsp;&nbsp;ImageGalleryPath</span><span style="COLOR: rgb(0,0,255)">="~/ImageAdmin"</span><span style="COLOR: rgb(255,0,0)">&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;runat</span><span style="COLOR: rgb(0,0,255)">="server"</span><span style="COLOR: rgb(255,0,0)">&nbsp;Text</span><span style="COLOR: rgb(0,0,255)">='&lt;%#&nbsp;</span><span style="COLOR: rgb(255,0,0)">Bind("Contents")&nbsp;%</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ButtonDownImage="True"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ToolbarLayout="ParagraphMenu,FontFacesMenu,FontSizesMenu,FontForeColorsMenu|Bold,Italic,Underline,Strikethrough;Superscript,Subscript,RemoveFormat|JustifyLeft,JustifyRight,JustifyCenter,JustifyFull;BulletedList,NumberedList,Indent,Outdent;CreateLink,Unlink,InsertImage,InsertImageFromGallery,InsertRule|Cut,Copy,Paste;Undo,Redo,Print"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">FTB:FreeTextBox</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div>
<p><br>4.1。修改ImageGalleryPath属性为你图片的放置目录。<br>5。Q&amp;A<br>5.1。Q：怎么不能新建目录，上传文件等？<br>&nbsp;&nbsp;&nbsp;&nbsp; A：修改ftb.imagegallery.aspx页面可以做到<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">FTB:ImageGallery&nbsp;</span><span style="COLOR: rgb(255,0,0)">id</span><span style="COLOR: rgb(0,0,255)">="ImageGallery1"</span><span style="COLOR: rgb(255,0,0)"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SupportFolder</span><span style="COLOR: rgb(0,0,255)">="~/aspnet_client/FreeTextBox/"</span><span style="COLOR: rgb(255,0,0)"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllowImageDelete</span><span style="COLOR: rgb(0,0,255)">="true"</span><span style="COLOR: rgb(255,0,0)">&nbsp;AllowImageUpload</span><span style="COLOR: rgb(0,0,255)">="true"</span><span style="COLOR: rgb(255,0,0)"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllowDirectoryCreate</span><span style="COLOR: rgb(0,0,255)">="true"</span><span style="COLOR: rgb(255,0,0)">&nbsp;AllowDirectoryDelete</span><span style="COLOR: rgb(0,0,255)">="true"</span><span style="COLOR: rgb(255,0,0)">&nbsp;runat</span><span style="COLOR: rgb(0,0,255)">="Server"</span><span style="COLOR: rgb(255,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">/&gt;</span></div>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改AllowImageDelete等属性<br>5.2。Q：怎么没有看到&#8220;从图片库插入图片&#8221;这个图标？<br>&nbsp;&nbsp;&nbsp;&nbsp; A：修改&lt;FTB:FreeTextBox /&gt;的ToolbarLayout属性，添加一个InsertImageFromGallery，上面代码的例子就是已经添加好的。<br>5.3。Q：按钮怎么是英文提示？<br>&nbsp;&nbsp;&nbsp;&nbsp; A：&lt;FTB:FreeTextBox /&gt;有个属性叫做Language，把默认的en-US改称zh-CN吧，就是中文简体了，听说这个版本带了25种语言呢。<br><br>新增博客园本地下载： <a href="http://www.cnblogs.com/Files/cleo/FTBv3-1-6.zip">http://www.cnblogs.com/Files/cleo/FTBv3-1-6.zip</a><br></p>
<img src ="http://www.blogjava.net/yank/aggbug/115376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-05-05 00:50 <a href="http://www.blogjava.net/yank/archive/2007/05/05/115376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebControl.ToolTip 属性及用法</title><link>http://www.blogjava.net/yank/archive/2007/05/05/115375.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Fri, 04 May 2007 16:09:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/05/05/115375.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/115375.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/05/05/115375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/115375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/115375.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用 ToolTip 属性指定当鼠标指针悬停在 Web 服务器控件上时显示的自定义文本。&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/05/05/115375.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/115375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-05-05 00:09 <a href="http://www.blogjava.net/yank/archive/2007/05/05/115375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET中MD5加密实例讲解</title><link>http://www.blogjava.net/yank/archive/2007/05/02/115017.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Wed, 02 May 2007 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/05/02/115017.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/115017.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/05/02/115017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/115017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/115017.html</trackback:ping><description><![CDATA[<div class=content>
<p>&lt;%@ Page Language="C#" ContentType="text/html"%&gt;<br>&lt;%@ Import Namespace="System"%&gt;<br>&lt;script language="C#" runat="server"&gt;<br>void Page_Load(Object sender,EventArgs e){<br>//获取要加密的字段，并转化为Byte[]数组<br>byte[] data=System.Text.Encoding.Unicode<br>.GetBytes(source.Text.ToCharArray());<br>//建立加密服务<br>System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();<br>//加密Byte[]数组<br>byte[] result= md5.ComputeHash(data);<br>//将加密后的数组转化为字段<br>string sResult=System.Text.Encoding.Unicode.GetString(result);<br>//显示出来<br>sha1_1.Text="MD5普通加密："+sResult.ToString()+"&lt;br/&gt;";<br>//作为密码方式加密<br>string EnPswdStr=System.Web.Security.FormsAuthentication.<br>HashPasswordForStoringInConfigFile(source.Text.ToString(),"MD5");<br>//显示出来<br>sha1_2.Text="MD5密码加密："+EnPswdStr+"&lt;br/&gt;";<br>}<br>&lt;/script&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br>&lt;title&gt;测试&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;h3&gt;SHA1加密&lt;/h3&gt;<br>&lt;form runat="server"&gt;<br>&lt;asp:label id="sha1_1" runat="server"&gt;&lt;/asp:label&gt;<br>&lt;asp:label id="sha1_2" runat="server"&gt;&lt;/asp:label&gt;<br>&lt;asp:textbox ID="source" runat="server" TextMode="SingleLine" Text="test" AutoPostBack="true" /&gt;<br>（回车）<br>&lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>&nbsp;</p>
<p style="COLOR: red">其实在ASP.Net编程中，不用调用md5.asp来加密数据。在DotNet中有自带的类：System.Web.Security.HashPasswordForStoringInConfigFile()<br>
<p style="COLOR: red">public string md5(string str,int code)<br>{<br>if(code==16) //16位MD5加密（取32位加密的9~25字符）<br>{<br>return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;<br>}<br><br>if(code==32) //32位加密<br>{<br>return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower();<br>}<br><br>return "00000000000000000000000000000000"; }<br><br><span style="COLOR: #333333">简单的使用<br><br>头文件：using System.Web.Security;<br><br>初始化数据库里的字段<br><br>&nbsp;string strPwd=FormsAuthentication.HashPasswordForStoringInConfigFile(this.tbox_Pwd.Text,"MD5");</span></p>
<p style="COLOR: #008000"><br></p>
<h2>ASP.NET中加密与解密QueryString的方法</h2>
<p style="COLOR: #008000">&nbsp;</p>
<div class="entry-body nerr" style="DISPLAY: block">
<p><strong>转载；</strong></p>
<p><strong>1.加密。</strong> </p>
<p>　　Response.Redirect("DetailInfo.aspx?id=" + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes("sp10006")).Replace("+","%2B"));</p>
<p>　　<strong>2.解密。</strong></p>
<p>　　string ID = System.Text.Encoding.Default.GetString(Convert.FromBase64String(Request.QueryString["id"].ToString().Replace("%2B","+")));</p>
</div>
<p style="COLOR: #008000"><br></p>
</div>
<img src ="http://www.blogjava.net/yank/aggbug/115017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-05-02 11:18 <a href="http://www.blogjava.net/yank/archive/2007/05/02/115017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataList绑定数据（源码）</title><link>http://www.blogjava.net/yank/archive/2007/04/22/112820.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sun, 22 Apr 2007 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/04/22/112820.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/112820.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/04/22/112820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/112820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/112820.html</trackback:ping><description><![CDATA[&lt;ASP:DataList &nbsp; id="MyDataList" &nbsp; RepeatColumns="2" &nbsp; OnEditCommand="MyDataList_Edit" &nbsp; OnUpdateCommand="MyDataList_Update" &nbsp; OnCancelCommand="MyDataList_Cancel" &nbsp; &nbsp; &nbsp; runat="server"&gt; &nbsp; <br>&nbsp; &lt;ItemTemplate&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &lt;table &nbsp; cellpadding=10 &nbsp; style="font: &nbsp; 10.5pt &nbsp; 宋体"&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td &nbsp; width=1 &nbsp; bgcolor="BD8672"/&gt; &nbsp; <br>&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; &lt;td &nbsp; valign="top"&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;b&gt;书名：&lt;/b&gt;&lt;%# &nbsp; DataBinder.Eval(Container.DataItem, &nbsp; "eat_name") &nbsp; %&gt;&lt;br&gt; &nbsp; <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; <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; &lt;asp:linkbutton &nbsp; CommandName="edit" &nbsp; runat="server" &nbsp; ID="Linkbutton1" &nbsp; NAME="Linkbutton1"&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;b&gt;名称：&lt;/b&gt;&lt;%# &nbsp; DataBinder.Eval(Container.DataItem, &nbsp; "eat_name") &nbsp; %&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/asp:linkbutton&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/table&gt; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/ItemTemplate&gt; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;EditItemTemplate&gt; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;table &nbsp; cellpadding=10 &nbsp; style="font: &nbsp; 10.5pt &nbsp; 宋体"&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td &nbsp; width=1 &nbsp; bgcolor="BD8672"/&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td &nbsp; valign="top"&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;img &nbsp; align="top" &nbsp; src='&lt;%# &nbsp; DataBinder.Eval(Container.DataItem, &nbsp; "eat_id") &nbsp; %&gt;' &nbsp; &gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td &nbsp; valign="top"&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;b&gt;书名：&lt;/b&gt;&lt;%# &nbsp; DataBinder.Eval(Container.DataItem, &nbsp; "eat_name") &nbsp; %&gt;&lt;br&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;b&gt;类别：&lt;/b&gt;&lt;%# &nbsp; DataBinder.Eval(Container.DataItem, &nbsp; "eat_name") &nbsp; %&gt;&lt;br&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;b&gt;出版商 &nbsp; ID：&lt;/b&gt;&lt;%# &nbsp; DataBinder.Eval(Container.DataItem, &nbsp; "eat_name") &nbsp; %&gt;&lt;br&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;b&gt;价格：&lt;/b&gt;&lt;asp:TextBox &nbsp; id="edit_price" &nbsp; &nbsp; text='&lt;%# &nbsp; DataBinder.Eval(Container.DataItem, &nbsp; "eat_name") &nbsp; %&gt;' &nbsp; runat="server" &nbsp; /&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;p&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;asp:linkbutton &nbsp; CommandName="update" &nbsp; runat="server" &nbsp; ID="Linkbutton2" &nbsp; NAME="Linkbutton2"&gt;&lt;img &nbsp; border="0" &nbsp; src="..//images/update_book.gif" &nbsp; &gt;&lt;/asp:linkbutton&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;asp:linkbutton &nbsp; CommandName="cancel" &nbsp; runat="server" &nbsp; ID="Linkbutton3" &nbsp; NAME="Linkbutton3"&gt;&lt;img &nbsp; border="0" &nbsp; src="..//images/cancel_book.gif" &nbsp; &gt;&lt;/asp:linkbutton&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td &nbsp; colspan="2" &nbsp; style="padding-top:15" &nbsp; align="center"&gt; &nbsp; <br>&nbsp; &lt;span &nbsp; id="Span1" &nbsp; EnableViewState="false" &nbsp; style="font: &nbsp; arial &nbsp; 11pt;" &nbsp; runat="server" &nbsp; /&gt; &nbsp; <br>&nbsp; &lt;/td&gt; &nbsp; <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; &lt;/tr&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/table&gt; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/EditItemTemplate&gt; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &lt;/ASP:DataList&gt;&nbsp;&nbsp;&nbsp;<br>&nbsp;
<img src ="http://www.blogjava.net/yank/aggbug/112820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-04-22 22:10 <a href="http://www.blogjava.net/yank/archive/2007/04/22/112820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>页面间多值传递（技巧）StringBuilder类的使用</title><link>http://www.blogjava.net/yank/archive/2007/04/22/112636.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sun, 22 Apr 2007 08:31:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/04/22/112636.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/112636.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/04/22/112636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/112636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/112636.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们常用的传值一般那用response.Redirect?id="",传多个值呢，那要用到StringBuilder啦&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/04/22/112636.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/112636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-04-22 16:31 <a href="http://www.blogjava.net/yank/archive/2007/04/22/112636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储过程详细介绍</title><link>http://www.blogjava.net/yank/archive/2007/04/22/112619.html</link><dc:creator>停留的风</dc:creator><author>停留的风</author><pubDate>Sun, 22 Apr 2007 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/yank/archive/2007/04/22/112619.html</guid><wfw:comment>http://www.blogjava.net/yank/comments/112619.html</wfw:comment><comments>http://www.blogjava.net/yank/archive/2007/04/22/112619.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/yank/comments/commentRss/112619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yank/services/trackbacks/112619.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍怎样使用存储过程。存储过程是数据库服务器端的一段程序，它有两种类型。一种类似于SELECT查询，用于检索数据，检索到的数据能够以数据集的形式返回给客户。另一种类似于INSERT或DELETE查询，它不返回数据，只是执行一个动作。有的服务器允许同一个存储过程既可以返回数据又可以执行动作&nbsp;&nbsp;<a href='http://www.blogjava.net/yank/archive/2007/04/22/112619.html'>阅读全文</a><img src ="http://www.blogjava.net/yank/aggbug/112619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yank/" target="_blank">停留的风</a> 2007-04-22 14:48 <a href="http://www.blogjava.net/yank/archive/2007/04/22/112619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>