<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>.NET(ASP.NET-基礎篇) </title><link>http://blog.blueshop.com.tw/topcat/category/1011.aspx</link><description>ASP.NET(基礎)開發技術文章分享 </description><managingEditor>topcat</managingEditor><dc:language>zh-TW</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>topcat</dc:creator><title>jQuery在VS2008 SP1中文版中可以使用Intellisense了 </title><link>http://blog.blueshop.com.tw/topcat/archive/2008/08/21/56719.aspx</link><pubDate>Thu, 21 Aug 2008 15:53:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/08/21/56719.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/56719.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/08/21/56719.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/56719.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/56719.aspx</trackback:ping><description>&lt;p&gt;上次提到jQuery開始勾引小喵後，在開發過程中，總覺得少了些什麼。沒錯，在被VS的Intellisense寵壞後的小喵，沒有這個實在有點痛苦。之前網友有篇&lt;a href="http://www.dotblogs.com.tw/kiwi/archive/2008/06/01/4194.aspx"&gt;在VS 2008 使用JQuery 自動提示( Intellisense) &lt;/a&gt;提到不過在中文的VS2008還是無法使用。不過自從更新了SP1後，這一切問題改善了。&lt;/p&gt;&lt;p&gt;使用有幾個必要的條件：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;VS2008 SP1:有需要的人可以到&lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e"&gt;這裡&lt;/a&gt;下載&lt;/li&gt;&lt;li&gt;jQuery程式庫：當然去&lt;a target="_blank" href="http://docs.jquery.com/Downloading_jQuery"&gt;官方網頁&lt;/a&gt;下載最新的囉&lt;/li&gt;&lt;li&gt;&lt;a title="jQuery" target="_blank" rel="" href="http://www.dotblogs.com.tw/topcat/archive/2008/07/25/4711.aspx"&gt;jQuery&lt;/a&gt; Intellisense擋：&lt;a title="Intellisense" target="_blank" href="http://weblogs.asp.net/blogs/bradvincent/JQuery.Intellisense.zip"&gt;Intellisense&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;以上的條件必須是同時具備才能使用唷。&lt;/p&gt;&lt;p&gt;使用方式：&lt;/p&gt;&lt;p&gt;首先要把jQuery與jQuery Intellisense放到你的畫面中引用&lt;/p&gt;&lt;pre class="csharpcode"&gt;
    &amp;lt;script src=&lt;span class="str"&gt;&amp;quot;js/jquery.js&amp;quot;&lt;/span&gt; type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&lt;span class="str"&gt;&amp;quot;js/JQuery.Intellisense.js&amp;quot;&lt;/span&gt; type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;/p&gt;&lt;p&gt;接著，就能夠看到囉&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.dotblogs.com.tw/topcat/0808/jQueryVS2008SP1Intellisense_DD1D/jq01_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="275" alt="jq01" width="656" border="0" src="http://files.dotblogs.com.tw/topcat/0808/jQueryVS2008SP1Intellisense_DD1D/jq01_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;享受吧!!&lt;/p&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/56719.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>jQuery透過ajax取得yahoo新聞Rss範例</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/08/08/56540.aspx</link><pubDate>Fri, 08 Aug 2008 13:39:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/08/08/56540.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/56540.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/08/08/56540.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/56540.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/56540.aspx</trackback:ping><description>&lt;p&gt;這個範例是使用jQuery 的.ajax，從Yahoo新聞的Rss擷取後，產生超連結在自己的網頁中。測試的時候只需要一個html與jQuery.js即可。&lt;/p&gt; 
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HTML&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HEAD&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;META&lt;/span&gt; &lt;span class="attr"&gt;NAME&lt;/span&gt;&lt;span class="kwrd"&gt;="GENERATOR"&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Microsoft Visual Studio 6.0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Script&lt;/span&gt; &lt;span class="attr"&gt;Language&lt;/span&gt;&lt;span class="kwrd"&gt;="JavaScript"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt; &lt;span class="attr"&gt;Src&lt;/span&gt;&lt;span class="kwrd"&gt;="jQuery.js"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&amp;lt;Script Language=&lt;span class="str"&gt;"JavaScript"&lt;/span&gt;&amp;gt;
&amp;lt;!--
$(document).ready(&lt;span class="kwrd"&gt;function&lt;/span&gt;(){
    $(&lt;span class="str"&gt;'#button1'&lt;/span&gt;).click(&lt;span class="kwrd"&gt;function&lt;/span&gt;(){
        &lt;span class="kwrd"&gt;var&lt;/span&gt; strURL=&lt;span class="str"&gt;'http://tw.news.yahoo.com/rss/tech_3c'&lt;/span&gt;;
        $.ajax({
            type:&lt;span class="str"&gt;'GET'&lt;/span&gt;,
            dataType:&lt;span class="str"&gt;'xml'&lt;/span&gt;,
            url:strURL,
            success:&lt;span class="kwrd"&gt;function&lt;/span&gt;(xml){
                &lt;span class="kwrd"&gt;var&lt;/span&gt; myTitle;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; myLink;
                $(&lt;span class="str"&gt;'item'&lt;/span&gt;,xml).each(&lt;span class="kwrd"&gt;function&lt;/span&gt;(e){
                    myTitle=$(&lt;span class="str"&gt;'title'&lt;/span&gt;,&lt;span class="kwrd"&gt;this&lt;/span&gt;).text();
                    myLink=$(&lt;span class="str"&gt;'link'&lt;/span&gt;,&lt;span class="kwrd"&gt;this&lt;/span&gt;).text();
                    $(&lt;span class="str"&gt;'&amp;lt;a/&amp;gt;'&lt;/span&gt;).attr(&lt;span class="str"&gt;'href'&lt;/span&gt;,myLink).attr(&lt;span class="str"&gt;'target'&lt;/span&gt;,&lt;span class="str"&gt;'_blank'&lt;/span&gt;).text(myTitle).appendTo($(&lt;span class="str"&gt;'#div1'&lt;/span&gt;));
                    $(&lt;span class="str"&gt;'&amp;lt;br/&amp;gt;'&lt;/span&gt;).appendTo($(&lt;span class="str"&gt;'#div1'&lt;/span&gt;));
                });
                alert($(&lt;span class="str"&gt;'#div1'&lt;/span&gt;).html());
            }
        })
    })
})

&lt;span class="rem"&gt;//--&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TITLE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TITLE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HEAD&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt; &lt;span class="attr"&gt;onbeforeunload&lt;/span&gt;&lt;span class="kwrd"&gt;="RunOnBeforeUnload()"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;FORM&lt;/span&gt; &lt;span class="attr"&gt;action&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt; &lt;span class="attr"&gt;method&lt;/span&gt;=&lt;span class="attr"&gt;POST&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;=&lt;span class="attr"&gt;form1&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;=&lt;span class="attr"&gt;form1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;INPUT&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Button"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;=&lt;span class="attr"&gt;button1&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;=&lt;span class="attr"&gt;button1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;FORM&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="div1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;BODY&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HTML&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/56540.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>轉貼_JavaScript的UrlEncode,UrlDecode</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/07/25/56244.aspx</link><pubDate>Fri, 25 Jul 2008 11:16:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/07/25/56244.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/56244.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/07/25/56244.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/56244.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/56244.aspx</trackback:ping><description>&lt;p&gt;來源：&lt;a title="http://www.wujianrong.com/archives/2006/11/javascripturlencodeurldecode.html" href="http://www.wujianrong.com/archives/2006/11/javascripturlencodeurldecode.html" target="_blank"&gt;http://www.wujianrong.com/archives/2006/11/javascripturlencodeurldecode.html&lt;/a&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:99fca18c-9b93-49f2-b448-eb8564988c06" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="js"&gt;&amp;lt;script language="javascript"&amp;gt;
//可參考資料 http://www.wujianrong.com/archives/2006/11/javascripturlencodeurldecode.html
/*這裡開始 UrlEncode、UrlDecode 函數*/ 
function UrlEncode(str){ 
  var ret=""; 
  var strSpecial="!\"#$%&amp;amp;'()*+,/:;&amp;lt;=&amp;gt;?[]^`{|}~%"; 
  var tt= "";

  for(var i=0;i&amp;lt;str.length;i++){ 
   var chr = str.charAt(i); 
    var c=str2asc(chr); 
    tt += chr+":"+c+"n"; 
    if(parseInt("0x"+c) &amp;gt; 0x7f){ 
      ret+="%"+c.slice(0,2)+"%"+c.slice(-2); 
    }else{ 
      if(chr==" ") 
        ret+="+"; 
      else if(strSpecial.indexOf(chr)!=-1) 
        ret+="%"+c.toString(16); 
      else 
        ret+=chr; 
    } 
  } 
  return ret; 
} 

function UrlDecode(str){ 
  var ret=""; 
  for(var i=0;i&amp;lt;str.length;i++){ 
   var chr = str.charAt(i); 
    if(chr == "+"){ 
      ret+=" "; 
    }else if(chr=="%"){ 
     var asc = str.substring(i+1,i+3); 
     if(parseInt("0x"+asc)&amp;gt;0x7f){ 
      ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6))); 
      i+=5; 
     }else{ 
      ret+=asc2str(parseInt("0x"+asc)); 
      i+=2; 
     } 
    }else{ 
      ret+= chr; 
    } 
  } 
  return ret; 
}
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/56244.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>jQuery初體驗</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/07/25/56242.aspx</link><pubDate>Fri, 25 Jul 2008 10:16:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/07/25/56242.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/56242.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/07/25/56242.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/56242.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/56242.aspx</trackback:ping><description>&lt;h1&gt;緣起&lt;/h1&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 小喵經常會在各個技術blog中閒逛，有次逛到&lt;a href="http://blog.darkthread.net/" target="_blank"&gt;黑暗執行緒&lt;/a&gt;大大的網站，看到了一篇【&lt;a href="http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/05/15/2399.aspx#3049" target="_blank"&gt;jQuery, I LOVE YOU~~~&lt;/a&gt;】文章，文章中說了他發給【ASP.NET AJAX Client Library】好人卡，並且移情別戀轉而跟【jQuery】在一起的經過。讓小喵留下了深刻的印象。不過，這時小喵還是不曉得jQuery是什麼。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 後來有次小喵剛好要買幾本書，在逛【&lt;a href="http://tlsj.tenlong.com.tw/WebModule/index.do" target="_blank"&gt;書店&lt;/a&gt;】的時候的時候(小喵目前已經很少跑真正的書店，逛得只是書店的網站)，還差一點就可免運費，所以順便找找看是否有什麼新書可以買。剛好看到jQuery有本新的中文書出版。於是小喵就把它放入購物車。從此開始與jQuery結緣。本來買了書後，打算先翻翻看看這個東西到底是什麼，能讓黑暗執行緒大大隊ASP.NET AJAX&amp;nbsp; Client Library發出好人卡。沒想到這個迷死人不償命的小寶貝，竟然開始勾引小喵。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;jQuery是什麼??&lt;/h1&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; jQuery是一組JavaScript的library，而且是免費的library。使用的時候也只需要指定&amp;lt;Script src="jQuery.js"&amp;gt;&amp;lt;/Script&amp;gt;就可以開始引用了。因此無論是用什麼樣的網頁開發程式(ASP,ASP.NET,JSP,PHP,CGI,....)，甚至只需要HTML就可以使用。因此要測試jQuery，甚至不必上網，只需要記事本撰寫html就可以測試使用了。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;下載&lt;/h1&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 先說明要準備使用jQuery之前，需要些什麼：&lt;/p&gt; &lt;p&gt;首先需要把jQuery帶回家。有個繁體中文的網址【&lt;a href="http://www.jquery.com.tw/" target="_blank"&gt;jQuery: 寫得少, 做得多, JavaScript 程式庫&lt;/a&gt;】不過也僅止於這麼少少的幾頁，可以把最新版本的jQuery下載回來。下載的部分他分為三種：&lt;/p&gt; &lt;ol&gt; &lt;li&gt;GZip的版本(Minified)：js經過GZip壓縮過，檔案最小，適合放在正式環境中，1.26版大約16kb  &lt;li&gt;未壓縮版本(Uncompressed)：適用於測試開發學習。1.26版大約97kb  &lt;li&gt;包裝版(Packed)：給沒有辦法解GZip瀏覽器用的版本1.26版大約30kb &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;其實就算是使用Uncompressed的版本，大小也只有97kb，檔案非常的小(可能網頁中隨便一張圖就比這個大了)。而小喵自己則是取中庸的Packed版本使用。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;測試&lt;/h1&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 接下來開始重頭戲，我們初體驗的實際運作範例。也開始體驗一下為何這個小東西會勾引小喵的原因。首先來個範例，小喵產生一個html檔案在畫面上安排了個兩個按鈕(&amp;lt;input type="button")以及一個img並且指向一個jpg。&lt;/p&gt; &lt;p&gt;現在假設要設定，一開始要把img1圖形隱藏，按下按鈕後，希望可以把他顯示出來，再按一次按鈕，又可以把他隱藏。這個對於已經熟悉JavaScript的人，應該不難。小喵寫個簡單的&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:58cef534-c99a-4cd3-9125-c215f2a54f91" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;

&amp;lt;script Language="JavaScript"&amp;gt;
&amp;lt;!--

function window_onload(){
	var img1=window.document.getElementById('img1');
	img1.style.display='none';
}

function btn1_click(){
	var img1=window.document.getElementById('img1');
	if(img1.style.display=='none')
	{
		img1.style.display='';
	}
	else
	{
		img1.style.display='none';
	}
}

//--&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body onload="window_onload()"&amp;gt;
	&amp;lt;input type="button" id="btn1" name="btn1" value="JavaScript按鈕" onclick="btn1_click()" /&amp;gt;
	&amp;lt;br /&amp;gt;
	&amp;lt;img id="img1" src="topcat.jpg" /&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;而以上的動作，如果希望由jQuery來處理的話，那又如何呢&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0fc35322-afa3-4ab4-ae21-22e1c38532e0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;Script Language="JavaScript" src="jQuery.js"&amp;gt;&amp;lt;/Script&amp;gt;
&amp;lt;script Language="JavaScript"&amp;gt;
&amp;lt;!--
$(document).ready(function(){
	$('#img1').hide();
	$('#btn2').click(function(){
		$('#img1').toggle();
	})
})

//--&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;input type="button" id="btn2" name="btn2" value="jQuery按鈕" /&amp;gt;
	&amp;lt;br /&amp;gt;
	&amp;lt;img id="img1" src="topcat.jpg" /&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;一樣的動作，發現了嗎??程式碼精簡到不行。真是太神奇了!!&lt;/p&gt;
&lt;p&gt;再來另外一個範例&lt;/p&gt;
&lt;p&gt;假設我的畫面中有一個&amp;lt;table&amp;gt;希望，&amp;lt;table&amp;gt;裡面的資料在顯示的時候，可以用不同底色交錯顯示，這樣方便在瀏覽的時候可以方便看。我們用固定的&amp;lt;table&amp;gt;當作示範，我們希望讓偶數行能夠加上class，這樣的要用Javascript有多麻煩各位可以想像一下。但是在jQuery來說確是很簡單的&lt;/p&gt;
&lt;p&gt;我們有Style設定&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:849e49d6-3c8f-4d25-a90c-d3e8386adf60" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="css"&gt;&amp;lt;style&amp;gt;
.TrEven1{background-color:pink;}
.TrEven2{background-color:blue;color:white;}
&amp;lt;/style&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在畫面中有兩個Table小喵用asp的方式表式：&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:74e2bd9c-e4c0-4dd9-8781-06d51961ffc7" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml"&gt;table1
&amp;lt;table id="tbl1" border="1"&amp;gt;
&amp;lt;%For y = 1 to 10%&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;&amp;lt;%=y%&amp;gt;&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;aa&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;bb&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;cc&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;dd&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;ee&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;ff&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
&amp;lt;%Next%&amp;gt;
&amp;lt;/table&amp;gt;
table2
&amp;lt;table id="tbl2" border="1"&amp;gt;
&amp;lt;%For y2 = 1 to 10%&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;&amp;lt;%=y2%&amp;gt;&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;aa&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;bb&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;cc&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;dd&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;ee&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;ff&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
&amp;lt;%Next%&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接著，先想像一下如果要用JavaScript要怎麼寫??然後再來看看用jQuery怎麼做&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b393fc33-53ab-45a2-b6dc-6097e5f776de" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="js"&gt;$(document).ready(function(){
	$('#tbl1 tr:even').addClass('TrEven1');
	$('#tbl2 tr:even').addClass('TrEven2');
})&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;看到了他的魔力了嗎??短短的一行【$('#tbl1 tr:even').addClass('TrEven1');】就可以處理了耶!!有沒有那種被【黯然消魂掌】擊中的感覺。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;初體驗就到此先告一段落，有機會在跟網友們分享jQuery的語法與使用方式。在此先介紹個不錯的網站，可以把他當作是jQuery使用時的一個操作說明【&lt;a title="http://jquery.org.cn/visual/cn/index.xml" href="http://jquery.org.cn/visual/cn/index.xml"&gt;http://jquery.org.cn/visual/cn/index.xml&lt;/a&gt;】&lt;/p&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/56242.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>Dispose測試：Dispose時是否立即釋放記憶體</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/07/07/55796.aspx</link><pubDate>Mon, 07 Jul 2008 08:45:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/07/07/55796.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/55796.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/07/07/55796.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/55796.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/55796.aspx</trackback:ping><description>&lt;h1&gt;緣起：&lt;/h1&gt;&lt;p&gt;小喵寫這篇是源自於小喵上一篇文章【&lt;a href="http://www.dotblogs.com.tw/topcat/archive/2008/07/03/4427.aspx"&gt;物件Object的New,Dispose與Connection的Open,Close概念分享&lt;/a&gt;】，小喵最後描述【&lt;strong&gt;當物件Dispose的時候，並沒有把該段記憶體清空，只是標註，這段空間不再使用&lt;/strong&gt;，直到GC啟動把他清空才算真正的清空。】。但是小喵看一些網路文章時，有些卻提到當呼叫Dispose的時候，記憶體立即釋放。因此小喵就做這個測試來看看到底是怎麼回事。&lt;/p&gt;&lt;p&gt;測試計畫：&lt;/p&gt;&lt;p&gt;於是小喵寫了個小小的Console程式，然後裡面使用一個小類別，該類別在New的時候，讀取一個很大的文字檔，並且把文字檔的內容放到一個變數中。讓這個類別使用大量的記憶體。接著呼叫Dispose將物件釋放，最後呼叫GC.Collect強迫做資源回收。在這個過程中，小喵使用系統中的工具【效能】來監視這個程式的記憶體使用狀況，藉此來觀察Dispose時，是否立即釋放記憶體。&lt;/p&gt;&lt;h1&gt;程式準備：&lt;/h1&gt;&lt;p&gt;首先先寫個Console的程式，在專案中開啟一個【主控台應用程式&lt;a href="http://files.dotblogs.com.tw/topcat/0807/DisposeDispose_AE0D/xx2_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="22" alt="xx2" width="128" border="0" src="http://files.dotblogs.com.tw/topcat/0807/DisposeDispose_AE0D/xx2_thumb.jpg" /&gt;&lt;/a&gt; 】，然後在專案中新增一個類別，這個類別因為需要有Dispose的功能，因此小喵【Implements System.IDisposable】的介面，讓這個類別有可以進行Dispose，接著安排屬性，撰寫New時的讀取文字檔內容。相關程式如下：&lt;/p&gt;&lt;p&gt;Class:myTestObj&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:579dcf02-9145-4c8a-a7bc-1a7bc29fe779" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre class="vb" name="code"&gt;
Imports System.IO

Public Class myTestObj
    Implements System.IDisposable

    Private m_TestStr As String

    Public Property TestStr() As String
        Get
            Return m_TestStr
        End Get
        Set(ByVal value As String)
            m_TestStr = value
        End Set
    End Property

    Public Sub New()

    End Sub
    Public Sub New(ByVal myFileName As String)
        m_TestStr = My.Computer.FileSystem.ReadAllText(myFileName)
    End Sub

    Private disposedValue As Boolean = False        ' 偵測多餘的呼叫

    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ' TODO: 釋放其他狀態 (Managed 物件)。
                m_TestStr = &amp;quot;&amp;quot;
            End If

            ' TODO: 釋放您自己的狀態 (Unmanaged 物件)
            ' TODO: 將大型欄位設定為 null。
        End If
        Me.disposedValue = True
    End Sub

#Region &amp;quot; IDisposable Support &amp;quot;
    ' 由 Visual Basic 新增此程式碼以正確實作可處置的模式。
    Public Sub Dispose() Implements IDisposable.Dispose
        ' 請勿變更此程式碼。在以上的 Dispose 置入清除程式碼 (ByVal 視為布林值處置)。
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region

End Class
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接著在Console程式中，就使用該類別，之後Dispose接著呼叫GC.Collect做資源回收，程式如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:01b1bb89-a2ee-49e5-9ac0-99597195efc7" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre class="vb" name="code"&gt;
Module Module1
    Sub Main()
        Dim oTest As myTestObj
        Try
            oTest = New myTestObj(&amp;quot;xx.txt&amp;quot;)
        Catch ex As Exception

        Finally
            oTest.Dispose()
            GC.Collect()
        End Try
    End Sub
End Module
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;剩下就是準備一個夠大的文字檔，讓記憶體的使用比較明顯，小喵準備一個23MB的文字檔&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.dotblogs.com.tw/topcat/0807/DisposeDispose_AE0D/xx_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="25" alt="xx" width="510" border="0" src="http://files.dotblogs.com.tw/topcat/0807/DisposeDispose_AE0D/xx_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;接著就是測試的開始囉&lt;/p&gt;&lt;p&gt;先開啟【控制台】中的【系統管理工具】找到【可靠性和效能監視器】&lt;a href="http://files.dotblogs.com.tw/topcat/0807/DisposeDispose_AE0D/xx3_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="87" alt="xx3" width="75" border="0" src="http://files.dotblogs.com.tw/topcat/0807/DisposeDispose_AE0D/xx3_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;然後按下F11讓程式啟動，接著在校能監視器中，新增一個監視，選擇【Process】，接著選擇【PageFileBytes】，並選擇我們的Process【ConsoleApplication1.vshost】藉此觀察記憶體的使用狀況。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h1&gt;測試結果：&lt;/h1&gt;&lt;p&gt;測試過程小喵錄製下來，請參考以下的錄影過程&lt;/p&gt;&lt;p&gt;&lt;a title="http://vip2.blueshop.com.tw/topcat/DEMO/Dispose_GC/Dispose_GC.html" target="_blank" href="http://vip2.blueshop.com.tw/topcat/DEMO/Dispose_GC/Dispose_GC.html"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/Dispose_GC/Dispose_GC.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;相關的程式碼，您可以到按此下載&lt;/p&gt;&lt;p&gt;&lt;a title="http://vip2.blueshop.com.tw/topcat/DEMO/Dispose_GC/ConsoleApplication1.rar" target="_blank" href="http://vip2.blueshop.com.tw/topcat/DEMO/Dispose_GC/ConsoleApplication1.rar"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/Dispose_GC/ConsoleApplication1.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;從錄影的過程觀察到，當系統進行完Dispose之後，事實上記憶體並沒有立即釋放，而是直到呼叫了GC.collect之後才真正的釋放。&lt;/p&gt;&lt;p&gt;特別聲明：&lt;/p&gt;&lt;p&gt;GC.Collect方法是強制作業系統做資源回收的動作，不過&lt;font color="#ff0000"&gt;&lt;strong&gt;請您在寫程式的時候不要這麼做&lt;/strong&gt;&lt;/font&gt;，因為GC.Collect作用的區域並不只有你的程式部分，而是整個系統。並且這個動作是強制性的。再進行這個過程中，由於需要對全部的東西強制資源回收，所以&lt;strong&gt;該主機上其他的動作會等他做完之後再開始&lt;/strong&gt;。其實這個動作.NET Framework自己會依照系統的狀況自己處理。手動處理反而可能造成系統的負擔(想想馬路上隨時有救護車跑來跑去，頻率很高，大家都要停下來等他過)。因此寫程式時，只要使用Dispose讓系統標注這個記憶體可以被使用即可。有需要的時候讓系統自然啟動去清除。不要手動清除他。&lt;/p&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/55796.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>GridView編輯時使用DropDownList的錄影教學</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/07/04/55750.aspx</link><pubDate>Fri, 04 Jul 2008 10:55:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/07/04/55750.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/55750.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/07/04/55750.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/55750.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/55750.aspx</trackback:ping><description>&lt;p&gt;這個功能應該蠻多人會用到的，在GridView的某一筆資料點選【編輯】之後，希望能夠用下拉選取的方式選擇資料，然後按下更新後，可以將下拉後的選項更新到資料庫&lt;/p&gt; &lt;p&gt;全部過程都用設定的方式，並不需要寫任何程式碼，適合初學者學習。&lt;/p&gt; &lt;p&gt;小喵以Orders以及裡面的CustomerID維護時，使用下拉選單，從Customers選取適當的資料當作範例&lt;/p&gt; &lt;p&gt;設定過程請參考以下的錄影過程&lt;/p&gt; &lt;p&gt;&lt;a title="http://vip2.blueshop.com.tw/topcat/DEMO/DdlInGV/DdlInGV.html" href="http://vip2.blueshop.com.tw/topcat/DEMO/DdlInGV/DdlInGV.html" target="_blank"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/DdlInGV/DdlInGV.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;範例檔下載：&lt;a title="http://vip2.blueshop.com.tw/topcat/DEMO/DdlInGV/tDDLInGV.zip" href="http://vip2.blueshop.com.tw/topcat/DEMO/DdlInGV/tDDLInGV.zip" target="_blank"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/DdlInGV/tDDLInGV.zip&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/55750.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>物件Object的New,Dispose與Connection的Open,Close概念分享</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/07/03/55733.aspx</link><pubDate>Thu, 03 Jul 2008 16:27:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/07/03/55733.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/55733.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/07/03/55733.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/55733.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/55733.aspx</trackback:ping><description>&lt;p&gt;這篇文章源自於有位網友對於Using的疑問(&lt;a title="http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080703145519KXS&amp;amp;fumcde=FUM20041006161839LRJ" href="http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080703145519KXS&amp;amp;fumcde=FUM20041006161839LRJ"&gt;http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080703145519KXS&amp;amp;fumcde=FUM20041006161839LRJ&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;小喵就小喵的認知來說明，不見得正確，如有錯誤請大家指正，感恩&lt;/p&gt;&lt;h1&gt;什麼是New&lt;/h1&gt;&lt;p&gt;我們經常可以看到有人使用一個物件的時候會寫&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6c28b5f7-ec51-41e2-91e6-5b1e05bd26da" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre class="vb" name="code"&gt;
Dim oEmp as ObjEmployee
oEmp = New ObjEmployee
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;而且少了New就不能執行，那麼什麼是New呢 &lt;a href="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E5%97%AF_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="嗯" width="54" border="0" src="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E5%97%AF_thumb.gif" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;New&lt;/font&gt;&lt;/strong&gt;是產生執行個體，不過相信很多人又要問，什麼是【&lt;strong&gt;&lt;font color="#0000ff"&gt;產生執行個體&lt;/font&gt;&lt;/strong&gt;】 (能不能講明白一點啊!!&lt;a href="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E7%81%AB%E5%A4%A7_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="火大" width="54" border="0" src="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E7%81%AB%E5%A4%A7_thumb.gif" /&gt;&lt;/a&gt; ) &lt;br /&gt;這要提到電腦的程式運作過程。程式在電腦上跑，會把程式的區段，在記憶體裡面挖一塊空間，然後把程式碼載入那塊空間 &lt;br /&gt;接著程式在運作的時候，就是記憶體與CPU之間溝通、運算、記錄等動作，而把【&lt;strong&gt;&lt;font color="#0000ff"&gt;挖塊記憶體，把程式載到那塊空間&lt;/font&gt;&lt;/strong&gt;】這個過程就是【&lt;strong&gt;&lt;font color="#0000ff"&gt;產生執行個體&lt;/font&gt;&lt;/strong&gt;】。 &lt;br /&gt;因此沒有New的話會怎樣，程式區塊根本沒有載入到記憶體中，因此也無法運作執行&lt;/p&gt;&lt;p&gt;講的擬人化一點&lt;/p&gt;&lt;p&gt;Dim oEmp as ObjEmployee&amp;nbsp; '宣告oEmp是ObjEmployee這種物件類別(此時有魂無體)&lt;a href="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E6%9C%89%E9%AC%BC_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="有鬼" width="54" border="0" src="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E6%9C%89%E9%AC%BC_thumb.gif" /&gt;&lt;/a&gt; &lt;br /&gt;oEmp = New ObjEmployee&amp;nbsp;&amp;nbsp; '產生執行個體(此時投胎轉世，靈魂變成實體，可以開始工作)&lt;a href="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E6%9C%89%E4%B8%80%E5%A5%97_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="有一套" width="54" border="0" src="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E6%9C%89%E4%B8%80%E5%A5%97_thumb.gif" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h1&gt;什麼是Dispose&lt;/h1&gt;&lt;p&gt;&lt;br /&gt;當一個物件已經使用完後，未來不會再使用，此時這個物件已經完成他這一生(New完之後到現在)的任務。因此他可以塵歸塵、土歸土...一切還諸天地...此時就進行Dispose &lt;a href="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E6%9C%89%E9%AC%BC_4.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="有鬼" width="54" border="0" src="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E6%9C%89%E9%AC%BC_thumb_1.gif" /&gt;&lt;/a&gt; &lt;br /&gt;然而實際上，在記憶體中，&lt;strong&gt;當物件Dispose的時候，並沒有把該段記憶體清空，只是標註，這段空間不再使用&lt;/strong&gt;，直到GC啟動把他清空才算真正的清空。 &lt;br /&gt;因此如果用完後，不進行Dispose...那麼就會等到該位置很久沒動作了(就像有個人躺在地上，已經超過一定時間(一個月??)沒動作，也沒呼吸)，才會被其他的程式拿來用。&lt;/p&gt;&lt;p&gt;以上說明的是New(生)與Dispose(死)的關係&lt;/p&gt;&lt;hr /&gt;&lt;h1&gt;什麼是Open&lt;/h1&gt;&lt;p&gt;&lt;br /&gt;當你有了實體後，代表可以開始運作 &lt;br /&gt;但不是真的已經運作了 &lt;br /&gt;以Connecion來說&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5194bae2-d5af-48fe-a9f8-dcd0e1d84fe6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre class="vb" name="code"&gt;
Using Conn As New Connetion(ConnStr)
    'Conn.Open
    Dim Dr as SqlDataReader
    Using Cmmd as New SqlCommand(&amp;quot;Select...&amp;quot;,Conn)
        Dr = Cmmd.ExecuteReader
    End Using
End Using
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面這段程式會出錯，他告訴你...Connection沒有Open，也就例如您&lt;strong&gt;&lt;font color="#0000ff"&gt;建立了一個橋&lt;/font&gt;&lt;/strong&gt;，但是這座橋卻&lt;strong&gt;&lt;font color="#0000ff"&gt;沒有通車&lt;/font&gt;&lt;/strong&gt;，因此也沒辦法用。因此使用DataReader或者Cmmd.ExecuteNoneQuery的時候，都需要告訴他已經通車了...他才會正常運作。&lt;/p&gt;&lt;p&gt;而如果使用&lt;strong&gt;&lt;font color="#0000ff"&gt;DataAdapter&lt;/font&gt;&lt;/strong&gt;的話這個傢伙比較厲害...&lt;a href="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E8%AE%9A_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="讚" width="54" border="0" src="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E8%AE%9A_thumb.gif" /&gt;&lt;/a&gt; 他會看有沒有通車，有通車他就用；沒通車的話，他會&lt;strong&gt;自己把這通道打開&lt;/strong&gt;，然後去使用。&lt;/p&gt;&lt;h1&gt;最後說什麼是Close...&lt;/h1&gt;&lt;p&gt;Close是關閉通道，通道關了是可以再開的唷。 &lt;br /&gt;然後跟上面的Dispose再比對一下： &lt;br /&gt;Close只是把通道關閉 &lt;br /&gt;Dispose卻是通知作業系統...我已經完成任務，這段記憶體你可以拿去再用...然後壽終正寢 &lt;br /&gt;知道不一樣在哪了嗎??&lt;a href="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E5%B9%B8%E7%A6%8F_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="幸福" width="54" border="0" src="http://files.dotblogs.com.tw/topcat/0807/ConnectionNewDisposeOpenClose_E240/%E5%B9%B8%E7%A6%8F_thumb.gif" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/55733.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>ObjectDataSouce簡介Part 2：範例程式(含畫面設定錄影教學)</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/07/01/55660.aspx</link><pubDate>Tue, 01 Jul 2008 08:43:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/07/01/55660.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/55660.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/07/01/55660.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/55660.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/55660.aspx</trackback:ping><description>&lt;p&gt;承繼上篇【&lt;a href="http://www.dotblogs.com.tw/topcat/archive/2008/06/27/4395.aspx"&gt;ObjectDataSouce簡介Part1：兼具ADO.NET的自由與DataSouce的方便&lt;/a&gt;】，我們這篇就來拿個實際範例，告訴各位如何撰寫相關的程式。&lt;/p&gt;

&lt;p&gt;首先介紹上次提到的這樣的方式&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods02_2.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;先示範如何撰寫類別的部分。&lt;/p&gt;

&lt;p&gt;首先，小喵建立一個物件用來讀取Connection String，未來無論Connection String用什麼方式來存放(存放的方式很多，可以直接放在物件中，也可放在Web.Config，小喵自己是存在沒有Web分享的硬碟裡)，都可以透過這個物件來取得Connection String。&lt;/p&gt;

&lt;p&gt;在專案中新增一個類別，取名為【objConnS.vb】，內容如下：&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; Microsoft.VisualBasic

&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; objConnS
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; m_ConnStr &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;&amp;quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;Integrated Security=True;User Instance=True&amp;quot;&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;ReadOnly&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; ConnStr() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; m_ConnStr
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;接著開始撰寫資料存取的類別(我們以北風資料庫中的Customers當作示範，示範時只取其中四個欄位當範例)，小喵取名為【daoCustomer.vb】，裡面寫了5個副程式，其中兩個Select用的用Function，剩下3個新增修改刪除不需要傳回值，就用Sub即可(當然如果想傳回值用Function也可)。程式內容如下：&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;GetAllCusts()：用DataTable傳回所有的Customers&lt;/li&gt;

  &lt;li&gt;GetCustByID(ByVal CustomerID As String)：用參數傳入條件CustomerID，傳回符合條件的一筆，這可以用來當作是單筆維護的處理&lt;/li&gt;

  &lt;li&gt;UpdateCustomers,InsertCustomers,DeleteCustomers這三個則是透過參數傳遞要新增修改刪除的相關資料，然後透過ADO.NET維護資料。&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Data
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Data.SqlClient
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; Microsoft.VisualBasic

&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; daoCustomer

    &lt;span class="kwrd"&gt;Private&lt;/span&gt; oConnS &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; objConnS
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; ConnStr &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = oConnS.ConnStr


    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetAllCusts() &lt;span class="kwrd"&gt;As&lt;/span&gt; DataTable
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            Using Conn &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlConnection(ConnStr)
                Conn.Open()
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; SqlTxt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; SELECT  CustomerID,  CompanyName,  ContactName,  City  &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; FROM Customers &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;  &amp;quot;&lt;/span&gt;

                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; Dt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; DataTable
                Using Cmmd &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlCommand(SqlTxt, Conn)
                    Dt.Load(Cmmd.ExecuteReader)
                &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
                &lt;span class="kwrd"&gt;Return&lt;/span&gt; Dt

            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Exception(ex.Message)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetCustByID(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; CustomerID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; DataTable
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; CustomerID &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                CustomerID = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            Using Conn &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlConnection(ConnStr)
                Conn.Open()
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; SqlTxt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; SELECT CustomerID,  CompanyName,  ContactName,  City &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; FROM Customers &amp;quot;&lt;/span&gt;
                &lt;span class="kwrd"&gt;If&lt;/span&gt; CustomerID &amp;lt;&amp;gt; &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    SqlTxt += &lt;span class="str"&gt;&amp;quot; WHERE CustomerID = @CustomerID &amp;quot;&lt;/span&gt;
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;  &amp;quot;&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; Dt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; DataTable
                Using Cmmd &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlCommand(SqlTxt, Conn)
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; CustomerID &amp;lt;&amp;gt; &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@CustomerID&amp;quot;&lt;/span&gt;, CustomerID)
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                    Dt.Load(Cmmd.ExecuteReader)
                &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
                &lt;span class="kwrd"&gt;Return&lt;/span&gt; Dt

            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Exception(ex.Message)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;

    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; UpdateCustomers(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; CustomerID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; CompanyName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; ContactName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; City &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; CustomerID &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                CustomerID = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; CompanyName &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                CompanyName = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; ContactName &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                ContactName = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; City &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                City = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            Using Conn &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlConnection(ConnStr)
                Conn.Open()
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; SqlTxt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; UPDATE Customers &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; SET CompanyName = @CompanyName &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;     ,ContactName = @ContactName &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;     ,City = @City &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; WHERE CustomerID = @CustomerID &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;  &amp;quot;&lt;/span&gt;
                Using Cmmd &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlCommand(SqlTxt, Conn)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@CompanyName&amp;quot;&lt;/span&gt;, CompanyName)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@ContactName&amp;quot;&lt;/span&gt;, ContactName)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@City&amp;quot;&lt;/span&gt;, City)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@CustomerID&amp;quot;&lt;/span&gt;, CustomerID)
                    Cmmd.ExecuteNonQuery()
                &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Exception(ex.Message)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; InsertCustomers(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; CustomerID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; CompanyName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; ContactName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; City &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; CustomerID &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                CustomerID = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; CompanyName &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                CompanyName = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; ContactName &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                ContactName = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; City &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                City = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

            Using Conn &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlConnection(ConnStr)
                Conn.Open()
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; SqlTxt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; INSERT INTO Customers &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;     (CustomerID, CompanyName, ContactName, City) &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; VALUES (@CustomerID, @CompanyName, @ContactName, @City) &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;  &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;  &amp;quot;&lt;/span&gt;
                Using Cmmd &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlCommand(SqlTxt, Conn)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@CompanyName&amp;quot;&lt;/span&gt;, CompanyName)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@ContactName&amp;quot;&lt;/span&gt;, ContactName)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@City&amp;quot;&lt;/span&gt;, City)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@CustomerID&amp;quot;&lt;/span&gt;, CustomerID)
                    Cmmd.ExecuteNonQuery()

                &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Exception(ex.Message)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; DeleteCustomers(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; CustomerID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            Using Conn &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlConnection(ConnStr)
                Conn.Open()
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; SqlTxt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; DELETE Customers &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot; WHERE CustomerID = @CustomerID &amp;quot;&lt;/span&gt;
                SqlTxt += &lt;span class="str"&gt;&amp;quot;  &amp;quot;&lt;/span&gt;
                Using Cmmd &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlCommand(SqlTxt, Conn)
                    Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@CustomerID&amp;quot;&lt;/span&gt;, CustomerID)
                    Cmmd.ExecuteNonQuery()

                &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
            &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Exception(ex.Message)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;其中為了避免程式一開始，傳遞的參數是Nothing造成程式的錯誤，因此在程式中判斷如果傳入的參數是Nothing，就給預設值。&lt;/p&gt;

&lt;p&gt;寫好了物件後，接著就來看怎麼編輯畫面，怎麼設定ObjectDataSouce，怎麼讓物件控制相透過我們寫好的程式動起來。這部分請參考以下的錄影說明。(包含畫面設定、錯誤處理等)&lt;/p&gt;

&lt;p&gt;錄影： &lt;a title="http://vip2.blueshop.com.tw/topcat/DEMO/tObjectDataSouce/tObjectDataSouce.html" href="http://vip2.blueshop.com.tw/topcat/DEMO/tObjectDataSouce/tObjectDataSouce.html" target="_blank"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/tObjectDataSouce/tObjectDataSouce.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;範例程式下載：&lt;a title="http://vip2.blueshop.com.tw/topcat/DEMO/tObjectDataSouce/tObjectDataSouce.html" href="http://vip2.blueshop.com.tw/topcat/DEMO/tObjectDataSouce/tObjectDataSouce.zip" target="_blank"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/tObjectDataSouce/tObjectDataSouce.zip&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;而如果是結合商用物件的方式&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods03_thumb.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;請參考小喵的另外一篇文章裡面有範例&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://www.dotblogs.com.tw/topcat/archive/2008/06/20/4346.aspx" target="_blank"&gt;ObjectDataSouce結合物件設計方式&lt;/a&gt;&lt;/p&gt;
&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/55660.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>ObjectDataSouce簡介Part1：兼具ADO.NET的自由與DataSouce的方便</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/07/01/55659.aspx</link><pubDate>Tue, 01 Jul 2008 08:43:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/07/01/55659.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/55659.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/07/01/55659.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/55659.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/55659.aspx</trackback:ping><description>&lt;p&gt;一般市面上介紹的書籍，大部分都會從SqlDataSouce與GridView,DetailView等DataControl來介紹，當然這些東西很方便，可以在最少的程式碼的情況下，做出新增修改刪除查詢。但是，事實上在專案開發下並非如想像中這麼美好，您不會永遠都是處理單一資料表的新增修改刪除查詢。當遇到要處理兩個資料表以上的時候，又該如何呢??&lt;/p&gt;&lt;p&gt;在ASP.NET 2.0裡面多了一個ObjectDataSouce，這個東西可以讓我們在處理資料的時候，可以透過自己寫的程式，或者已經開發好的物件來撰寫。&lt;/p&gt;&lt;p&gt;我們從以下的示意圖來看：&lt;/p&gt;&lt;p&gt;1.SqlDataSouce：&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods01_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="131" alt="ods01" width="612" border="0" src="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods01_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;SqlDataSouce透過Select,Insert,Update,Delete四種Command設定來存取資料&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.使用ObjectDataSouce&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods02_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="130" alt="ods02" width="609" border="0" src="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods02_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;ObjectDataSouce則是透過指定的類別、以及類別中所撰寫的Method(Function/Sub)來處理，其中Select必須傳回結果，傳回的結果可以用這幾種方式【DataReader、DataSet、DataTable、DavaView、Collection Objects(物件集合)】，也就是一般在寫Me.GridView1.DataSouce=XXXX這裡可以傳入的型態。而其他Insert,Update,Delete則是需要配合傳遞要維護的資料，並在裡面透過ADO.NET存取資料。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.使用ObjectDataSouce配合Business Object(*.dll/Class)&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods03_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="84" alt="ods03" width="607" border="0" src="http://files.dotblogs.com.tw/topcat/0806/ObjectDataSoucePart1ADO.NETDataSouce_76BC/ods03_thumb.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;可以再把資料的存取、以及一些商業邏輯抽出來，寫成一些商用物件，然後在寫個類別來運用這些商用物件，與ObjectDataSouce結合。&lt;/p&gt;&lt;p&gt;從這邊我們可以了解，使用ObjectDataSouce，可以自己撰寫程式來做資料的存取。能夠依照自己的需求來撰寫程式，讓系統能夠更靈活的應用。又可以透過DataSouce的機制，與資料控制項(例如GridView,DetailView,FormView等)結合。讓界面的部分能夠將程式減少，應用更為便利。可說是【兼具ADO.NET的自由與DataSouce的方便】。&lt;/p&gt;&lt;p&gt;至於2.3的方式如何撰寫，我們將在另外的文章中介紹。&lt;/p&gt;&lt;p&gt;^_^&lt;/p&gt;&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/55659.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>topcat</dc:creator><title>GridView展現Head,Detail的幾種方式(包含動態錄影教學)</title><link>http://blog.blueshop.com.tw/topcat/archive/2008/06/20/55364.aspx</link><pubDate>Fri, 20 Jun 2008 11:54:00 GMT</pubDate><guid>http://blog.blueshop.com.tw/topcat/archive/2008/06/20/55364.aspx</guid><wfw:comment>http://blog.blueshop.com.tw/topcat/comments/55364.aspx</wfw:comment><comments>http://blog.blueshop.com.tw/topcat/archive/2008/06/20/55364.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.blueshop.com.tw/topcat/comments/commentRss/55364.aspx</wfw:commentRss><trackback:ping>http://blog.blueshop.com.tw/topcat/services/trackbacks/55364.aspx</trackback:ping><description>&lt;p&gt;資料表設計經常會有Head,Detail的設計，拿最普遍的範例(北風資料庫)來看。訂單就有分為訂單Head檔(Orders)與訂單Detail明細(Order Details)這兩個資料表。當然這樣的資料表示有關係的，已訂單為例的話，關係就是訂單編號(OrderID)&lt;/p&gt;

&lt;p&gt;那麼如何在畫面上展現這樣的資料呢，小喵整理以下幾種&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;GridView多筆顯示Orders，點選某一筆訂單時，另一GridView顯示該訂單的明細 &lt;/li&gt;

  &lt;li&gt;GridView包GridView的巢狀顯示 &lt;/li&gt;

  &lt;li&gt;GridView多筆顯示Orders，點選某一筆時，在GridView裡面增加一個Row顯示該訂單的明細 &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;各方式的設計方式如下&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;1.GridView多筆顯示Orders，點選某一筆訂單時，另一GridView顯示該訂單的明細&lt;/p&gt;

&lt;p&gt;這個透過拖拉放、設定一下就OK了，完全不用寫到程式，請看以下的錄影教學&lt;/p&gt;

&lt;p&gt;&lt;a href="http://vip2.blueshop.com.tw/topcat/DEMO/DemoHeadDetail/DemoHeadDetail1.html" target="_blank"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/DemoHeadDetail/DemoHeadDetail1.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;2.GridView包GridView的巢狀顯示&lt;/p&gt;

&lt;p&gt;這種方式寫的程式也很少，之前有一篇已經介紹過，請參考以下連結&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.dotblogs.com.tw/topcat/archive/2008/04/30/3755.aspx" target="_blank"&gt;http://www.dotblogs.com.tw/topcat/archive/2008/04/30/3755.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;3.GridView多筆顯示Orders，點選某一筆時，在GridView裡面增加一個Row顯示該訂單的明細&lt;/p&gt;

&lt;p&gt;這個方式程式碼會多一點點，因為要動態的撰寫增加GridRow以及用程式碼動態的產生Details的GridView&lt;/p&gt;

&lt;p&gt;畫面的準備過程請看以下的錄影&lt;/p&gt;

&lt;p&gt;&lt;a href="http://vip2.blueshop.com.tw/topcat/DEMO/DemoHeadDetail/DemoHeadDetail2.html" target="_blank"&gt;http://vip2.blueshop.com.tw/topcat/DEMO/DemoHeadDetail/DemoHeadDetail2.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;其中在GridView的RowDataBound事件中的程式碼如下：&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;Protected&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; gvOrders_RowDataBound(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Web.UI.WebControls.GridViewRowEventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; gvOrders.RowDataBound
        &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; (ViewState(&lt;span class="str"&gt;&amp;quot;cOrderID&amp;quot;&lt;/span&gt;) &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; e.Row.RowType = DataControlRowType.DataRow &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; drv &lt;span class="kwrd"&gt;As&lt;/span&gt; DataRowView = e.Row.DataItem
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; OrderID &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;CStr&lt;/span&gt;(ViewState(&lt;span class="str"&gt;&amp;quot;cOrderID&amp;quot;&lt;/span&gt;))
                &lt;span class="rem"&gt;'判斷訂單編號相同的Row才要處理&lt;/span&gt;
                &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;CStr&lt;/span&gt;(drv.Item(&lt;span class="str"&gt;&amp;quot;OrderID&amp;quot;&lt;/span&gt;)) = OrderID &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    &lt;span class="rem"&gt;'取得連接字串&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ConnStr &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = Web.Configuration.WebConfigurationManager.ConnectionStrings(&lt;span class="str"&gt;&amp;quot;NWind&amp;quot;&lt;/span&gt;).ConnectionString
                    &lt;span class="rem"&gt;'建立DataTable物件&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; Dt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; DataTable
                    &lt;span class="rem"&gt;'建立Connection&lt;/span&gt;
                    Using Conn &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlConnection(ConnStr)
                        &lt;span class="rem"&gt;'設定查詢語法&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; SqlTxt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                        SqlTxt += &lt;span class="str"&gt;&amp;quot; SELECT * &amp;quot;&lt;/span&gt;
                        SqlTxt += &lt;span class="str"&gt;&amp;quot; FROM [Order Details] &amp;quot;&lt;/span&gt;
                        SqlTxt += &lt;span class="str"&gt;&amp;quot; WHERE OrderID = @OrderID &amp;quot;&lt;/span&gt;
                        &lt;span class="rem"&gt;'建立Command物件&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; Cmmd &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlCommand(SqlTxt, Conn)
                        &lt;span class="rem"&gt;'設定參數&lt;/span&gt;
                        Cmmd.Parameters.AddWithValue(&lt;span class="str"&gt;&amp;quot;@OrderID&amp;quot;&lt;/span&gt;, ViewState(&lt;span class="str"&gt;&amp;quot;cOrderID&amp;quot;&lt;/span&gt;))
                        &lt;span class="rem"&gt;'建立DataAdapter&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; Da &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; SqlDataAdapter(Cmmd)
                        Da.Fill(Dt)
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; Using
                    &lt;span class="rem"&gt;'建立Detail的GridView&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; gvDetail &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; GridView
                    &lt;span class="rem"&gt;'指定資料來源&lt;/span&gt;
                    gvDetail.DataSource = Dt
                    &lt;span class="rem"&gt;'設定自動產生欄位&lt;/span&gt;
                    gvDetail.AutoGenerateColumns = &lt;span class="kwrd"&gt;True&lt;/span&gt;
                    &lt;span class="rem"&gt;'資料繫結&lt;/span&gt;
                    gvDetail.DataBind()

                    &lt;span class="rem"&gt;'產生新的GridViewRow&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; gvRow &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; GridViewRow(0, -1, DataControlRowType.DataRow, DataControlRowState.Normal)
                    &lt;span class="rem"&gt;'建立一個Cell&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; tCell &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; TableCell
                    tCell.Controls.Add(gvDetail)
                    &lt;span class="rem"&gt;'設定合併Cell&lt;/span&gt;
                    tCell.Attributes.Add(&lt;span class="str"&gt;&amp;quot;colspan&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;7&amp;quot;&lt;/span&gt;)
                    &lt;span class="rem"&gt;'設定置中&lt;/span&gt;
                    tCell.Attributes.Add(&lt;span class="str"&gt;&amp;quot;align&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;center&amp;quot;&lt;/span&gt;)
                    &lt;span class="rem"&gt;'Cell放入GridViewRow&lt;/span&gt;
                    gvRow.Cells.Add(tCell)
                    &lt;span class="rem"&gt;'GridViewRow放到GridView中&lt;/span&gt;
                    e.Row.Parent.Controls.AddAt(e.Row.RowIndex + 2, gvRow)
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	width:640px;height:400px;
	overflow:scroll;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;最後相關的程式碼附在這裡&lt;/p&gt;

&lt;p&gt;&lt;a href="http://cid-8b18e2aead63b0da.skydrive.live.com/self.aspx/%e7%a8%8b%e5%bc%8f%e7%af%84%e4%be%8b%e8%88%87%e5%8b%95%e7%95%ab%e8%aa%aa%e6%98%8e/DemoHeadDetail" target="_blank"&gt;tHeadDetail.zip&lt;/a&gt;&lt;/p&gt;
&lt;img src ="http://blog.blueshop.com.tw/topcat/aggbug/55364.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>