<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7321224742622887262</id><updated>2012-02-09T16:45:17.832+08:00</updated><category term='Me'/><category term='Project Management System'/><category term='Fixed Header'/><category term='Code Tool'/><category term='Custom Editor'/><category term='DataTemplate'/><category term='Subversion'/><category term='T4 Text Templates'/><category term='GridView'/><category term='Custom Task'/><category term='Custom Field'/><category term='Custom Server Control'/><category term='Web Deploy'/><category term='UI'/><category term='Freeze Column'/><category term='SharePoint 2010'/><category term='DeploySolution'/><category term='Vsix'/><category term='MSBuild'/><category term='Visual Studio 2010'/><category term='CodeReview'/><category term='ASP.NET'/><category term='WebControl'/><category term='控制項'/><title type='text'>Likol Lee</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>47</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6472177014687476427</id><published>2012-01-09T14:21:00.006+08:00</published><updated>2012-01-09T14:58:59.055+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management System'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeReview'/><title type='text'>Project Management System - 專案管理系統 (五) - CodeReview 與 Subversion</title><content type='html'>在先前的&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/12/project-management-system-subversion.html"&gt;Project Management System - 專案管理系統 (三) - 整合Subversion&lt;/a&gt;中,我透過了AnkhSVN與Subversion來達到Check-In程式碼時,需要選取相對應的工作項目,以利程式碼與工作項目的追蹤.&lt;br /&gt;&lt;br /&gt;這時我又想起了另外的一個功能"Code Review",在目前正式發表的Visual Studio中並沒有內建此項功能,不過就我所知,在下一版中就會有這項功能了.一方面要跟現在開發的Project Management System整合的話,只有重頭進行開發了.&lt;br /&gt;&lt;br /&gt;在開始介紹前,目前的功能將會檢查幾項條件&lt;br /&gt;[*] 開啟的方案必須已經Check-In到Source Control中(Subversion)&lt;br /&gt;[*] 方案必須已經有指定Issue Tracker Setup(AnkhSVN設定)&lt;br /&gt;&lt;br /&gt;另外,存取資料的介面都是透過一個WCF的服務來進行處理.&lt;br /&gt;&lt;br /&gt;1. 開啟方案後,先選取我們要建立CodeReview的程式碼,使用右鍵選擇"CodeReview -&gt; Create Review Item".&lt;br /&gt;&lt;a target="_blank" href="http://1.bp.blogspot.com/-jsVLkGMqIXQ/TwqPpIwcK9I/AAAAAAAAArY/h6ngrcr6bLk/s1600/Capture1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-jsVLkGMqIXQ/TwqPpIwcK9I/AAAAAAAAArY/h6ngrcr6bLk/s320/Capture1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522615651478482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 在跳出的視窗中填入相關資料,選擇Send就會建立該項目.&lt;br /&gt;&lt;a target="_blank" href="http://1.bp.blogspot.com/-0Zpua418Xd0/TwqPo0IJumI/AAAAAAAAArQ/8ADqZQVA6O8/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-0Zpua418Xd0/TwqPo0IJumI/AAAAAAAAArQ/8ADqZQVA6O8/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522610113788514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 完成後,在Visual Studio的View的選單中找到一個Code Review的項目並點選.&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-MfuorY8wTks/TwqPoiYpytI/AAAAAAAAArE/F5LPjHV3QY0/s1600/Capture3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-MfuorY8wTks/TwqPoiYpytI/AAAAAAAAArE/F5LPjHV3QY0/s320/Capture3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522605351160530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 在Code Review的視窗中有預設的兩個項目&lt;br /&gt;[*] Solution: 目前開啟方案中的所有CodeReview項目&lt;br /&gt;[*] Active Document: 目前編輯中檔案的CodeReview項目&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-DfHsDMO4CvI/TwqPoW7SEaI/AAAAAAAAAq4/7WkGMObHJFw/s1600/Capture4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-DfHsDMO4CvI/TwqPoW7SEaI/AAAAAAAAAq4/7WkGMObHJFw/s320/Capture4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522602275180962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. 在Code Review視窗中使用滑鼠DoubleClick要檢視的項目,會自動將當時建立所標記的程式碼重新標示出來,另外會開啟一個"Code Review Properties"的視窗,裡面記錄著建立時的一些資訊.&lt;br /&gt;&lt;a target="_blank" href="http://2.bp.blogspot.com/-Q805fECB6IQ/TwqPH9wWSBI/AAAAAAAAAqs/Mvay3bMSeTk/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-Q805fECB6IQ/TwqPH9wWSBI/AAAAAAAAAqs/Mvay3bMSeTk/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522045762619410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 選擇"Code Review Properties"視窗中的第二個Icon(Comment)則可以針對該項目進行意見的回應.&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-ljw48OzlKhI/TwqPHgEBYGI/AAAAAAAAAqg/q-oQqFE95ts/s1600/Capture6.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-ljw48OzlKhI/TwqPHgEBYGI/AAAAAAAAAqg/q-oQqFE95ts/s320/Capture6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522037792071778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://3.bp.blogspot.com/-LV6DwM2S8pM/TwqPHKu-lVI/AAAAAAAAAqY/IgXhQrA_aHs/s1600/Capture7.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-LV6DwM2S8pM/TwqPHKu-lVI/AAAAAAAAAqY/IgXhQrA_aHs/s320/Capture7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522032066663762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-byJ9Tua7nG4/TwqPGzn4OuI/AAAAAAAAAqE/JemjFiIhIFU/s1600/Capture8.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-byJ9Tua7nG4/TwqPGzn4OuI/AAAAAAAAAqE/JemjFiIhIFU/s320/Capture8.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522025862871778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. 另外,如果在點選Code Review項目時,該文件還沒有被開啟,則會自動開啟該檔案.&lt;br /&gt;&lt;a target="_blank" href="http://3.bp.blogspot.com/-wEgEPa2SaPc/TwqPGzhHlII/AAAAAAAAAp8/nTAJo05IQIs/s1600/Capture9.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-wEgEPa2SaPc/TwqPGzhHlII/AAAAAAAAAp8/nTAJo05IQIs/s320/Capture9.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5695522025834517634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Code Review項目是根據"檔案在Source Control的路徑"來進行對應,因此未來也可以與工作項目進行整合.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6472177014687476427?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6472177014687476427/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2012/01/project-management-system-codereview.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6472177014687476427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6472177014687476427'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2012/01/project-management-system-codereview.html' title='Project Management System - 專案管理系統 (五) - CodeReview 與 Subversion'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-jsVLkGMqIXQ/TwqPpIwcK9I/AAAAAAAAArY/h6ngrcr6bLk/s72-c/Capture1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-4555501016559802860</id><published>2012-01-03T00:35:00.008+08:00</published><updated>2012-01-03T01:35:47.890+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management System'/><title type='text'>Project Management System - 專案管理系統 (四) - Subversion 與 MSBuild</title><content type='html'>在上一篇&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/12/project-management-system-subversion.html"&gt;Project Management System - 專案管理系統 (三) - 整合Subversion&lt;/a&gt;中,使用Subversion來做為Source Control的工具,如果要做到像TFS可以建立Build的定義,然後自動建置能有什麼樣的方式來達到?&lt;br /&gt;&lt;br /&gt;經過一些搜尋和測試後,我採用了&lt;a target="_blank" href="http://sharpsvn.open.collab.net/"&gt;SharpSvn&lt;/a&gt;這個Library來進行程式碼的存取.&lt;br /&gt;&lt;br /&gt;1. Build的定義設定&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-5IhwzheaYAQ/TwHoKhPGJgI/AAAAAAAAAos/3AWkyHeSPog/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://4.bp.blogspot.com/-5IhwzheaYAQ/TwHoKhPGJgI/AAAAAAAAAos/3AWkyHeSPog/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693086671391041026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://1.bp.blogspot.com/-F1502rR2apQ/TwHoKuoPwGI/AAAAAAAAAok/RV01Bl6n1q0/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 194px;" src="http://1.bp.blogspot.com/-F1502rR2apQ/TwHoKuoPwGI/AAAAAAAAAok/RV01Bl6n1q0/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693086674986188898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;BuildFileName: 建置時的Visual Studio方案檔名稱&lt;br /&gt;SubversionPath: 要從Subversion中取得的程式碼路徑(包含路徑以下全部)&lt;br /&gt;OutputPath: 取出程式碼放置的路徑&lt;br /&gt;&lt;br /&gt;另外,則為建置完成後的佈署動作&lt;br /&gt;CopyOutput: 是否將建置完成的結果複製到指定路徑&lt;br /&gt;&lt;br /&gt;DeployFeature: 用於整合先前所提到的佈署機制,可先參考以下介紹:&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/10/aspnet-aspnet-deploy-solution.html"&gt;ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/aspnet-aspnet-deploy-solution.html"&gt;ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution (二)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;為了可以整合此功能,我已經在ASP.NET Deploy Solution網站中,新增了一個WCF的一些功能,可以透過WCF直接上傳包裝好的檔案進行安裝.&lt;br /&gt;&lt;br /&gt;選擇了DeployFeature的選項,可以填入上述的WCF Address,就可以在建置完成後直接進行自動佈署的作業.&lt;br /&gt;&lt;br /&gt;2. 當按下Build時,會將正在進行編譯的設定進行鎖定.&lt;br /&gt;&lt;a target="_blank" href="http://2.bp.blogspot.com/-_gMmRMt7Pcw/TwHnRUbpEKI/AAAAAAAAAno/wFO0B8diZzI/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 194px;" src="http://2.bp.blogspot.com/-_gMmRMt7Pcw/TwHnRUbpEKI/AAAAAAAAAno/wFO0B8diZzI/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693085688701456546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 實際上進行處理Build動作的則為一個Windows Service,主要功能:&lt;br /&gt;[*] 一個WCF服務,做為通知編譯的介面&lt;br /&gt;[*] 從Subversion中取回相關的程式碼檔案&lt;br /&gt;[*] MSBuild的執行&lt;br /&gt;&lt;br /&gt;4. 當編譯完成後就可以看到編譯過程中的相關記錄&lt;br /&gt;&lt;a target="_blank" href="http://2.bp.blogspot.com/-TwdnGBrEkpw/TwHnReMNedI/AAAAAAAAAn0/MNg1LEiR5CU/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 195px;" src="http://2.bp.blogspot.com/-TwdnGBrEkpw/TwHnReMNedI/AAAAAAAAAn0/MNg1LEiR5CU/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693085691321088466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. 相關輸出的檔案&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-OQ7GrnZntio/TwHnR6MRa0I/AAAAAAAAAoA/jwSVLg9_pUY/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://4.bp.blogspot.com/-OQ7GrnZntio/TwHnR6MRa0I/AAAAAAAAAoA/jwSVLg9_pUY/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693085698837539650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://3.bp.blogspot.com/-xDfImCXkRKU/TwHnSEK7PMI/AAAAAAAAAoM/5vDik4xNvlE/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://3.bp.blogspot.com/-xDfImCXkRKU/TwHnSEK7PMI/AAAAAAAAAoM/5vDik4xNvlE/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693085701516246210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 如1所提的DeployFeature功能,就會自動進行WebFeature的佈署&lt;br /&gt;&lt;a target="_blank" href="http://4.bp.blogspot.com/-DTiFImFm3Vw/TwHnSSCP-UI/AAAAAAAAAoU/MIiZeEZj9Y8/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 88px;" src="http://4.bp.blogspot.com/-DTiFImFm3Vw/TwHnSSCP-UI/AAAAAAAAAoU/MIiZeEZj9Y8/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5693085705237952834" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-4555501016559802860?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/4555501016559802860/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2012/01/project-management-system-subversion.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4555501016559802860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4555501016559802860'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2012/01/project-management-system-subversion.html' title='Project Management System - 專案管理系統 (四) - Subversion 與 MSBuild'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-5IhwzheaYAQ/TwHoKhPGJgI/AAAAAAAAAos/3AWkyHeSPog/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2367913484237351271</id><published>2011-12-08T16:45:00.008+08:00</published><updated>2012-01-03T01:27:05.870+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management System'/><title type='text'>Project Management System - 專案管理系統 (三) - 整合Subversion</title><content type='html'>在專案管理系統中已經定義了WorkItem(工作項目)的部份,但實際上更需要管理的是程式碼,而且必須將程式碼與工作項目有效的進行關連,這樣未來在維護上才能進行相關的追蹤,但該如何對應至原始碼管理系統呢?&lt;br /&gt;&lt;br /&gt;在這裡我採用的是Subversion的原始碼管理,Server是使用&lt;a target="_blank" href="http://www.open.collab.net/products/subversion/SVNedge.html"&gt;CollabNet Subversion Edge&lt;/a&gt;,Client整合Visual Studio 2010則是用&lt;a target="_blank" href="http://ankhsvn.open.collab.net/"&gt;AnkhSVN&lt;/a&gt;,採用AnkhSVN的原因是他有提供Extension的介面來進行相關的擴充,也才能達到此文章要做的功能.&lt;br /&gt;&lt;br /&gt;1. 加入專案到原始碼管理系統&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-7Hj4lg2q_zc/TuB_WnG2jrI/AAAAAAAAAnY/AnoIHJ89sbc/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-7Hj4lg2q_zc/TuB_WnG2jrI/AAAAAAAAAnY/AnoIHJ89sbc/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682756173139634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 加入後就可以看到目前等待簽入的檔案清單&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-aiwggC8W_EU/TuB_WVamTgI/AAAAAAAAAnM/5CpprE0yi1s/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-aiwggC8W_EU/TuB_WVamTgI/AAAAAAAAAnM/5CpprE0yi1s/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682751424122370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 這裡有一個關鍵的工作叫做"Pending Changes - Issues",目前仍是處於需要設定的狀態.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-EF-_L-Ks27E/TuB_WI5vI1I/AAAAAAAAAnA/l5cdkV0Bu9E/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-EF-_L-Ks27E/TuB_WI5vI1I/AAAAAAAAAnA/l5cdkV0Bu9E/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682748065063762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 選擇方案右鍵,可以看到"Issue Tracker Setup",這個部份就是這次用來擴充的功能&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-sO0q2F0b0J4/TuB_Vx9WZ8I/AAAAAAAAAm0/WIdRJAMIWbs/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-sO0q2F0b0J4/TuB_Vx9WZ8I/AAAAAAAAAm0/WIdRJAMIWbs/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682741906204610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. 在設定中先選擇自訂的Connector,接著輸入Service Address,連線後就可以選擇要關聯的專案&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NH917uT--MI/TuB_PJvtqqI/AAAAAAAAAmo/jsvdw1JSgr0/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-NH917uT--MI/TuB_PJvtqqI/AAAAAAAAAmo/jsvdw1JSgr0/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682628032375458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 完成後可以看到原本的Pending Changes - Issues,列出了剛剛選擇專案的工作項目.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-cJaTut62NoE/TuB_OwvSV_I/AAAAAAAAAmc/t0qoLJvSqTc/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-cJaTut62NoE/TuB_OwvSV_I/AAAAAAAAAmc/t0qoLJvSqTc/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682621319698418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. 接下來,嘗試進行簽入,會跳出一個訊息說"簽入前,必須要先選擇工作項目",這個部份就是為了要讓簽入的程式碼與工作項目產生關聯所設定的限制.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-CO6VW14xf-w/TuB_OogBTQI/AAAAAAAAAmQ/hUNh2ldvqYU/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-CO6VW14xf-w/TuB_OogBTQI/AAAAAAAAAmQ/hUNh2ldvqYU/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682619108183298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8. 勾選任何一個工作項目進行簽入,完成後至專案系統的管理頁面,就可以查詢的到工作項目與原始碼簽入的相關記錄.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-qJBQJUfTJuc/TuB_Olh5xqI/AAAAAAAAAmE/3dnPAb6ueBg/s1600/Capture8.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://2.bp.blogspot.com/-qJBQJUfTJuc/TuB_Olh5xqI/AAAAAAAAAmE/3dnPAb6ueBg/s320/Capture8.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5683682618310772386" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2367913484237351271?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2367913484237351271/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/12/project-management-system-subversion.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2367913484237351271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2367913484237351271'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/12/project-management-system-subversion.html' title='Project Management System - 專案管理系統 (三) - 整合Subversion'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-7Hj4lg2q_zc/TuB_WnG2jrI/AAAAAAAAAnY/AnoIHJ89sbc/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6642391570966837969</id><published>2011-12-05T18:08:00.006+08:00</published><updated>2011-12-05T18:17:30.770+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management System'/><title type='text'>Project Management System - 專案管理系統 (二) - 階層檢視</title><content type='html'>前言:&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/project-management-system.html"&gt;Project Management System - 專案管理系統&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這個部份展示的是可以在一個畫面中,管理Feature,FeatureItem,WorkItem的項目.這樣一來可以很快的了解到目前專案執行的相關資訊,一方面也可以在這直接進行修改的動作.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-s0_U_otnKMA/TtyZ-2orkaI/AAAAAAAAAl4/HLAdV1SmLos/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-s0_U_otnKMA/TtyZ-2orkaI/AAAAAAAAAl4/HLAdV1SmLos/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682586134931804578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-oMKTqcxPjdE/TtyZ-IYpp5I/AAAAAAAAAlw/arSZMxtA0e4/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-oMKTqcxPjdE/TtyZ-IYpp5I/AAAAAAAAAlw/arSZMxtA0e4/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682586122516539282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-wWxthjceQRk/TtyZ-PUERcI/AAAAAAAAAlc/rboH-e28rkM/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-wWxthjceQRk/TtyZ-PUERcI/AAAAAAAAAlc/rboH-e28rkM/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682586124376360386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-MTdmjUKQ8Lw/TtyZ94bonrI/AAAAAAAAAlU/EajBS2Oe_BQ/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-MTdmjUKQ8Lw/TtyZ94bonrI/AAAAAAAAAlU/EajBS2Oe_BQ/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682586118234087090" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6642391570966837969?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6642391570966837969/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/12/project-management-system.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6642391570966837969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6642391570966837969'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/12/project-management-system.html' title='Project Management System - 專案管理系統 (二) - 階層檢視'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-s0_U_otnKMA/TtyZ-2orkaI/AAAAAAAAAl4/HLAdV1SmLos/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-1959258359567768217</id><published>2011-12-05T13:29:00.006+08:00</published><updated>2011-12-05T13:47:30.079+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T4 Text Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='DataTemplate'/><title type='text'>Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (四)</title><content type='html'>前言:&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data.html"&gt;Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data_24.html"&gt;Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (二)&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/12/visual-studio-2010-data-template-data.html"&gt;Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (三)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這次一樣針對功能的部份進行改進,也因為功能變多了,所以重新的將UI進行一些歸納,讓操作上更便利.&lt;br /&gt;&lt;br /&gt;1. 加入了一個Count Columns的設定,主要用來當需要利用目前Table的欄位去計算其他Table的資料列數使用.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-241t09SJDKw/TtxaWZMT0KI/AAAAAAAAAjo/sQJEqh_r5RI/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-241t09SJDKw/TtxaWZMT0KI/AAAAAAAAAjo/sQJEqh_r5RI/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516170600861858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-bY5VG0VsThI/TtxaV0VlxgI/AAAAAAAAAjc/QIv-UA_NVrc/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-bY5VG0VsThI/TtxaV0VlxgI/AAAAAAAAAjc/QIv-UA_NVrc/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516160707675650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Q55vYHl28u8/TtxaVsdQjzI/AAAAAAAAAjQ/zssFxcS_Slo/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-Q55vYHl28u8/TtxaVsdQjzI/AAAAAAAAAjQ/zssFxcS_Slo/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516158592356146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-R-TodtWD-_s/TtxaVguHLcI/AAAAAAAAAjE/WR8edqWuWeQ/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-R-TodtWD-_s/TtxaVguHLcI/AAAAAAAAAjE/WR8edqWuWeQ/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516155441819074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 加入SELECT,Get,Delete相關SQL的操作功能設定&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-8Ks0fErVzjg/TtxatN5KTDI/AAAAAAAAAkU/gmmDLJbo6do/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-8Ks0fErVzjg/TtxatN5KTDI/AAAAAAAAAkU/gmmDLJbo6do/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516562704747570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Ceclmcqrckk/TtxasiBdKuI/AAAAAAAAAkM/uNSBACZAbhs/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-Ceclmcqrckk/TtxasiBdKuI/AAAAAAAAAkM/uNSBACZAbhs/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516550928378594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-k9Vq8h8x_Bo/TtxasaXSEUI/AAAAAAAAAkA/gq7ldKFDR_Q/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-k9Vq8h8x_Bo/TtxasaXSEUI/AAAAAAAAAkA/gq7ldKFDR_Q/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516548872442178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-p7Pd-J9Qtow/TtxasFBdTtI/AAAAAAAAAj0/b_4NiU9PpCY/s1600/Capture8.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-p7Pd-J9Qtow/TtxasFBdTtI/AAAAAAAAAj0/b_4NiU9PpCY/s320/Capture8.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5682516543143759570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Get,Delete大致上與SELECT是一樣的,因此就不附上畫面&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-1959258359567768217?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/1959258359567768217/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/12/visual-studio-2010-data-template-data_05.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1959258359567768217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1959258359567768217'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/12/visual-studio-2010-data-template-data_05.html' title='Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (四)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-241t09SJDKw/TtxaWZMT0KI/AAAAAAAAAjo/sQJEqh_r5RI/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-3950892201367727547</id><published>2011-12-01T17:17:00.004+08:00</published><updated>2011-12-01T17:39:55.751+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T4 Text Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='DataTemplate'/><title type='text'>Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (三)</title><content type='html'>前言:&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data.html"&gt;Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data_24.html"&gt;Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (二)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在開發&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/project-management-system.html"&gt;Project Management System - 專案管理系統&lt;/a&gt;發現了一個滿大的問題,也就是如果目前的Template中的欄位需要透過JOIN取得其他關連Table的欄位時,會無法達到這個功能,採用其他方案時則會花費較多的時間來達到,因此加入了相關的邏輯來處理.&lt;br /&gt;&lt;br /&gt;1. 加入了一個Relation Columns的區塊,主要用來設定目前Table與關連Table的JOIN關係.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-p5CSRGS-enc/TtdK2b-Qu_I/AAAAAAAAAiU/c4A0ljibUBQ/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://3.bp.blogspot.com/-p5CSRGS-enc/TtdK2b-Qu_I/AAAAAAAAAiU/c4A0ljibUBQ/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5681091754033462258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 加入或編輯的設定如下圖:&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-YRwfNLMF8hY/TtdKeKmCSdI/AAAAAAAAAhY/N_ZK_qXyxjQ/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-YRwfNLMF8hY/TtdKeKmCSdI/AAAAAAAAAhY/N_ZK_qXyxjQ/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5681091337051589074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 完成後存檔,將會產生相關Model的Property,與SQL Script JOIN語法.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-GhFiq1v3cMw/TtdKfPlpW3I/AAAAAAAAAhk/bT7rVZQtp0Q/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-GhFiq1v3cMw/TtdKfPlpW3I/AAAAAAAAAhk/bT7rVZQtp0Q/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5681091355572001650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-ob80WzUsdXQ/TtdKfVRZYhI/AAAAAAAAAhw/r4ysH5v47XQ/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-ob80WzUsdXQ/TtdKfVRZYhI/AAAAAAAAAhw/r4ysH5v47XQ/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5681091357097681426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;有鑒於可能會需要一次大量更新專案中的Template內容,一個ㄧ個去執行更新動作實在需要花費太多時間,因此在專案的右鍵選單中加入更新的選項,可以一次更新專案中所有DataTemplate的範本內容.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-LXiCYhZAciw/TtdKfgcwXKI/AAAAAAAAAh4/gV6lPG3op0Q/s1600/Capture5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-LXiCYhZAciw/TtdKfgcwXKI/AAAAAAAAAh4/gV6lPG3op0Q/s320/Capture5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5681091360098114722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-9g1yKy0jD3U/TtdKfzP1ZjI/AAAAAAAAAiM/WYmlbZ1DH0c/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-9g1yKy0jD3U/TtdKfzP1ZjI/AAAAAAAAAiM/WYmlbZ1DH0c/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5681091365144192562" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-3950892201367727547?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/3950892201367727547/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/12/visual-studio-2010-data-template-data.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3950892201367727547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3950892201367727547'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/12/visual-studio-2010-data-template-data.html' title='Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (三)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-p5CSRGS-enc/TtdK2b-Qu_I/AAAAAAAAAiU/c4A0ljibUBQ/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-895687348856231948</id><published>2011-11-29T16:31:00.010+08:00</published><updated>2011-11-29T17:06:48.854+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management System'/><title type='text'>Project Management System - 專案管理系統</title><content type='html'>由於未來可能會需要一個專案管理的系統,因此參考了TFS11的UI設計,寫了一個基本的管理系統,目前大都是資料的管理部份,還未有資料分析(專案進度,工作效率).以下是一些擷圖:&lt;br /&gt;&lt;br /&gt;1. 專案清單&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-e4snFz4rZLc/TtSaQP1D6tI/AAAAAAAAAhM/JxjtSTk-wQs/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 124px;" src="http://2.bp.blogspot.com/-e4snFz4rZLc/TtSaQP1D6tI/AAAAAAAAAhM/JxjtSTk-wQs/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334633938709202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 專案基本資料&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-WNbuKEtC2h0/TtSaLyhgA6I/AAAAAAAAAgQ/NBaSgDZC95c/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 147px;" src="http://2.bp.blogspot.com/-WNbuKEtC2h0/TtSaLyhgA6I/AAAAAAAAAgQ/NBaSgDZC95c/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334557352559522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 專案首頁 - 基本資料,公告,事件,文件&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-WyoT_ZYVkqE/TtSaMBPza6I/AAAAAAAAAgY/9-kSVztb07E/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 162px;" src="http://2.bp.blogspot.com/-WyoT_ZYVkqE/TtSaMBPza6I/AAAAAAAAAgY/9-kSVztb07E/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334561304865698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 專案基本資料編輯&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-y331q4Jnsm4/TtSaMEdtASI/AAAAAAAAAgk/UHHBTVuRLfo/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://4.bp.blogspot.com/-y331q4Jnsm4/TtSaMEdtASI/AAAAAAAAAgk/UHHBTVuRLfo/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334562168471842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. 專案公告編輯&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-JBHKUolIjGA/TtSaMbb940I/AAAAAAAAAg4/zB1S8Q5UQ68/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 178px;" src="http://1.bp.blogspot.com/-JBHKUolIjGA/TtSaMbb940I/AAAAAAAAAg4/zB1S8Q5UQ68/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334568335205186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 專案功能清單 - 功能代表此專案需製作哪些功能,左方是以分類方式顯示,主要內容則是以優先權的方式分類&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-iZEVcQPgXqM/TtSaMhtiXoI/AAAAAAAAAhE/uH148ZhRcOw/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 212px;" src="http://3.bp.blogspot.com/-iZEVcQPgXqM/TtSaMhtiXoI/AAAAAAAAAhE/uH148ZhRcOw/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334570019511938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. 專案功能分類設定&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-PNkMqYXQaaA/TtSaFTo2mYI/AAAAAAAAAfU/mwdUBL7zzrY/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://2.bp.blogspot.com/-PNkMqYXQaaA/TtSaFTo2mYI/AAAAAAAAAfU/mwdUBL7zzrY/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334445982685570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8. 專案功能優先權設定&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-KYLjRIMR1cw/TtSaFWB2gwI/AAAAAAAAAfg/vkuFRH7UK70/s1600/Capture8.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 215px;" src="http://2.bp.blogspot.com/-KYLjRIMR1cw/TtSaFWB2gwI/AAAAAAAAAfg/vkuFRH7UK70/s320/Capture8.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334446624408322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;9. 專案功能基本資料 - 包含功能基本資料與功能項目管理&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-mx4ulRtKscQ/TtSaFmVcHYI/AAAAAAAAAfs/RQEqhj9qbJM/s1600/Capture9.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://1.bp.blogspot.com/-mx4ulRtKscQ/TtSaFmVcHYI/AAAAAAAAAfs/RQEqhj9qbJM/s320/Capture9.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334451001531778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;10. 專案功能基本資料編輯&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-YjWewAfs_0I/TtSaF-z3O6I/AAAAAAAAAf0/lHdqAav6TZY/s1600/Capture10.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 196px;" src="http://1.bp.blogspot.com/-YjWewAfs_0I/TtSaF-z3O6I/AAAAAAAAAf0/lHdqAav6TZY/s320/Capture10.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334457571589026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;11. 專案功能項目編輯&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/--es9L1lOBTg/TtSaF64-AiI/AAAAAAAAAf8/Km9vQ2qtggo/s1600/Capture11.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://4.bp.blogspot.com/--es9L1lOBTg/TtSaF64-AiI/AAAAAAAAAf8/Km9vQ2qtggo/s320/Capture11.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334456519262754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;12. 專案工作項目清單 - 主要用於定義目前工作項目有哪些,也包含Bug+Issue&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-nngSSlzXX8w/TtSZ3pWNWAI/AAAAAAAAAeY/Mmi5DLPcRFY/s1600/Capture12.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 152px;" src="http://2.bp.blogspot.com/-nngSSlzXX8w/TtSZ3pWNWAI/AAAAAAAAAeY/Mmi5DLPcRFY/s320/Capture12.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334211291895810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;13. 專案工作項目分類設定&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-CCZ_L1tcHjY/TtSZ3wfr27I/AAAAAAAAAeg/Q5x9YQRqyaI/s1600/Capture13.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 183px;" src="http://1.bp.blogspot.com/-CCZ_L1tcHjY/TtSZ3wfr27I/AAAAAAAAAeg/Q5x9YQRqyaI/s320/Capture13.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334213210692530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;14. 專案工作項目狀態設定&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-b5OQfwon6KA/TtSZ3xj3-HI/AAAAAAAAAew/GbPZZLE6bDU/s1600/Capture14.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://1.bp.blogspot.com/-b5OQfwon6KA/TtSZ3xj3-HI/AAAAAAAAAew/GbPZZLE6bDU/s320/Capture14.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334213496698994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;15. 專案工作項目編輯&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-VKu0AuleMtI/TtSZ4KazAoI/AAAAAAAAAe4/Ey-mdkPSr5c/s1600/Capture15.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 196px;" src="http://2.bp.blogspot.com/-VKu0AuleMtI/TtSZ4KazAoI/AAAAAAAAAe4/Ey-mdkPSr5c/s320/Capture15.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334220169511554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;16. 專案行事曆 - 左邊可根據分類進行事件的篩選&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-ZW7bqCGTZsw/TtSZ4Sjn18I/AAAAAAAAAfI/axwFDYv8SyY/s1600/Capture16.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 219px;" src="http://3.bp.blogspot.com/-ZW7bqCGTZsw/TtSZ4Sjn18I/AAAAAAAAAfI/axwFDYv8SyY/s320/Capture16.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334222354012098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;17. 專案行事曆分類設定&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-HNhgdgaa_8o/TtSZvakXVFI/AAAAAAAAAdc/dGTu9KROGBA/s1600/Capture17.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://3.bp.blogspot.com/-HNhgdgaa_8o/TtSZvakXVFI/AAAAAAAAAdc/dGTu9KROGBA/s320/Capture17.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334069885785170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;18. 專案行事曆事件編輯&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-cWkga0C__lw/TtSZvuMVEaI/AAAAAAAAAdk/1nC86tw4wQE/s1600/Capture18.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 177px;" src="http://2.bp.blogspot.com/-cWkga0C__lw/TtSZvuMVEaI/AAAAAAAAAdk/1nC86tw4wQE/s320/Capture18.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334075153682850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;19. 專案文件清單&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-0-Xzinnv0Oo/TtSZvj-xS_I/AAAAAAAAAds/byLuXD7Z16o/s1600/Capture19.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 109px;" src="http://2.bp.blogspot.com/-0-Xzinnv0Oo/TtSZvj-xS_I/AAAAAAAAAds/byLuXD7Z16o/s320/Capture19.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334072412457970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;20. 專案文件上傳&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-simcVJcHMpY/TtSZvjBBHzI/AAAAAAAAAeA/cBHE6yp0JHs/s1600/Capture20.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 161px;" src="http://2.bp.blogspot.com/-simcVJcHMpY/TtSZvjBBHzI/AAAAAAAAAeA/cBHE6yp0JHs/s320/Capture20.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334072153448242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;21. 專案文件編輯&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-nyw-aofyg3g/TtSZwG42OVI/AAAAAAAAAeM/H2dZvfh1Y8c/s1600/Capture21.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 174px;" src="http://1.bp.blogspot.com/-nyw-aofyg3g/TtSZwG42OVI/AAAAAAAAAeM/H2dZvfh1Y8c/s320/Capture21.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680334081782856018" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-895687348856231948?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/895687348856231948/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/11/project-management-system.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/895687348856231948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/895687348856231948'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/11/project-management-system.html' title='Project Management System - 專案管理系統'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-e4snFz4rZLc/TtSaQP1D6tI/AAAAAAAAAhM/JxjtSTk-wQs/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6322080399871166741</id><published>2011-11-24T09:41:00.007+08:00</published><updated>2011-12-01T17:06:52.848+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T4 Text Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='DataTemplate'/><title type='text'>Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (二)</title><content type='html'>此篇為&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data.html"&gt;Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure&lt;/a&gt;的延伸,主要為處理Text Template的內容版本問題,讓開發人員可以更快速的更新範本的內容.&lt;br /&gt;&lt;br /&gt;1. 在設定的介面點選Update的按鈕&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-I8oRiGC6IeQ/Ts2km-Vz9qI/AAAAAAAAAdE/onap_t_AdUw/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-I8oRiGC6IeQ/Ts2km-Vz9qI/AAAAAAAAAdE/onap_t_AdUw/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5678375694660531874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 將會透過WCF的方式存取在DB中的DataTemplate的相關資訊,選擇後就會將相關的Text Template內容進行取代.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-OqjW74ANNWY/Ts2kiviUrTI/AAAAAAAAAcI/6KZ3XDxIZaE/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-OqjW74ANNWY/Ts2kiviUrTI/AAAAAAAAAcI/6KZ3XDxIZaE/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5678375621966998834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. WCF存取的Service位址是存在Visual Studio "工具"-&gt;"選項"中.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-5Wqsh_mCMIw/Ts2la6zpMJI/AAAAAAAAAdQ/Jhxu_2vUm6k/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-5Wqsh_mCMIw/Ts2la6zpMJI/AAAAAAAAAdQ/Jhxu_2vUm6k/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5678376587065110674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 另外,也有一個Web的介面可以管理相關的DataTemplate資料.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-iq2CmCY4JXg/Ts2ki50TX-I/AAAAAAAAAcg/_zSi90YcwHI/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 177px;" src="http://2.bp.blogspot.com/-iq2CmCY4JXg/Ts2ki50TX-I/AAAAAAAAAcg/_zSi90YcwHI/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5678375624726765538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-dYB12z8zu4k/Ts2kjWt9wdI/AAAAAAAAAcs/pve_GqkTtz8/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 177px;" src="http://2.bp.blogspot.com/-dYB12z8zu4k/Ts2kjWt9wdI/AAAAAAAAAcs/pve_GqkTtz8/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5678375632484811218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-BZ4ZWkJUqhk/Ts2kjoufHBI/AAAAAAAAAc4/pwcbn-xaUq4/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 177px;" src="http://1.bp.blogspot.com/-BZ4ZWkJUqhk/Ts2kjoufHBI/AAAAAAAAAc4/pwcbn-xaUq4/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5678375637318835218" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6322080399871166741?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6322080399871166741/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data_24.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6322080399871166741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6322080399871166741'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data_24.html' title='Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure (二)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-I8oRiGC6IeQ/Ts2km-Vz9qI/AAAAAAAAAdE/onap_t_AdUw/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-1485193387668394116</id><published>2011-11-09T09:25:00.005+08:00</published><updated>2011-12-01T17:07:21.497+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Deploy'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='DeploySolution'/><title type='text'>ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution (二)</title><content type='html'>先前已經有介紹過&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/10/aspnet-aspnet-deploy-solution.html"&gt;ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution&lt;/a&gt;的功能,後續在使用上也遇到了一些考量不周全的地方,因此又加了一些功能,另外,也強化了佈署管理上的機制.&lt;br /&gt;&lt;br /&gt;1. 在佈署程式上可能會需要執行一些SQL相關的指令(例如:新增資料表或建立預儲程序),因此加入了相關設定.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-h12yVHuiCIc/Trnbht4o43I/AAAAAAAAAb0/tqzwfefIFLY/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-h12yVHuiCIc/Trnbht4o43I/AAAAAAAAAb0/tqzwfefIFLY/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672806577949172594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 佈署管理上,加入了一個Web的管理介面,一方面會記錄目前佈署的相關資訊,也可以透過這個網站進行佈署.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Ksr8sFSvYrk/TrnbgwhDlrI/AAAAAAAAAbQ/eT1ktzK0VJU/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-Ksr8sFSvYrk/TrnbgwhDlrI/AAAAAAAAAbQ/eT1ktzK0VJU/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672806561475696306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 佈署機制如下:&lt;br /&gt;&lt;br /&gt;3.1. 進到Install的頁面,選擇要佈署的壓縮檔案後,按下Install.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-02WK_9h72Rk/TrnbhXmpjcI/AAAAAAAAAbo/KFsVpAj1qCA/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://2.bp.blogspot.com/-02WK_9h72Rk/TrnbhXmpjcI/AAAAAAAAAbo/KFsVpAj1qCA/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672806571968138690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.2. 如果佈署過程有發生錯誤,則會將錯誤相關的訊息顯示在畫面,如果成功則會導向至該功能的詳細頁面&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-yLminBHI21I/TrnbhAvLqzI/AAAAAAAAAbc/70Qkh1klNkg/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-yLminBHI21I/TrnbhAvLqzI/AAAAAAAAAbc/70Qkh1klNkg/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672806565829913394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 版本的判斷的機制大略如下:&lt;br /&gt;[A] 如果有設定父功能(Parent),父功能需已佈署&lt;br /&gt;[B] 新佈署版本必須大於或等於已經佈署版本&lt;br /&gt;[C] 相同版本可以重新佈署,但必須包含相同內容&lt;br /&gt;[D] 當佈署版本大於現有版本時,佈署版本內容必須包含現有版本內容&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-1485193387668394116?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/1485193387668394116/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/11/aspnet-aspnet-deploy-solution.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1485193387668394116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1485193387668394116'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/11/aspnet-aspnet-deploy-solution.html' title='ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution (二)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-h12yVHuiCIc/Trnbht4o43I/AAAAAAAAAb0/tqzwfefIFLY/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-4206143689063410133</id><published>2011-11-07T21:07:00.013+08:00</published><updated>2011-12-01T17:06:39.636+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T4 Text Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='DataTemplate'/><title type='text'>Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure</title><content type='html'>先前已經有介紹過一些關於Text Templdate的應用如下:&lt;br /&gt;1. &lt;a target="_blank" href="http://twlikol.blogspot.com/2011/07/visual-studio-2010-t4-text-templates.html"&gt;Visual Studio 2010 T4 Text Templates - 文字範本與程式碼產生&lt;/a&gt;&lt;br /&gt;2. &lt;a target="_blank" href="http://twlikol.blogspot.com/2011/07/visual-studio-2010-sqlexector-sql.html"&gt;Visual Studio 2010 SqlExector - 快速執行.sql檔案&lt;/a&gt;&lt;br /&gt;3. &lt;a target="_blank" href="http://twlikol.blogspot.com/2011/07/visual-studio-2010-t4-text-templates_10.html"&gt;Visual Studio 2010 T4 Text Templates 與 SqlExector 整合&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;由於為了讓這個應用可以發揮更好的效果,也希望可以跟開發工具整合的比較完整,所以也採用了Visual Studio Editor的方式來處理,將資料的定義儲存在XML檔案中,並可以直接在Visual Studio中進行管理與設定.&lt;br /&gt;&lt;br /&gt;1. 開啟一個ASP.NET專案,選擇新增一個項目,並選擇Visual C# -&gt; Likol -&gt; Data Template,名稱Product.datatemplate&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Wwrvm-q4UIA/TrfpBGOHoaI/AAAAAAAAAbI/8l35jKIt2gY/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-Wwrvm-q4UIA/TrfpBGOHoaI/AAAAAAAAAbI/8l35jKIt2gY/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672258460755403170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 新增完成後會看到以下畫面,專案總管中的Product.datatemplate會包含了兩個Text Template的子項目&lt;br /&gt;[A] Product.Data.tt - 產生DataModel的程式碼內容&lt;br /&gt;[B] Product.SQL.tt  - 產生對應的Store Procedure&lt;br /&gt;在主視窗中就是資料來源的相關設定&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-h0Rg_014588/TrfpA-KuusI/AAAAAAAAAa0/bPGKjd__9Co/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-h0Rg_014588/TrfpA-KuusI/AAAAAAAAAa0/bPGKjd__9Co/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672258458593704642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 接下來,選取Import來匯入資料表的相關屬性,在跳出得視窗中選擇ConeectionName(來自於Web.Config)與Table進行匯入.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Wg47rKq5Kdk/TrfpA-H4naI/AAAAAAAAAas/aFFxvdyp6jw/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-Wg47rKq5Kdk/TrfpA-H4naI/AAAAAAAAAas/aFFxvdyp6jw/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672258458581769634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 匯入後可以看到在資料表中欄位的一些相關資訊.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-U_f8gDLYzHo/TrfoghbaHyI/AAAAAAAAAac/sALf5IpoLJk/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-U_f8gDLYzHo/TrfoghbaHyI/AAAAAAAAAac/sALf5IpoLJk/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672257901123215138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. 設定每個欄位的相關屬性&lt;br /&gt;[A] DataType - 表示對應到.NET Framework中的型別&lt;br /&gt;[B] Insert   - 指定這個欄位是否為新增資料時的必要欄位&lt;br /&gt;[C] Update   - 指定這個欄位是否為更新資料時的必要欄位&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-tM751mR4W-4/TrfogHnbUSI/AAAAAAAAAaU/FRxMzd5dJqU/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-tM751mR4W-4/TrfogHnbUSI/AAAAAAAAAaU/FRxMzd5dJqU/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672257894194303266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 設定完成如下圖:&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-oiqFBGnsJDU/Trfof4cV3EI/AAAAAAAAAaE/aODwzp4oakw/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-oiqFBGnsJDU/Trfof4cV3EI/AAAAAAAAAaE/aODwzp4oakw/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672257890121276482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. 儲存完成後,可以試著開啟產生的結果&lt;br /&gt;[A] Product.Data.cs - 產生資料表對應的類別內容與方法(Create,Update,Delete,Get)&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-DQ0h9tMKw-c/TrfofmjMphI/AAAAAAAAAZ4/Vs_kBwyq6ac/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-DQ0h9tMKw-c/TrfofmjMphI/AAAAAAAAAZ4/Vs_kBwyq6ac/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672257885318194706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[B] Product.SQL.sql - 產生資料表異動所需的Store Procedure&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-BAsuTuOJJQE/TrfofQ4qMbI/AAAAAAAAAZw/f7TFffAK3DE/s1600/Capture8.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-BAsuTuOJJQE/TrfofQ4qMbI/AAAAAAAAAZw/f7TFffAK3DE/s320/Capture8.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5672257879502631346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8. 接下來就可以用由Product.Data.cs所產生的"Product"這個類別來進行資料表的操作.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-4206143689063410133?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/4206143689063410133/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4206143689063410133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4206143689063410133'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/11/visual-studio-2010-data-template-data.html' title='Visual Studio 2010 資料範本 - Data Template - Data Model &amp; Store Procedure'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Wwrvm-q4UIA/TrfpBGOHoaI/AAAAAAAAAbI/8l35jKIt2gY/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-1883992477489161879</id><published>2011-10-17T11:53:00.007+08:00</published><updated>2011-10-17T12:45:07.037+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vsix'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Visual Studio 2010 程式碼協助工具 - Code Tool</title><content type='html'>使用Visual Studio進行程式開發時,常常為了需要找到一段曾經寫過的程式碼或是共用的部份而需要翻遍整個專案,或在過去寫過的專案尋找,雖然Visual Studio有內建了Code Snippets的功能,不過我實在不常用它,而且似乎沒有一個快速分享給其他人的方式.&lt;br /&gt;&lt;br /&gt;這個工具的主要目的就是&lt;span style="font-weight:bold;color:blue;"&gt;可以在Visual Studio中快速插入常用的程式碼片段,也可以儲存正在開發檔案中的程式碼片段&lt;/span&gt;.資料的存取方式則是透過一個WCF的服務來進行Visual Studio與DB的溝通.這樣一來也可以讓一起開發的人員共用所有的程式碼片段內容.&lt;br /&gt;&lt;br /&gt;1. 先選取要加入的程式碼片段,然後使用滑鼠右鍵選擇CodeTool-&gt;Save Code&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DT4Jn4ZmjZw/TpuyQJIjghI/AAAAAAAAAVw/1p3FM0QP98o/s1600/Untitled-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-DT4Jn4ZmjZw/TpuyQJIjghI/AAAAAAAAAVw/1p3FM0QP98o/s320/Untitled-1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664316946747982354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 視窗可以看到已經將選擇的程式碼片段加入,填入程式碼片段名稱並選擇分類&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-0KXlOFeXsb0/TpuxzdK99tI/AAAAAAAAAVk/qhSLJowR7DI/s1600/Untitled-2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-0KXlOFeXsb0/TpuxzdK99tI/AAAAAAAAAVk/qhSLJowR7DI/s320/Untitled-2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664316453910607570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-5uJ-aU6OsCw/Tpuxy3lbtvI/AAAAAAAAAVY/Fglb6AG9778/s1600/Untitled-3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-5uJ-aU6OsCw/Tpuxy3lbtvI/AAAAAAAAAVY/Fglb6AG9778/s320/Untitled-3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664316443821061874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 要加入程式碼片段只要在要填入的位置使用滑鼠右鍵選擇CodeTool-&gt;Insert Code&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-9-27hwkgKjI/TpuxyrtP6EI/AAAAAAAAAVM/gE3FvoLfBV4/s1600/Untitled-4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-9-27hwkgKjI/TpuxyrtP6EI/AAAAAAAAAVM/gE3FvoLfBV4/s320/Untitled-4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664316440632617026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 在視窗左邊先選擇分類並展開,選取程式碼片段名稱就可以看到對應的程式碼片段內容&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-kh6HKqupB0Y/TpuxyNeDJyI/AAAAAAAAAVE/TDZGECLqBxI/s1600/Untitled-5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-kh6HKqupB0Y/TpuxyNeDJyI/AAAAAAAAAVE/TDZGECLqBxI/s320/Untitled-5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664316432515802914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. 點選Insert進行插入.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-UdOltdAumog/TpuxxtGNTAI/AAAAAAAAAU0/b1Nbhat99i8/s1600/Untitled-6.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-UdOltdAumog/TpuxxtGNTAI/AAAAAAAAAU0/b1Nbhat99i8/s320/Untitled-6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5664316423825869826" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-1883992477489161879?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/1883992477489161879/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/10/visual-studio-2010-code-tool.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1883992477489161879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1883992477489161879'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/10/visual-studio-2010-code-tool.html' title='Visual Studio 2010 程式碼協助工具 - Code Tool'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DT4Jn4ZmjZw/TpuyQJIjghI/AAAAAAAAAVw/1p3FM0QP98o/s72-c/Untitled-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-667198996938587136</id><published>2011-10-07T02:31:00.008+08:00</published><updated>2011-12-01T17:07:53.577+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Deploy'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='DeploySolution'/><title type='text'>ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution</title><content type='html'>現有的Visual Studio 2010已經整合了&lt;a target="_blank" href="http://www.iis.net/download/webdeploy"&gt;Web Deploy (Web Deployment Tool)&lt;/a&gt;工具,大體來說在佈署上解決了不少佈署上的困擾,不過總覺得每次都一大包的把所有東西重新佈署一次,實在是有點麻煩.&lt;br /&gt;&lt;br /&gt;因此根據了一些簡單的需求,設計了一個可以將功能分散在不同壓縮檔的佈署方式,以下就介紹這個解決方案:&lt;br /&gt;&lt;br /&gt;1. 假設現在要開發一個新的功能,新增一個專案選擇Visual C# -&gt; Likol -&gt; Web Feature,並命名為ProductFeature&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-_fmI4oUfON8/To350pFaSqI/AAAAAAAAATk/qSNe8uTJ9mU/s1600/Untitled-1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-_fmI4oUfON8/To350pFaSqI/AAAAAAAAATk/qSNe8uTJ9mU/s320/Untitled-1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660454989451643554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;此專案範本是由空的ASP.NET網站範本修改而來,並加入一個source.webfeature檔案與修改了建置專案的細節.&lt;br /&gt;&lt;br /&gt;2. 我在專案中加入了一個Product的目錄,並新增了ListForm NewForm EditForm三個ASPX程式,也就是要用來進行佈署的程式.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-m8PqkLQ2q58/To350dWJwCI/AAAAAAAAATc/76KI7t1IQHA/s1600/Untitled-2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-m8PqkLQ2q58/To350dWJwCI/AAAAAAAAATc/76KI7t1IQHA/s320/Untitled-2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660454986300637218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 選擇source.webfeature並開啟檔案,即可看到佈署的設定界面.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-dcbBUqeqfb8/To350HPT4PI/AAAAAAAAATU/zPZz_x4if3o/s1600/Untitled-3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-dcbBUqeqfb8/To350HPT4PI/AAAAAAAAATU/zPZz_x4if3o/s320/Untitled-3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660454980366360818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上面的四個欄位就是佈署時的一些資訊,比較重要的是下面的兩個部份&lt;br /&gt;I. Assemblies 代表所要包含的組件檔&lt;br /&gt;II. Files 表示要加入的ASPX或是ASCX的檔案&lt;br /&gt;&lt;br /&gt;4. 選擇Add Assembly,於跳出的視窗中選擇Output並確定.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-MQGAwOb_Mgc/To35zynHkOI/AAAAAAAAATM/lkc51P6KR6Q/s1600/Untitled-4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-MQGAwOb_Mgc/To35zynHkOI/AAAAAAAAATM/lkc51P6KR6Q/s320/Untitled-4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660454974829072610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這個動作將會在Assemblies加入一筆資料,並標示Type為Output,也就是會把這個專案編譯出來的組件(DLL)加入佈署中.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-gxE9vSpf-FY/To35zitgXcI/AAAAAAAAATE/T6IMwwMb2IA/s1600/Untitled-5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-gxE9vSpf-FY/To35zitgXcI/AAAAAAAAATE/T6IMwwMb2IA/s320/Untitled-5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660454970560896450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. 另外,當然也可以額外指定其他的組件(DLL)檔案,加入佈署.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-5e5qQUR9i_c/To36l3YTBzI/AAAAAAAAAUM/CiHV2rqjfH4/s1600/Untitled-6.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-5e5qQUR9i_c/To36l3YTBzI/AAAAAAAAAUM/CiHV2rqjfH4/s320/Untitled-6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660455835102545714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-9rtdgzWfHIs/To36lk82N9I/AAAAAAAAAUE/U5LiAKHuwvg/s1600/Untitled-7.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-9rtdgzWfHIs/To36lk82N9I/AAAAAAAAAUE/U5LiAKHuwvg/s320/Untitled-7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660455830155573202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 選完組件後,就是透過Add File來選擇要加入的檔案,在選擇的視窗中僅可以選擇在專案中的檔案&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-3_7Vl4hrX6M/To36ll9ogLI/AAAAAAAAAT8/jnhzn7tHpsk/s1600/Untitled-8.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-3_7Vl4hrX6M/To36ll9ogLI/AAAAAAAAAT8/jnhzn7tHpsk/s320/Untitled-8.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660455830427304114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;如果檔案已經加入,則不會顯示出來&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-L7ozxrBLQL0/To36lekObDI/AAAAAAAAAT0/eFvas1kgbHE/s1600/Untitled-9.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-L7ozxrBLQL0/To36lekObDI/AAAAAAAAAT0/eFvas1kgbHE/s320/Untitled-9.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660455828441689138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-8ZHNK2QscKI/To36lX1QHsI/AAAAAAAAATs/jgpLwmeglkM/s1600/Untitled-10.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-8ZHNK2QscKI/To36lX1QHsI/AAAAAAAAATs/jgpLwmeglkM/s320/Untitled-10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660455826634055362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. 設定完成後,直接執行Visual Studio的建置專案,建置完成後,就可以在專案的目錄中找到"_WebFeature"的目錄,裡面以GUID為檔名的檔案就是要進行佈署的檔案.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-wm0jfc6lpCY/To37XOzAG7I/AAAAAAAAAUs/xKPjBsh_Vw4/s1600/Untitled-11.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-wm0jfc6lpCY/To37XOzAG7I/AAAAAAAAAUs/xKPjBsh_Vw4/s320/Untitled-11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660456683202157490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;可以看到剛剛所選擇的檔案都有包含在內.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-7wsIcz2ZLng/To37W5PeMaI/AAAAAAAAAUk/UL5eq0DP2sA/s1600/Untitled-12.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-7wsIcz2ZLng/To37W5PeMaI/AAAAAAAAAUk/UL5eq0DP2sA/s320/Untitled-12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660456677415989666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8. 在佈署的部份,目前是先用一個簡單的Web程式進行佈署,將上述產生的佈署檔案,透過一支ASPX上傳,就可以將相關組件與檔案佈署至Web Application中.&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-6SnYcdKIZ2Q/To37W255yrI/AAAAAAAAAUc/9hVG5nVLZ34/s1600/Untitled-13.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-6SnYcdKIZ2Q/To37W255yrI/AAAAAAAAAUc/9hVG5nVLZ34/s320/Untitled-13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660456676788652722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Ovnc1YwVPu0/To37WiIk5PI/AAAAAAAAAUU/24VP9GCxtSg/s1600/Untitled-14.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-Ovnc1YwVPu0/To37WiIk5PI/AAAAAAAAAUU/24VP9GCxtSg/s320/Untitled-14.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5660456671213053170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;為了整個解決方案可以很容易並順暢,因此在與Visual Studio整合上花了不少時間,主要的部份也就是:&lt;br /&gt;&lt;br /&gt;A. &lt;a target="_blank" href="http://twlikol.blogspot.com/2011/10/visual-studio-2010-custom-editor.html"&gt;Visual Studio 2010 自訂編輯器 - Custom Editor&lt;/a&gt;&lt;br /&gt;B. &lt;a target="_blank" href="http://twlikol.blogspot.com/2011/10/visual-studio-2010-custom-msbuild-task.html"&gt;Visual Studio 2010 自訂建置工作項目 - Custom MSBuild Task&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;實做了這兩項功能,整個流程就大大的不一樣了.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-667198996938587136?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/667198996938587136/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/10/aspnet-aspnet-deploy-solution.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/667198996938587136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/667198996938587136'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/10/aspnet-aspnet-deploy-solution.html' title='ASP.NET 程式佈署解決方案 - ASP.NET Deploy Solution'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-_fmI4oUfON8/To350pFaSqI/AAAAAAAAATk/qSNe8uTJ9mU/s72-c/Untitled-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-3058820290120707823</id><published>2011-10-04T16:46:00.007+08:00</published><updated>2011-10-04T17:29:05.748+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vsix'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Task'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><title type='text'>Visual Studio 2010 自訂建置工作項目 - Custom MSBuild Task</title><content type='html'>在Visual Studio中方案或是專案的編譯,其實是透過一個叫做MSBuild(Microsoft Build Engine)的平台來執行,它會根據在專案(.csproj)的XML描述來進行編譯的判斷與順序.&lt;br /&gt;&lt;br /&gt;在MSBuild定義中是依靠許多已經內建的工作項目(Task)來進行處理,因此我們也可以透過撰寫Task的方式來達到我們想要的建置動作.&lt;br /&gt;&lt;br /&gt;參考資料:&lt;br /&gt;A. &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms366724.aspx"&gt;How to: Extend the Visual Studio Build Process&lt;/a&gt;&lt;br /&gt;B. &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/t9883dzc.aspx"&gt;Task Writing&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在這裡我想要達到的功能是:&lt;span style="font-weight:bold;color:blue;"&gt;在專案建置完成後,會根據一個XML檔案內容,將指定的檔案壓縮到一個Zip中.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. 建立BuildWebFeature的Task,它會讀取source.webfeature這個檔案,然後根據內容把相關的檔案加入一個用Guid為檔案名稱的Zip中.&lt;br /&gt;&lt;br /&gt;2. 在C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Likol\中,加入一個Likol.target,並加入要執行的MSBuild定義(部份如下),並將建置的Task Assembly檔案一併複製過來&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-QywTez-uU74/TorQ3U8WneI/AAAAAAAAAS8/y-eMkxzR09s/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/-QywTez-uU74/TorQ3U8WneI/AAAAAAAAAS8/y-eMkxzR09s/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659565530677681634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 使用一般的文字編輯器開啟我們要加入建置動作的專案檔,並加入以下的內容&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-jWOX9Jgq73Q/TorQ3KLXcmI/AAAAAAAAAS0/Fm1eFR-t3gQ/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/-jWOX9Jgq73Q/TorQ3KLXcmI/AAAAAAAAAS0/Fm1eFR-t3gQ/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659565527787860578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 完成後使用Visual Studio建置該專案,完成後就會產生一個Zip的壓縮檔.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-a5SvGl-KF6k/TorQ3HxDctI/AAAAAAAAASs/obi7e0PJPTM/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 218px;" src="http://4.bp.blogspot.com/-a5SvGl-KF6k/TorQ3HxDctI/AAAAAAAAASs/obi7e0PJPTM/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659565527140627154" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-3058820290120707823?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/3058820290120707823/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/10/visual-studio-2010-custom-msbuild-task.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3058820290120707823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3058820290120707823'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/10/visual-studio-2010-custom-msbuild-task.html' title='Visual Studio 2010 自訂建置工作項目 - Custom MSBuild Task'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-QywTez-uU74/TorQ3U8WneI/AAAAAAAAAS8/y-eMkxzR09s/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-3026037972321888673</id><published>2011-10-04T01:28:00.005+08:00</published><updated>2011-10-04T02:17:11.739+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Custom Editor'/><category scheme='http://www.blogger.com/atom/ns#' term='Vsix'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Visual Studio 2010 自訂編輯器 - Custom Editor</title><content type='html'>在Visual Studio中其實每一種副檔案都會對應到一個特定的編輯器,不同的編輯器又會有不同的檢視方式.例如Web Form就有設計與程式碼的兩種檢視方式,而XML編輯器就只有程式碼的檢視.&lt;br /&gt;&lt;br /&gt;在Visual Studio SDK中,有一個非常不錯的範例.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://code.msdn.microsoft.com/Designer-View-Over-XML-20a81f17/sourcecode?fileId=18719&amp;pathId=364549560"&gt;Designer View Over XML Editor&lt;/a&gt;&lt;br /&gt;範例所展示的功能是,當我們在進行XML檔案的編輯時,通常只能使用程式碼的檢視方式.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-hyJffgZWar8/Ton61XyWiwI/AAAAAAAAAR8/KaI1tf9t_pQ/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://3.bp.blogspot.com/-hyJffgZWar8/Ton61XyWiwI/AAAAAAAAAR8/KaI1tf9t_pQ/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659330201592957698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;透過自訂編輯器,可以根據XML的格式來定義出UI進行編輯作業,一方面可以更容易進行XML的維護,一方面也可以有效的控制格式的正確性.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-APplOa4g4ro/Ton61CJx6RI/AAAAAAAAAR0/I5amGN5U8Sc/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://1.bp.blogspot.com/-APplOa4g4ro/Ton61CJx6RI/AAAAAAAAAR0/I5amGN5U8Sc/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659330195785640210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;其實當安裝了Visual Studio 2010在進行Visual Studio Package的開發時,也有類似的編輯器功能.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-5XFU5VZ5sns/Ton7qoNcC8I/AAAAAAAAASk/IY5aE2Se-lM/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 236px;" src="http://2.bp.blogspot.com/-5XFU5VZ5sns/Ton7qoNcC8I/AAAAAAAAASk/IY5aE2Se-lM/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659331116534598594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-kjm_vyRmY4g/Ton7qq6SWuI/AAAAAAAAASc/lbEbcgog3K0/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://4.bp.blogspot.com/-kjm_vyRmY4g/Ton7qq6SWuI/AAAAAAAAASc/lbEbcgog3K0/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659331117259578082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在這篇文章中也使用相同的方式製做了一個編輯器,來進行XML檔案的維護界面.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-QUReWL1PLEc/Ton61hzOjuI/AAAAAAAAASE/bjZkvuNsoOA/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 236px;" src="http://4.bp.blogspot.com/-QUReWL1PLEc/Ton61hzOjuI/AAAAAAAAASE/bjZkvuNsoOA/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659330204280983266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-N69L1gSotww/Ton611ODDUI/AAAAAAAAASM/TIulReUnQuk/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="http://2.bp.blogspot.com/-N69L1gSotww/Ton611ODDUI/AAAAAAAAASM/TIulReUnQuk/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659330209493749058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;稍微比較特別的是,透過這樣的編輯方式一樣會有編輯復原的功能可以使用.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-c_5YLV87EV8/Ton61wURMnI/AAAAAAAAASU/4lUy7SYK8Tg/s1600/Capture8.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 151px;" src="http://4.bp.blogspot.com/-c_5YLV87EV8/Ton61wURMnI/AAAAAAAAASU/4lUy7SYK8Tg/s320/Capture8.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5659330208177664626" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-3026037972321888673?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/3026037972321888673/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/10/visual-studio-2010-custom-editor.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3026037972321888673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3026037972321888673'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/10/visual-studio-2010-custom-editor.html' title='Visual Studio 2010 自訂編輯器 - Custom Editor'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-hyJffgZWar8/Ton61XyWiwI/AAAAAAAAAR8/KaI1tf9t_pQ/s72-c/Capture4.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-9084034698153086780</id><published>2011-09-25T23:35:00.008+08:00</published><updated>2011-09-26T00:00:23.465+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項試用下載</title><content type='html'>&lt;a href="https://docs.google.com/uc?id=0B-J3PDn9mHkXMzAwZjliNmMtNDMyYi00NWM5LThmNDYtZTcwNGExYzI5Y2Fi&amp;hl=zh_TW"&gt;Likol.Web.v4.0.zip&lt;/a&gt; For ASP.NET 4.0&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B-J3PDn9mHkXMTZkMDgwNDYtZWQzZC00ZGM4LTk4ODAtNTNiYmZkZTFiNjc5&amp;hl=zh_TW"&gt;Likol.Web.v3.5.zip&lt;/a&gt; For ASP.NET 3.5&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B-J3PDn9mHkXMzRhMWNkOTQtM2M1Yy00Yzc2LTk2YzQtNTRhYmM3M2Q2MTg2&amp;hl=zh_TW"&gt;WebControls.css&lt;/a&gt; WebControls 樣式檔&lt;br /&gt;&lt;br /&gt;壓縮檔內容說明:&lt;br /&gt;&lt;br /&gt;1. Likol.Web.dll&lt;br /&gt;　　控制項主要組件,可使用Visual Studio加入控制項至工具箱內&lt;br /&gt;&lt;br /&gt;2. Likol.Design.Web.dll&lt;br /&gt;　　控制項設計階段支援檔案&lt;br /&gt;&lt;br /&gt;試用期限:&lt;span style="font-weight:bold;color:red;"&gt;2011-12-31&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;使用DateBox控制項時需搭配&lt;a target="_blank" href="http://ajaxcontroltoolkit.codeplex.com/releases/view/71000"&gt;AJAX Control Toolkit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;如果在使用上有任何問題或疑問,歡迎您直接與我聯繫 E-Mail: &lt;a href="mailto:twlikol@msn.com"&gt;twlikol@msn.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;控制項範例與使用請參考以下連結的展示:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET 自訂控制項 - Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET UI Sample Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/sample.aspx"&gt;http://www.aspcity.idv.tw/sample.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-9084034698153086780?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/9084034698153086780/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/09/aspnet_25.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/9084034698153086780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/9084034698153086780'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/09/aspnet_25.html' title='ASP.NET 自訂控制項試用下載'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-8077108221978554010</id><published>2011-09-21T16:03:00.004+08:00</published><updated>2011-09-21T16:13:31.000+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>近期將會釋出ASP.NET 自訂控制項試用</title><content type='html'>目前已經開始準備釋出控制項的相關作業!&lt;br /&gt;&lt;br /&gt;控制項功能如下連結:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET 自訂控制項 - Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET UI Sample Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/sample.aspx"&gt;http://www.aspcity.idv.tw/sample.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-8077108221978554010?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/8077108221978554010/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/09/aspnet.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8077108221978554010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8077108221978554010'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/09/aspnet.html' title='近期將會釋出ASP.NET 自訂控制項試用'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6806391007466185874</id><published>2011-08-30T16:56:00.004+08:00</published><updated>2011-08-30T17:20:14.818+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - DataFieldForm</title><content type='html'>在&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/08/aspnet-queryfieldform.html"&gt;ASP.NET 自訂控制項 - QueryFieldForm&lt;/a&gt;中已經有介紹過用定義的方式來產生一些基本的表單,並容易的取得相關參數來進行程式的處理.不過最重要的還是如何針對一筆資料庫中的資料進行維護.&lt;br /&gt;&lt;br /&gt;在這個展示中,我一樣用類似於QueryFieldForm的方式來定義需要維護的欄位,並更快速的透過控制項的方法來取得類別的實例來進行後續的資料的維護.&lt;br /&gt;&lt;br /&gt;定義需要的欄位&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-tqpgBfAOhg8/TlyqNHnc9II/AAAAAAAAARc/TGULuDks1MU/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 137px;" src="http://3.bp.blogspot.com/-tqpgBfAOhg8/TlyqNHnc9II/AAAAAAAAARc/TGULuDks1MU/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5646575175175304322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;比較特殊的參數是&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;DataObjectTypeName="Likol.Web.TestWebSite.Data.Product, Likol.Web.TestWebSite"&lt;/span&gt;&lt;br /&gt;這表示定義中的欄位會對應至這個類別的屬性,並做出相對應的處理(驗證,取值或設定)&lt;br /&gt;&lt;br /&gt;執行結果UI&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-5mPScg9eMSo/TlyqNJ7SljI/AAAAAAAAARU/IJOfOeDKyIU/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 260px;" src="http://1.bp.blogspot.com/-5mPScg9eMSo/TlyqNJ7SljI/AAAAAAAAARU/IJOfOeDKyIU/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5646575175795381810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;接下來透過控制項提供的存取方法來取得類別的實例&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/--Hi4EmkAlYY/TlyrEadml6I/AAAAAAAAARk/dfeBsvZ0rYo/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 109px;" src="http://2.bp.blogspot.com/--Hi4EmkAlYY/TlyrEadml6I/AAAAAAAAARk/dfeBsvZ0rYo/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5646576125127071650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-VzpBrpcSPlI/TlyqM7hkDZI/AAAAAAAAARM/5Q-cKdv3Pwc/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 260px;" src="http://2.bp.blogspot.com/-VzpBrpcSPlI/TlyqM7hkDZI/AAAAAAAAARM/5Q-cKdv3Pwc/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5646575171929378194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;類別的實例就是在控制項屬性:DataObjectTypeName所設定的&lt;br /&gt;&lt;br /&gt;以這樣的設定方式,可以很快的由定義好的資料類別來設定出維護的UI,另一方面資料類別也可以直接用來進行資料相關處理.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6806391007466185874?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6806391007466185874/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-datafieldform.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6806391007466185874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6806391007466185874'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-datafieldform.html' title='ASP.NET 自訂控制項 - DataFieldForm'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-tqpgBfAOhg8/TlyqNHnc9II/AAAAAAAAARc/TGULuDks1MU/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2341848098319977745</id><published>2011-08-25T16:14:00.004+08:00</published><updated>2011-08-25T16:26:25.543+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>ASP.NET UI Sample Demo - 資料檢視切換</title><content type='html'>此編所展示的功能基本上與&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/08/aspnet-ui-sample-demo.html"&gt;ASP.NET UI Sample Demo - 單一資料表維護&lt;/a&gt;是差不多的,不同的地方在於,此篇中的範例在清單列表時,可以進行切換,使用像Windows檔案總管"縮圖"的方式進行管理.&lt;br /&gt;&lt;br /&gt;[二] 資料檢視切換&lt;br /&gt;&lt;br /&gt;在畫面右上角使用了一個群組的按鈕&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#GroupButton}&lt;/span&gt;來進行Grid或是Image的切換&lt;br /&gt;&lt;br /&gt;Grid:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-2X4vBwBYN9A/TlYG1eQiB-I/AAAAAAAAAQ8/HOaL_IDdwt0/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-2X4vBwBYN9A/TlYG1eQiB-I/AAAAAAAAAQ8/HOaL_IDdwt0/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5644706698680731618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Image:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-LWxnVvgkEZ4/TlYG1F-VO2I/AAAAAAAAAQ0/1A9hsimbBWw/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 225px;" src="http://2.bp.blogspot.com/-LWxnVvgkEZ4/TlYG1F-VO2I/AAAAAAAAAQ0/1A9hsimbBWw/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5644706692161944418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;編輯的方式與&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/08/aspnet-ui-sample-demo.html"&gt;ASP.NET UI Sample Demo - 單一資料表維護&lt;/a&gt;相同模式,圖片的選擇則需要先上傳,然後進行選擇&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#ImagePicker}&lt;/span&gt;(目前尚未處理上傳部份)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/--W_uwG_HKrU/TlYG1NsFiyI/AAAAAAAAAQs/F1eA-g-tZO8/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 225px;" src="http://2.bp.blogspot.com/--W_uwG_HKrU/TlYG1NsFiyI/AAAAAAAAAQs/F1eA-g-tZO8/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5644706694232902434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-8tUCEsEVKkA/TlYG0_YcxoI/AAAAAAAAAQk/OM5cjf7YVMg/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 257px;" src="http://4.bp.blogspot.com/-8tUCEsEVKkA/TlYG0_YcxoI/AAAAAAAAAQk/OM5cjf7YVMg/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5644706690392442498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上述的範例可以在ASP.NET UI Sample Demo]網址中看到Live Demo.&lt;br /&gt;相關注記的部份&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#??????}&lt;/span&gt;也可以在[ASP.NET 自訂控制項 - Live Demo]網址中看到.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET UI Sample Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/sample.aspx"&gt;http://www.aspcity.idv.tw/sample.aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET 自訂控制項 - Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2341848098319977745?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2341848098319977745/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-ui-sample-demo_25.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2341848098319977745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2341848098319977745'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-ui-sample-demo_25.html' title='ASP.NET UI Sample Demo - 資料檢視切換'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-2X4vBwBYN9A/TlYG1eQiB-I/AAAAAAAAAQ8/HOaL_IDdwt0/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2212780570501666905</id><published>2011-08-22T06:39:00.001+08:00</published><updated>2011-08-22T06:40:28.968+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>部份DEMO因程式更新不完整,造成錯誤,目前已經修正!</title><content type='html'>如標題!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2212780570501666905?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2212780570501666905/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/demo.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2212780570501666905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2212780570501666905'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/demo.html' title='部份DEMO因程式更新不完整,造成錯誤,目前已經修正!'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-7197412934381564363</id><published>2011-08-18T06:18:00.006+08:00</published><updated>2011-08-30T16:56:21.870+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - QueryFieldForm</title><content type='html'>在Web Form的資料列表中,每一次都要根據不同的資料進行搜尋條件的使用者介面設計,往往在這個階段要投入很多的時間,而且當需求者想要對這個部份進行修改時,也需要耗費相當多的心力進行處理,QueryFieldForm也就為了這樣的不便而產生.先看看該如何定義與產生的結果:&lt;br /&gt;&lt;br /&gt;定義需要的欄位(在這裡我預設這個控制項會是以兩欄的方式往下延伸)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-8Nah3XdBRKM/TkxHi01GYgI/AAAAAAAAAQc/0wclH-qnmuk/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/-8Nah3XdBRKM/TkxHi01GYgI/AAAAAAAAAQc/0wclH-qnmuk/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5641963096810873346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;執行結果UI&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-4LAh6Wr_n3U/TkxHi9YRfAI/AAAAAAAAAQU/lTSEFj79CDg/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/-4LAh6Wr_n3U/TkxHi9YRfAI/AAAAAAAAAQU/lTSEFj79CDg/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5641963099105885186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;接下來可以透過控制項提供的存取方法來取得使用者所填入的值&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-r3tkNmiCSI4/TkxHipEyqfI/AAAAAAAAAQM/hOipO_rj6fk/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/-r3tkNmiCSI4/TkxHipEyqfI/AAAAAAAAAQM/hOipO_rj6fk/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5641963093655464434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-wPdOs379KT8/TkxHiYvorqI/AAAAAAAAAQE/SwZlGMq9918/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/-wPdOs379KT8/TkxHiYvorqI/AAAAAAAAAQE/SwZlGMq9918/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5641963089271762594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;整體的概念應該是類似FormView,不過在這個部份我稍微做了一些變化,每一個欄位UI是從外部的使用者控制項(User Control)載入,一方面能有效的達到共用的目的,一方面也容易進行修改.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-7197412934381564363?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/7197412934381564363/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-queryfieldform.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7197412934381564363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7197412934381564363'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-queryfieldform.html' title='ASP.NET 自訂控制項 - QueryFieldForm'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-8Nah3XdBRKM/TkxHi01GYgI/AAAAAAAAAQc/0wclH-qnmuk/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-4179836686974685192</id><published>2011-08-16T21:58:00.003+08:00</published><updated>2011-08-16T22:25:37.798+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - Live Demo (2011/08/16)</title><content type='html'>[2011/08/16]&lt;br /&gt;[NEW] ImageView&lt;br /&gt;[NEW] RepeaterPager&lt;br /&gt;&lt;br /&gt;在Windows檔案總管有一個檢視的模式是縮圖,如果要用GridView來做,實在是很難可以達到那個效果,ImageView就是為了這樣的效果而實作的.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-l0rWNIerUvU/Tkp9oQB2U2I/AAAAAAAAAP8/uebZxS9Uqxk/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 174px;" src="http://4.bp.blogspot.com/-l0rWNIerUvU/Tkp9oQB2U2I/AAAAAAAAAP8/uebZxS9Uqxk/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5641459613685928802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;搭配RepeaterPager這個控制項,就可以有效的處理在Web上瀏覽的行為&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-KnDCgvbe-1U/Tkp9oTTtIdI/AAAAAAAAAP0/7V0vwezsayw/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 151px;" src="http://3.bp.blogspot.com/-KnDCgvbe-1U/Tkp9oTTtIdI/AAAAAAAAAP0/7V0vwezsayw/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5641459614566130130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-4179836686974685192?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/4179836686974685192/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-live-demo-20110816.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4179836686974685192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4179836686974685192'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-live-demo-20110816.html' title='ASP.NET 自訂控制項 - Live Demo (2011/08/16)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-l0rWNIerUvU/Tkp9oQB2U2I/AAAAAAAAAP8/uebZxS9Uqxk/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2211041651775596402</id><published>2011-08-12T02:35:00.009+08:00</published><updated>2011-08-12T03:36:29.370+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>ASP.NET UI Sample Demo - 單一資料表維護</title><content type='html'>接下來我將會用&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/07/aspnet-live-demo.html"&gt;ASP.NET 自訂控制項 - Live Demo&lt;/a&gt;中所建立的控制項,開發出一些使用的方式與情境.&lt;br /&gt;&lt;br /&gt;[一] 單一資料表維護&lt;br /&gt;&lt;br /&gt;瀏覽畫面可以區分為四個區塊&lt;br /&gt;1. 功能列(包含搜尋) &lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#Expander}&lt;/span&gt;&lt;br /&gt;2. 搜尋條件列 &lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#SearchKeyPanel}&lt;/span&gt;&lt;br /&gt;3. 資料顯示區 &lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#ScrollGridView}&lt;/span&gt;&lt;br /&gt;4. 資料分頁資訊與選項 &lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#GridViewPager}&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-D-yK-fF3YhY/TkQoo6YohGI/AAAAAAAAAPs/gOkRqypTZpk/s1600/Capture1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-D-yK-fF3YhY/TkQoo6YohGI/AAAAAAAAAPs/gOkRqypTZpk/s320/Capture1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5639677316707157090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;功能列(包含搜尋)可以進行縮小&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#Expander}&lt;/span&gt;,讓資料可以有更多的顯示範圍&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-iXiOxQ8nOwM/TkQokjwtTDI/AAAAAAAAAPk/9SQGtM3rLNo/s1600/Capture2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-iXiOxQ8nOwM/TkQokjwtTDI/AAAAAAAAAPk/9SQGtM3rLNo/s320/Capture2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5639677241914641458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;搜尋完成後,搜尋條件列&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#SearchKeyPanel}&lt;/span&gt;就會顯示輸入的條件或其他參數,可以點選搜尋條件列進行條件的移除或移除所有&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-XJo64RlKxxE/TkQojgPZg_I/AAAAAAAAAPc/QvAl7zJkQw8/s1600/Capture3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-XJo64RlKxxE/TkQojgPZg_I/AAAAAAAAAPc/QvAl7zJkQw8/s320/Capture3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5639677223789757426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;搜尋條件上的Parent Category是使用彈出視窗&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#DialogBox}&lt;/span&gt;的方式來進行選擇&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-MZoGySiwlGk/TkQojsAylbI/AAAAAAAAAPU/NEvWjSxz1Ro/s1600/Capture4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://3.bp.blogspot.com/-MZoGySiwlGk/TkQojsAylbI/AAAAAAAAAPU/NEvWjSxz1Ro/s320/Capture4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5639677226949711282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;點選新增按鈕或選取其中一筆資料編輯時,會開啟一個網頁內的小視窗&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#WindowsPanel}&lt;/span&gt;進行資料的新增&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-cx7ORjfYf_c/TkQojVGVHHI/AAAAAAAAAPM/UZLPc26HCkM/s1600/Capture5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-cx7ORjfYf_c/TkQojVGVHHI/AAAAAAAAAPM/UZLPc26HCkM/s320/Capture5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5639677220798930034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-yxxbpOJpgHY/TkQojCBYS_I/AAAAAAAAAPE/yZds6dbf9-0/s1600/Capture6.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-yxxbpOJpgHY/TkQojCBYS_I/AAAAAAAAAPE/yZds6dbf9-0/s320/Capture6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5639677215677893618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上述的範例可以在ASP.NET UI Sample Demo]網址中看到Live Demo.&lt;br /&gt;相關注記的部份&lt;span style="color:blue;font-weight:bold;font-size:8pt;"&gt;{#??????}&lt;/span&gt;也可以在[ASP.NET 自訂控制項 - Live Demo]網址中看到.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET UI Sample Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/sample.aspx"&gt;http://www.aspcity.idv.tw/sample.aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[ASP.NET 自訂控制項 - Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2211041651775596402?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2211041651775596402/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-ui-sample-demo.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2211041651775596402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2211041651775596402'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-ui-sample-demo.html' title='ASP.NET UI Sample Demo - 單一資料表維護'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-D-yK-fF3YhY/TkQoo6YohGI/AAAAAAAAAPs/gOkRqypTZpk/s72-c/Capture1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2995727649667453390</id><published>2011-08-08T17:52:00.003+08:00</published><updated>2011-08-08T18:01:42.549+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - Live Demo (2011/08/08)</title><content type='html'>[2011/08/08]&lt;br /&gt;[NEW] Expander&lt;br /&gt;[FIX] DialogBox在非IE瀏覽器無法傳值問題&lt;br /&gt;[BUG] DialogBox目前仍無法在Opera中使用&lt;br /&gt;&lt;br /&gt;Expander這個控制項在預設的展開模式時,當滑鼠移到內容中就會在控制項下方跳出可縮小的按鈕(如下圖)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DGb1TeX8qrs/Tj-yW-CUz2I/AAAAAAAAAO0/vr700eUUnNw/s1600/Capture1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 177px;" src="http://1.bp.blogspot.com/-DGb1TeX8qrs/Tj-yW-CUz2I/AAAAAAAAAO0/vr700eUUnNw/s320/Capture1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5638421366170767202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;當按下縮小後,就會僅呈現一行說明文字的方式,可以有效的將資料可以顯示的範圍盡量的擴大.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-p6vyuRL5YZs/Tj-yW8qxrXI/AAAAAAAAAO8/WGGXSUg5do4/s1600/Capture2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 296px; height: 131px;" src="http://2.bp.blogspot.com/-p6vyuRL5YZs/Tj-yW8qxrXI/AAAAAAAAAO8/WGGXSUg5do4/s320/Capture2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5638421365803560306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2995727649667453390?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2995727649667453390/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-live-demo-20110808.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2995727649667453390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2995727649667453390'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-live-demo-20110808.html' title='ASP.NET 自訂控制項 - Live Demo (2011/08/08)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DGb1TeX8qrs/Tj-yW-CUz2I/AAAAAAAAAO0/vr700eUUnNw/s72-c/Capture1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-8061941076046993811</id><published>2011-08-02T17:47:00.006+08:00</published><updated>2011-08-08T18:01:27.452+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - Live Demo (2011/08/02)</title><content type='html'>[2011/08/02]&lt;br /&gt;[NEW] ScrollGridView 加入凍結欄位設定&lt;br /&gt;[NEW] Spinner&lt;br /&gt;[NEW] WindowPanel&lt;br /&gt;&lt;br /&gt;Spinner是一個類似UpdateProgress的控制項,不過原始的UpdateProgress只能顯示在一個固定的地方,而且沒辦法根據畫面來呈現,Spinner在顯示時,會最大化在目前的視窗,並加上一個半透明的背景,然後顯示讀取的圖示與訊息在視窗中間.你只要把Spinner放在會透過UpdatePanel更新的頁面上,就會自動在更新時出現效果,步需要額外的設定.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-90FoH5ff9nU/TjfPAPfFk6I/AAAAAAAAAOk/nsVV-KilbRU/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 242px;" src="http://3.bp.blogspot.com/-90FoH5ff9nU/TjfPAPfFk6I/AAAAAAAAAOk/nsVV-KilbRU/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5636201061741335458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WindowPanel主要用於動態的載入使用者控制項,並可根據目前視窗的大小進行選擇.當視窗關閉時也可以根據需要進行重新整理動作.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-4ST-d6O1NVQ/TjfRGWRnyZI/AAAAAAAAAOs/YVADld93A90/s1600/Capture2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 242px;" src="http://2.bp.blogspot.com/-4ST-d6O1NVQ/TjfRGWRnyZI/AAAAAAAAAOs/YVADld93A90/s320/Capture2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5636203365666376082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-8061941076046993811?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/8061941076046993811/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-live-demo-20110802.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8061941076046993811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8061941076046993811'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/08/aspnet-live-demo-20110802.html' title='ASP.NET 自訂控制項 - Live Demo (2011/08/02)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-90FoH5ff9nU/TjfPAPfFk6I/AAAAAAAAAOk/nsVV-KilbRU/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-5176652061678690691</id><published>2011-07-28T14:51:00.006+08:00</published><updated>2011-08-06T02:16:02.253+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Freeze Column'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - GridView 固定標題列與凍結欄位</title><content type='html'>經過相當多的測試,終於找出比較可行的GridView凍結欄位做法,以下是畫面擷圖與Demo.&lt;br /&gt;&lt;br /&gt;P.S. 可以試著把瀏覽視窗稍微縮小一點,就可以看到凍結的效果.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-yKayP8ur4s4/TjEHkUm51qI/AAAAAAAAAOc/ENCmVpQNq-s/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 235px;" src="http://2.bp.blogspot.com/-yKayP8ur4s4/TjEHkUm51qI/AAAAAAAAAOc/ENCmVpQNq-s/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5634292929405769378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;選擇左邊選單的ScrollGridView&lt;br /&gt;&lt;br /&gt;如果此範例在你的瀏覽器中有任何的問題,希望您可以讓我知道,謝謝!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-5176652061678690691?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/5176652061678690691/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-gridview.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/5176652061678690691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/5176652061678690691'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-gridview.html' title='ASP.NET 自訂控制項 - GridView 固定標題列與凍結欄位'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-yKayP8ur4s4/TjEHkUm51qI/AAAAAAAAAOc/ENCmVpQNq-s/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2785656356228135111</id><published>2011-07-27T21:21:00.004+08:00</published><updated>2011-08-03T00:57:50.173+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - Live Demo (2011/07/27)</title><content type='html'>[2011/07/27]&lt;br /&gt;[NEW] TabStrip&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Dok9DGTtqr8/TjAROuVpQKI/AAAAAAAAAOU/CB3xs4hPtN4/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 185px;" src="http://2.bp.blogspot.com/-Dok9DGTtqr8/TjAROuVpQKI/AAAAAAAAAOU/CB3xs4hPtN4/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5634022078495146146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2785656356228135111?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2785656356228135111/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo-20110727.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2785656356228135111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2785656356228135111'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo-20110727.html' title='ASP.NET 自訂控制項 - Live Demo (2011/07/27)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Dok9DGTtqr8/TjAROuVpQKI/AAAAAAAAAOU/CB3xs4hPtN4/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2134272910851898923</id><published>2011-07-26T17:30:00.003+08:00</published><updated>2011-08-03T00:57:58.906+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - Live Demo (2011/07/26)</title><content type='html'>[2011/07/26]&lt;br /&gt;[NEW] GroupButton&lt;br /&gt;[FIX] 修正ScrollGridView在Mozilla Firefox的標題列高度問題&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Pbf6h8HFZbc/Ti6LHoaXAzI/AAAAAAAAAOM/m9cfmkKzLnI/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 160px;" src="http://2.bp.blogspot.com/-Pbf6h8HFZbc/Ti6LHoaXAzI/AAAAAAAAAOM/m9cfmkKzLnI/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5633593147110392626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2134272910851898923?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2134272910851898923/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo-20110726.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2134272910851898923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2134272910851898923'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo-20110726.html' title='ASP.NET 自訂控制項 - Live Demo (2011/07/26)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Pbf6h8HFZbc/Ti6LHoaXAzI/AAAAAAAAAOM/m9cfmkKzLnI/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-7111116412683469692</id><published>2011-07-25T01:42:00.003+08:00</published><updated>2011-08-03T00:58:10.522+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - Live Demo (2011/07/25)</title><content type='html'>[2011/07/25]&lt;br /&gt;[FIX] 修正PopUp對齊問題&lt;br /&gt;[FIX] DropDownButton -&gt; DorpDownList&lt;br /&gt;[NEW] DropDownButton&lt;br /&gt;[NEW] SplitButton&lt;br /&gt;&lt;br /&gt;新增了一個比較多功能的控制項SplitButton,功能說明如下:&lt;br /&gt;1. 包含一個預設的按鈕&lt;br /&gt;2. 可額外連結一個ContextMenu的控制項,按下控制項額外的指標就會以PopUp的方式顯示.&lt;br /&gt;3. 可設定為大圖示顯示與小型圖示顯示&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-M58Ah_SbOO0/Tixb4NnPJkI/AAAAAAAAAOE/9bn8JDZyzLQ/s1600/Capture1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 262px; height: 165px;" src="http://2.bp.blogspot.com/-M58Ah_SbOO0/Tixb4NnPJkI/AAAAAAAAAOE/9bn8JDZyzLQ/s320/Capture1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5632978255218681410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[Live Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-7111116412683469692?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/7111116412683469692/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo-20110725.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7111116412683469692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7111116412683469692'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo-20110725.html' title='ASP.NET 自訂控制項 - Live Demo (2011/07/25)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-M58Ah_SbOO0/Tixb4NnPJkI/AAAAAAAAAOE/9bn8JDZyzLQ/s72-c/Capture1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-5693070733047691291</id><published>2011-07-21T08:52:00.004+08:00</published><updated>2011-08-03T00:58:29.092+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET 自訂控制項 - Live Demo</title><content type='html'>目前已經開發完成的控制項有下列幾種&lt;br /&gt;ContextMenu&lt;br /&gt;DateBox&lt;br /&gt;DateRangeBox&lt;br /&gt;DialogBox&lt;br /&gt;DropDownButton&lt;br /&gt;GridViewPager&lt;br /&gt;MultiItemBox&lt;br /&gt;NavigationBar&lt;br /&gt;ScrollGridView&lt;br /&gt;SearchKeyPanel&lt;br /&gt;SplitterPanel&lt;br /&gt;&lt;br /&gt;我準備了一個範例的網頁,可以直接進行一些簡單的操作,有興趣的人可以到&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-gCSpAhNtJnc/Tid5Q67D0zI/AAAAAAAAANI/sIJLDDQBDto/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 230px;" src="http://4.bp.blogspot.com/-gCSpAhNtJnc/Tid5Q67D0zI/AAAAAAAAANI/sIJLDDQBDto/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5631603190651933490" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-5693070733047691291?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/5693070733047691291/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/5693070733047691291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/5693070733047691291'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-live-demo.html' title='ASP.NET 自訂控制項 - Live Demo'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-gCSpAhNtJnc/Tid5Q67D0zI/AAAAAAAAANI/sIJLDDQBDto/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-7957162348517446857</id><published>2011-07-15T07:37:00.002+08:00</published><updated>2011-07-15T07:41:12.852+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>提出您的想法或感興趣的議題!!</title><content type='html'>如果你有任何想法,或是對任何相關技術有興趣的,歡迎您直接EMail給我.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-7957162348517446857?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/7957162348517446857/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7957162348517446857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7957162348517446857'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/blog-post.html' title='提出您的想法或感興趣的議題!!'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2725911876553732107</id><published>2011-07-14T21:05:00.005+08:00</published><updated>2011-08-03T00:58:49.524+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET自訂控制項 - 簡單的日期選擇輸入框 DateBox (二)</title><content type='html'>此篇將延續&lt;br /&gt;&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/07/aspnet-datebox.html"&gt;ASP.NET自訂控制項 - 簡單的日期選擇輸入框 DateBox&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在上次的分享中,雖然這個控制項已經可以正常的運作,但是不知道有沒有人發現在設計階段(Design-Time)是有一些小問題的.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-B46zR_STbEc/Th7voN4RZ_I/AAAAAAAAAMo/AeMrVH6tlYg/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 249px;" src="http://2.bp.blogspot.com/-B46zR_STbEc/Th7voN4RZ_I/AAAAAAAAAMo/AeMrVH6tlYg/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5629200058459187186" /&gt;&lt;/a&gt;&lt;br /&gt;控制項在設計階段的確是可以正常顯示.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-DCCPtGp_v68/Th7vod9XyNI/AAAAAAAAAMw/AuOBpNmO_ms/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 245px; height: 296px;" src="http://1.bp.blogspot.com/-DCCPtGp_v68/Th7vod9XyNI/AAAAAAAAAMw/AuOBpNmO_ms/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5629200062775544018" /&gt;&lt;/a&gt;&lt;br /&gt;在屬性設定視窗中仍然有以下問題:&lt;br /&gt;&lt;br /&gt;1. Date這個屬性應該是在執行階段中,用程式碼來進行存取使用的&lt;br /&gt;2. ImageUrl沒有辦法像Image一樣可以使用挑選的方式進行設定&lt;br /&gt;&lt;br /&gt;針對上述問題,我們可以透過以下方式進行處理&lt;br /&gt;&lt;br /&gt;1. 使用Browsable Attribute隱藏屬性是否顯示&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;[&lt;br /&gt;Browsable(false)&lt;br /&gt;]&lt;br /&gt;public DateTime Date&lt;br /&gt;{&lt;br /&gt;    get { return Convert.ToDateTime(this.DateText); }&lt;br /&gt;    set { this.DateText = value.ToString(this.Format); }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;2. 使用Editor Attribute指定屬性的編輯器&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;[&lt;br /&gt;Editor("System.Web.UI.Design.ImageUrlEditor", typeof(UITypeEditor))&lt;br /&gt;]&lt;br /&gt;public string ImageUrl&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        object value = this.ViewState["ImageUrl"];&lt;br /&gt;&lt;br /&gt;        if (value == null) return "";&lt;br /&gt;&lt;br /&gt;        return (string)value;&lt;br /&gt;    }&lt;br /&gt;    set { this.ViewState["ImageUrl"] = value; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;3. 透過DefaultValue Attribute來設定屬性預設值與Category Attribute來設定屬性的分類&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;[&lt;br /&gt;DefaultValue("yyyy/MM/dd"),&lt;br /&gt;Category("Likol")&lt;br /&gt;]&lt;br /&gt;public string Format&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        object value = this.ViewState["Format"];&lt;br /&gt;&lt;br /&gt;        if (value == null) return "yyyy/MM/dd";&lt;br /&gt;&lt;br /&gt;        return (string)value;&lt;br /&gt;    }&lt;br /&gt;    set { this.ViewState["Format"] = value; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;修正完成後,就可以在設計階段中看到對應的效果&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-wixQtlccGm0/Th7volbg5qI/AAAAAAAAAM4/BMGSXtKvNwU/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 246px; height: 296px;" src="http://3.bp.blogspot.com/-wixQtlccGm0/Th7volbg5qI/AAAAAAAAAM4/BMGSXtKvNwU/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5629200064781018786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-xqfHmwidfv4/Th7vo073e4I/AAAAAAAAANA/SLkpe83QMco/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 164px;" src="http://3.bp.blogspot.com/-xqfHmwidfv4/Th7vo073e4I/AAAAAAAAANA/SLkpe83QMco/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5629200068943248258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;修改後的完整程式碼如下&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DateBox.cs&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using AjaxControlToolkit;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Drawing.Design;&lt;br /&gt;&lt;br /&gt;namespace Likol.Web.DemoWebSite.WebControls&lt;br /&gt;{&lt;br /&gt;    [&lt;br /&gt;    ToolboxData("&lt;{0}:DateBox runat=server&gt;&lt;/{0}:DateBox&gt;")&lt;br /&gt;    ]&lt;br /&gt;    public class DateBox : CompositeControl&lt;br /&gt;    {&lt;br /&gt;        private TextBox txtValue;&lt;br /&gt;        private ImageButton ibButton;&lt;br /&gt;        private CalendarExtender ceCalendar;&lt;br /&gt;&lt;br /&gt;        [&lt;br /&gt;        DefaultValue(""),&lt;br /&gt;        Category("Likol"),&lt;br /&gt;        Editor("System.Web.UI.Design.ImageUrlEditor", typeof(UITypeEditor))&lt;br /&gt;        ]&lt;br /&gt;        public string ImageUrl&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                object value = this.ViewState["ImageUrl"];&lt;br /&gt;&lt;br /&gt;                if (value == null) return "";&lt;br /&gt;&lt;br /&gt;                return (string)value;&lt;br /&gt;            }&lt;br /&gt;            set { this.ViewState["ImageUrl"] = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [&lt;br /&gt;        DefaultValue("yyyy/MM/dd"),&lt;br /&gt;        Category("Likol")&lt;br /&gt;        ]&lt;br /&gt;        public string Format&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                object value = this.ViewState["Format"];&lt;br /&gt;&lt;br /&gt;                if (value == null) return "yyyy/MM/dd";&lt;br /&gt;&lt;br /&gt;                return (string)value;&lt;br /&gt;            }&lt;br /&gt;            set { this.ViewState["Format"] = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [&lt;br /&gt;        DefaultValue(""),&lt;br /&gt;        Category("Likol")&lt;br /&gt;        ]&lt;br /&gt;        public string DateText&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                this.EnsureChildControls();&lt;br /&gt;&lt;br /&gt;                return this.txtValue.Text;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                this.EnsureChildControls();&lt;br /&gt;&lt;br /&gt;                this.txtValue.Text = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [&lt;br /&gt;        Browsable(false)&lt;br /&gt;        ]&lt;br /&gt;        public DateTime Date&lt;br /&gt;        {&lt;br /&gt;            get { return Convert.ToDateTime(this.DateText); }&lt;br /&gt;            set { this.DateText = value.ToString(this.Format); }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected override void CreateChildControls()&lt;br /&gt;        {&lt;br /&gt;            this.txtValue = new TextBox();&lt;br /&gt;            this.txtValue.ID = "Value";&lt;br /&gt;            this.txtValue.MaxLength = 10;&lt;br /&gt;&lt;br /&gt;            this.ibButton = new ImageButton();&lt;br /&gt;            this.ibButton.ID = "Button";&lt;br /&gt;            this.ibButton.ImageUrl = this.ImageUrl;&lt;br /&gt;&lt;br /&gt;            this.ceCalendar = new CalendarExtender();&lt;br /&gt;            this.ceCalendar.ID = "Calendar";&lt;br /&gt;            this.ceCalendar.TargetControlID = this.txtValue.ID;&lt;br /&gt;            this.ceCalendar.PopupButtonID = this.ibButton.ID;&lt;br /&gt;            this.ceCalendar.Format = this.Format;&lt;br /&gt;&lt;br /&gt;            this.Controls.Add(this.txtValue);&lt;br /&gt;            this.Controls.Add(this.ibButton);&lt;br /&gt;            this.Controls.Add(this.ceCalendar);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2725911876553732107?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2725911876553732107/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-datebox_14.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2725911876553732107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2725911876553732107'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-datebox_14.html' title='ASP.NET自訂控制項 - 簡單的日期選擇輸入框 DateBox (二)'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-B46zR_STbEc/Th7voN4RZ_I/AAAAAAAAAMo/AeMrVH6tlYg/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-4403862241663579444</id><published>2011-07-14T14:32:00.006+08:00</published><updated>2011-08-03T00:59:04.396+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebControl'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Server Control'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='控制項'/><title type='text'>ASP.NET自訂控制項 - 簡單的日期選擇輸入框 DateBox</title><content type='html'>有了AjaxToolkit之後,應該就可以很容易的使用CalendarExtender與TextBox來達到日期選擇的功能,不過仍然需要花費一點時間在CalendarExtender控制項上的設定,其實透過一些簡單的程式碼包裝成Server Control就可以很容易的使用這樣的功能.&lt;br /&gt;&lt;br /&gt;1.先來看看整合的效果與使用方式&lt;br /&gt;&lt;b&gt;ASPX&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head runat="server"&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;form id="form1" runat="server"&amp;gt;&lt;br /&gt;        &amp;lt;ajaxToolkit:ToolkitScriptManager ID="scriptManager1" runat="server" /&amp;gt;&lt;br /&gt;        &lt;br /&gt;        &amp;lt;Demo:DateBox ID="DateBox1" runat="server"&lt;br /&gt;            ImageUrl="~/Images/DateBox.gif" Format="yyyy/MM/dd" /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;            &lt;br /&gt;        &amp;lt;asp:Button ID="btnSubmit" runat="server" Text="Submit" &lt;br /&gt;            OnClick="btnSubmit_Click" /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;            &lt;br /&gt;        Date: &amp;lt;asp:Label ID="lblDate" Font-Bold="true" runat="server" /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;        DateText: &amp;lt;asp:Label ID="lblDateText" Font-Bold="true" runat="server" /&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;namespace Likol.Web.DemoWebSite&lt;br /&gt;{&lt;br /&gt;    public partial class DateBox : System.Web.UI.Page&lt;br /&gt;    {&lt;br /&gt;        protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected void btnSubmit_Click(object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            this.lblDate.Text = this.DateBox1.Date.ToString("yyyy/MM/dd");&lt;br /&gt;            this.lblDateText.Text = this.DateBox1.DateText;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;我們可以透過兩個屬性Date(DateTime), DateText(string)來取得輸入資料.&lt;br /&gt;&lt;br /&gt;日期選擇輸入框 DateBox Demo&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/DateBox.aspx"&gt;http://www.aspcity.idv.tw/DateBox.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;雖然在這個範例中似乎沒有帶來相當大的便利性,可是對程式設計師來說能少一個步驟就少一個步驟,能把更多的時間花費在重要的程式碼上,其實才是重要的.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DateBox.cs&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using AjaxControlToolkit;&lt;br /&gt;&lt;br /&gt;namespace Likol.Web.DemoWebSite.WebControls&lt;br /&gt;{&lt;br /&gt;    [&lt;br /&gt;    ToolboxData("&lt;{0}:DateBox runat=server&gt;&lt;/{0}:DateBox&gt;")&lt;br /&gt;    ]&lt;br /&gt;    public class DateBox : CompositeControl&lt;br /&gt;    {&lt;br /&gt;        private TextBox txtValue;&lt;br /&gt;        private ImageButton ibButton;&lt;br /&gt;        private CalendarExtender ceCalendar;&lt;br /&gt;&lt;br /&gt;        public string ImageUrl&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                object value = this.ViewState["ImageUrl"];&lt;br /&gt;&lt;br /&gt;                if (value == null) return "";&lt;br /&gt;&lt;br /&gt;                return (string)value;&lt;br /&gt;            }&lt;br /&gt;            set { this.ViewState["ImageUrl"] = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public string Format&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                object value = this.ViewState["Format"];&lt;br /&gt;&lt;br /&gt;                if (value == null) return "";&lt;br /&gt;&lt;br /&gt;                return (string)value;&lt;br /&gt;            }&lt;br /&gt;            set { this.ViewState["Format"] = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public string DateText&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                this.EnsureChildControls();&lt;br /&gt;&lt;br /&gt;                return this.txtValue.Text;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                this.EnsureChildControls();&lt;br /&gt;&lt;br /&gt;                this.txtValue.Text = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public DateTime Date&lt;br /&gt;        {&lt;br /&gt;            get { return Convert.ToDateTime(this.DateText); }&lt;br /&gt;            set { this.DateText = value.ToString(this.Format); }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected override void CreateChildControls()&lt;br /&gt;        {&lt;br /&gt;            this.txtValue = new TextBox();&lt;br /&gt;            this.txtValue.ID = "Value";&lt;br /&gt;            this.txtValue.MaxLength = 10;&lt;br /&gt;&lt;br /&gt;            this.ibButton = new ImageButton();&lt;br /&gt;            this.ibButton.ID = "Button";&lt;br /&gt;            this.ibButton.ImageUrl = this.ImageUrl;&lt;br /&gt;&lt;br /&gt;            this.ceCalendar = new CalendarExtender();&lt;br /&gt;            this.ceCalendar.ID = "Calendar";&lt;br /&gt;            this.ceCalendar.TargetControlID = this.txtValue.ID;&lt;br /&gt;            this.ceCalendar.PopupButtonID = this.ibButton.ID;&lt;br /&gt;            this.ceCalendar.Format = this.Format;&lt;br /&gt;&lt;br /&gt;            this.Controls.Add(this.txtValue);&lt;br /&gt;            this.Controls.Add(this.ibButton);&lt;br /&gt;            this.Controls.Add(this.ceCalendar);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Updated:  &lt;a href="http://twlikol.blogspot.com/2011/07/aspnet-datebox_14.html"&gt;ASP.NET自訂控制項 - 簡單的日期選擇輸入框 DateBox (二)&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-4403862241663579444?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/4403862241663579444/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-datebox.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4403862241663579444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/4403862241663579444'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/aspnet-datebox.html' title='ASP.NET自訂控制項 - 簡單的日期選擇輸入框 DateBox'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-3834632575494469972</id><published>2011-07-12T10:57:00.004+08:00</published><updated>2011-08-06T02:17:21.860+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Demo - ASP.NET自訂控制項 - 固定欄位標題列 ScrollGridView</title><content type='html'>我準備了一個關於ScrollView的Demo網頁,大家可以去實際看一下它的效果是如何,有任何的問題或想法也可以讓我知道.&lt;br /&gt;&lt;br /&gt;你可以試著將瀏覽的視窗拉大或拉小,這樣可以比較看得出來效果.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:16px;font-weight:bold;"&gt;[固定欄位標題列 ScrollGridView Demo]&lt;br /&gt;&lt;a target="_blank" href="http://www.aspcity.idv.tw/demo.aspx"&gt;http://www.aspcity.idv.tw/demo.aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;選擇左邊選單的ScrollGridView&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-3834632575494469972?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/3834632575494469972/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/demo-aspnet-scrollgridview.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3834632575494469972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3834632575494469972'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/demo-aspnet-scrollgridview.html' title='Demo - ASP.NET自訂控制項 - 固定欄位標題列 ScrollGridView'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6288610677269179312</id><published>2011-07-10T07:38:00.011+08:00</published><updated>2011-07-23T01:27:14.775+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vsix'/><category scheme='http://www.blogger.com/atom/ns#' term='T4 Text Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Visual Studio 2010 T4 Text Templates 與 SqlExector 整合</title><content type='html'>在先前的分享中有提到以下兩個部份:&lt;br /&gt;1. &lt;a target="_blank" href="http://twlikol.blogspot.com/2011/07/visual-studio-2010-t4-text-templates.html"&gt;Visual Studio 2010 T4 Text Templates - 文字範本與程式碼產生&lt;/a&gt;&lt;br /&gt;2. &lt;a target="_blank" href="http://twlikol.blogspot.com/2011/07/visual-studio-2010-sqlexector-sql.html"&gt;Visual Studio 2010 SqlExector - 快速執行.sql檔案&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;現在我將兩個工具進行了一些整合,並將整合後的結果更能應用在實際的程式開發上,以下就是這整個概念的說明&lt;br /&gt;&lt;br /&gt;1. 在SQL Server上建立如下的資料庫與包含的資料表&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-RnyeCWsKnFA/Thjsq2jnKII/AAAAAAAAAMg/usYqcoxbaUY/s1600/Capture0.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 159px; height: 320px;" src="http://1.bp.blogspot.com/-RnyeCWsKnFA/Thjsq2jnKII/AAAAAAAAAMg/usYqcoxbaUY/s320/Capture0.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507955342977154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. 在Visual Studio 2010中,建立一個空白的Web Application(C#)專案,並建立如下圖的資料夾結構&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-q-M0MtvE1f0/ThjsqgX0iCI/AAAAAAAAAMY/vOWGWR-4eHs/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 245px; height: 282px;" src="http://1.bp.blogspot.com/-q-M0MtvE1f0/ThjsqgX0iCI/AAAAAAAAAMY/vOWGWR-4eHs/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507949387941922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. 編輯專案中的Web.Config檔案,加入你需要連線的資料庫連結字串&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-afPnAFnfORE/ThjsqIfFCrI/AAAAAAAAAMQ/dM-aKitmvvQ/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 145px;" src="http://4.bp.blogspot.com/-afPnAFnfORE/ThjsqIfFCrI/AAAAAAAAAMQ/dM-aKitmvvQ/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507942975933106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. 接下來會使用到的功能就是這次整合好的成果.&lt;br /&gt;&lt;br /&gt;5. 滑鼠右鍵選取SQL這個資料夾並選擇新增項目,在視窗中可看到一個新的分類"Likol",選擇"Sql Text Template"項目,並修改檔案名稱為"ProductCategory.tt".&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-l2IqY2v5RP8/ThjsqAJEwuI/AAAAAAAAAMI/3ffJ2EPqk-U/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-l2IqY2v5RP8/ThjsqAJEwuI/AAAAAAAAAMI/3ffJ2EPqk-U/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507940736156386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 完成後會出現資料表的選擇畫面,先選擇稍早鎖建立的資料庫連線設定,並選擇"ProductCategory"這個資料表&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-ydPUicv_6gA/ThjsjXzW4ZI/AAAAAAAAAMA/Gptu_Thw9tc/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-ydPUicv_6gA/ThjsjXzW4ZI/AAAAAAAAAMA/Gptu_Thw9tc/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507826828435858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. 重複5的步驟,但這次選擇的新增項目改為"Data Text Template",並一樣選擇"ProductCategory"這個資料表&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-X2k1YJ77DDE/ThjsjLn8UcI/AAAAAAAAAL4/TsvCfKYzMu8/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-X2k1YJ77DDE/ThjsjLn8UcI/AAAAAAAAAL4/TsvCfKYzMu8/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507823559332290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-__xK-vgbKR0/Thjsi3_qL4I/AAAAAAAAALw/F_916OdNljk/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://4.bp.blogspot.com/-__xK-vgbKR0/Thjsi3_qL4I/AAAAAAAAALw/F_916OdNljk/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507818290098050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8. 重複5,6,7步驟,但資料表的部份選擇"Product"&lt;br /&gt;&lt;br /&gt;9.上述步驟完成後可看到如下圖的畫面&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-9iynlSwdXX0/Thjsi7e8ntI/AAAAAAAAALo/CCZSRYE0eIQ/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 246px; height: 294px;" src="http://2.bp.blogspot.com/-9iynlSwdXX0/Thjsi7e8ntI/AAAAAAAAALo/CCZSRYE0eIQ/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507819226635986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;10. 接下來我們在SQL這個資料夾使用右鍵選擇,並選取SqlExector來執行由Text Template所產生的SQL Script&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-1iX4TEkRRWw/ThjsiqfemSI/AAAAAAAAALg/PJ2inoMjo3A/s1600/Capture8.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-1iX4TEkRRWw/ThjsiqfemSI/AAAAAAAAALg/PJ2inoMjo3A/s320/Capture8.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507814665460002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-pS9OqV5Dv_o/ThjsWCk-26I/AAAAAAAAALY/pH94oX7MEn0/s1600/Capture9.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-pS9OqV5Dv_o/ThjsWCk-26I/AAAAAAAAALY/pH94oX7MEn0/s320/Capture9.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507597792697250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-oj1t3N25WNI/ThjsWOrmRlI/AAAAAAAAALQ/Epn5JMlbVew/s1600/Capture10.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-oj1t3N25WNI/ThjsWOrmRlI/AAAAAAAAALQ/Epn5JMlbVew/s320/Capture10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507601041671762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;11. 執行完成後,我們可以在資料庫中看到,相關資料異動的Store Procedure都已經建立完成.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-xQArd4KyEQA/ThjsV0vAHrI/AAAAAAAAALI/TD5NTPPVIIM/s1600/Capture11.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 159px; height: 320px;" src="http://2.bp.blogspot.com/-xQArd4KyEQA/ThjsV0vAHrI/AAAAAAAAALI/TD5NTPPVIIM/s320/Capture11.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507594076626610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;12. 現在,我們就可以使用由"Data Text Template"所產生的相關資料表操作,來進行程式的撰寫.我建立了如下的程式界面與程式&lt;br /&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head runat="server"&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;form id="form1" runat="server"&amp;gt;&lt;br /&gt;        &amp;lt;table&amp;gt;&lt;br /&gt;            &amp;lt;tr&amp;gt;&lt;br /&gt;                &amp;lt;td colspan="2"&amp;gt;&amp;lt;b&amp;gt;Create&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/tr&amp;gt;&lt;br /&gt;            &amp;lt;tr&amp;gt;&lt;br /&gt;                &amp;lt;td&amp;gt;&amp;lt;asp:TextBox ID="txtName" runat="server" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;                &amp;lt;td&amp;gt;&amp;lt;asp:Button ID="btnCreate" Text="Create" runat="server" &lt;br /&gt;                        onclick="btnCreate_Click" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;/table&amp;gt;&lt;br /&gt;        &amp;lt;br/&amp;gt;&lt;br /&gt;        &amp;lt;br/&amp;gt;&lt;br /&gt;        &amp;lt;table&amp;gt;&lt;br /&gt;            &amp;lt;tr&amp;gt;&lt;br /&gt;                &amp;lt;td colspan="2"&amp;gt;&amp;lt;b&amp;gt;Select&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/tr&amp;gt;&lt;br /&gt;            &amp;lt;tr&amp;gt;&lt;br /&gt;                &amp;lt;td&amp;gt;&amp;lt;asp:TextBox ID="txtID" runat="server" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;                &amp;lt;td&amp;gt;&amp;lt;asp:Button ID="btnSelect" Text="Select" runat="server" &lt;br /&gt;                        onclick="btnSelect_Click" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/tr&amp;gt;&lt;br /&gt;            &amp;lt;tr&amp;gt;&lt;br /&gt;                &amp;lt;td colspan="2"&amp;gt;&lt;br /&gt;                    Name: &amp;lt;asp:Label ID="lblName" Font-Bold="true" runat="server"&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;                &amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;/table&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;namespace WebApplication1&lt;br /&gt;{&lt;br /&gt;    public partial class ProductCategory : System.Web.UI.Page&lt;br /&gt;    {&lt;br /&gt;        protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected void btnCreate_Click(object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            Data.ProductCategory productCategory = new Data.ProductCategory();&lt;br /&gt;            productCategory.ID = Guid.NewGuid();&lt;br /&gt;            productCategory.Name = this.txtName.Text;&lt;br /&gt;&lt;br /&gt;            Data.ProductCategory.Create(productCategory);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected void btnSelect_Click(object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            Data.ProductCategory productCategory = new Data.ProductCategory();&lt;br /&gt;            productCategory.ID = new Guid(this.txtID.Text);&lt;br /&gt;&lt;br /&gt;            productCategory = Data.ProductCategory.Select(productCategory);&lt;br /&gt;&lt;br /&gt;            this.lblName.Text = productCategory.Name;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;13. 輸入要新增的ProductCategroy名稱,並選擇Create.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Vp_P_doHArI/ThjsV0v7UZI/AAAAAAAAALA/kvGJXkI25Zw/s1600/Capture12.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://1.bp.blogspot.com/-Vp_P_doHArI/ThjsV0v7UZI/AAAAAAAAALA/kvGJXkI25Zw/s320/Capture12.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507594080506258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;14. 從資料表中找出剛剛新增的資料ID,並填入畫面,接著按下Select按鈕,就會將該Category的名稱顯示出來.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-F7DpCNaoMlc/ThjsVjvFAdI/AAAAAAAAAK4/GVfr0Jn4TSo/s1600/Capture13.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 207px;" src="http://2.bp.blogspot.com/-F7DpCNaoMlc/ThjsVjvFAdI/AAAAAAAAAK4/GVfr0Jn4TSo/s320/Capture13.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5627507589513544146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Data\SQL\ProductCategory.tt 產生的內容如下:&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: sql"&gt;&lt;br /&gt;IF EXISTS(SELECT * FROM sys.objects WHERE type='P' AND name='sp_ProductCategory_Create')&lt;br /&gt; DROP PROCEDURE sp_ProductCategory_Create&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE sp_ProductCategory_Create&lt;br /&gt; @ID AS uniqueidentifier, &lt;br /&gt; @Name AS nvarchar(50) &lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt; INSERT INTO ProductCategory&lt;br /&gt; (&lt;br /&gt;  ID, &lt;br /&gt;  Name &lt;br /&gt; )&lt;br /&gt; VALUES&lt;br /&gt; (&lt;br /&gt;  @ID, &lt;br /&gt;  @Name &lt;br /&gt; )&lt;br /&gt;END&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;IF EXISTS(SELECT * FROM sys.objects WHERE type='P' AND name='sp_ProductCategory_Update')&lt;br /&gt; DROP PROCEDURE sp_ProductCategory_Update&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE sp_ProductCategory_Update&lt;br /&gt; @ID AS uniqueidentifier, &lt;br /&gt; @Name AS nvarchar(50) &lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt; UPDATE ProductCategory SET&lt;br /&gt;  Name=@Name &lt;br /&gt; WHERE&lt;br /&gt;  ID=@ID &lt;br /&gt;END&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;IF EXISTS(SELECT * FROM sys.objects WHERE type='P' AND name='sp_ProductCategory_Delete')&lt;br /&gt; DROP PROCEDURE sp_ProductCategory_Delete&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE sp_ProductCategory_Delete&lt;br /&gt;  @ID AS uniqueidentifier &lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt; DELETE ProductCategory WHERE&lt;br /&gt;  ID=@ID &lt;br /&gt;END&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;IF EXISTS(SELECT * FROM sys.objects WHERE type='P' AND name='sp_ProductCategory_Select')&lt;br /&gt; DROP PROCEDURE sp_ProductCategory_Select&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE sp_ProductCategory_Select&lt;br /&gt;  @ID AS uniqueidentifier &lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt; SELECT * FROM ProductCategory WHERE&lt;br /&gt;  ID=@ID &lt;br /&gt;END&lt;br /&gt;GO&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Data\ProductCategory.tt 產生的內容如下:&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;//------------------------------------------------------------------------------&lt;br /&gt;// &lt;auto-generated&gt;&lt;br /&gt;// This code was generated by Likol.VisualStudio.Template Tool.&lt;br /&gt;// Last generater time: 2011/7/10 上午 06:23:11&lt;br /&gt;// &lt;/auto-generated&gt;&lt;br /&gt;//------------------------------------------------------------------------------&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Data.SqlClient;&lt;br /&gt;using Likol.Data;&lt;br /&gt;using Likol.Web.Validation;&lt;br /&gt;&lt;br /&gt;namespace WebApplication1.Data&lt;br /&gt;{&lt;br /&gt; public partial class ProductCategory&lt;br /&gt; {&lt;br /&gt;  private Guid _ID;&lt;br /&gt;  private string _Name;&lt;br /&gt;&lt;br /&gt;  public Guid ID&lt;br /&gt;  {&lt;br /&gt;   get { return this._ID; }&lt;br /&gt;   set { this._ID = value; }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  [Length(50)]&lt;br /&gt;  public string Name&lt;br /&gt;  {&lt;br /&gt;   get { return this._Name; }&lt;br /&gt;   set { this._Name = value; }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void Create(ProductCategory _ProductCategory)&lt;br /&gt;  {&lt;br /&gt;   SqlParameter[] parameters = new SqlParameter[]{&lt;br /&gt;    new SqlParameter("ID", _ProductCategory.ID), &lt;br /&gt;    new SqlParameter("Name", _ProductCategory.Name) &lt;br /&gt;   };&lt;br /&gt;&lt;br /&gt;   string commandText = "sp_ProductCategory_Create";&lt;br /&gt;&lt;br /&gt;   DatabaseManager.ExecuteNonQuery(commandText, parameters);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void Update(ProductCategory _ProductCategory)&lt;br /&gt;  {&lt;br /&gt;   SqlParameter[] parameters = new SqlParameter[]{&lt;br /&gt;    new SqlParameter("ID", _ProductCategory.ID), &lt;br /&gt;    new SqlParameter("Name", _ProductCategory.Name) &lt;br /&gt;   };&lt;br /&gt;&lt;br /&gt;   string commandText = "sp_ProductCategory_Update";&lt;br /&gt;&lt;br /&gt;   DatabaseManager.ExecuteNonQuery(commandText, parameters);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void Delete(ProductCategory _ProductCategory)&lt;br /&gt;  {&lt;br /&gt;   SqlParameter[] parameters = new SqlParameter[]{&lt;br /&gt;    new SqlParameter("ID", _ProductCategory.ID) &lt;br /&gt;   };&lt;br /&gt;&lt;br /&gt;   string commandText = "sp_ProductCategory_Delete";&lt;br /&gt;&lt;br /&gt;   DatabaseManager.ExecuteNonQuery(commandText, parameters);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static ProductCategory Select(ProductCategory _ProductCategory)&lt;br /&gt;  {&lt;br /&gt;   SqlParameter[] parameters = new SqlParameter[]{&lt;br /&gt;    new SqlParameter("ID", _ProductCategory.ID) &lt;br /&gt;   };&lt;br /&gt;&lt;br /&gt;   string commandText = "sp_ProductCategory_Select";&lt;br /&gt;&lt;br /&gt;   SqlConnection sqlConnection = null;&lt;br /&gt;&lt;br /&gt;   SqlDataReader sqlDataReader = DatabaseManager.ExecuteReader(commandText, parameters, ref sqlConnection);&lt;br /&gt;&lt;br /&gt;   bool hasData = sqlDataReader.Read();&lt;br /&gt;&lt;br /&gt;   if (!hasData) return null;&lt;br /&gt;&lt;br /&gt;   ProductCategory __ProductCategory = new ProductCategory();&lt;br /&gt;&lt;br /&gt;   __ProductCategory.ID = (Guid)sqlDataReader["ID"];&lt;br /&gt;   __ProductCategory.Name = (string)sqlDataReader["Name"];&lt;br /&gt;&lt;br /&gt;   sqlDataReader.Close();&lt;br /&gt;   sqlConnection.Close();&lt;br /&gt;&lt;br /&gt;   return __ProductCategory;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static string GetLookupText(object propertyValue)&lt;br /&gt;  {&lt;br /&gt;   ProductCategory _ProductCategory = new ProductCategory();&lt;br /&gt;   _ProductCategory.ID = (Guid)propertyValue;&lt;br /&gt;&lt;br /&gt;   _ProductCategory = ProductCategory.Select(_ProductCategory);&lt;br /&gt;&lt;br /&gt;   if (_ProductCategory != null) return _ProductCategory.Name;&lt;br /&gt;&lt;br /&gt;   return "";&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;用T4 Text Templates的好處其實在於產生出來的格式雖然是固定的了,還是可以透過一些程式設計的方式進行異動,而且可以根據當時的需求進行修改,完全還是在程式設計的範疇之中.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6288610677269179312?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6288610677269179312/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/visual-studio-2010-t4-text-templates_10.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6288610677269179312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6288610677269179312'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/visual-studio-2010-t4-text-templates_10.html' title='Visual Studio 2010 T4 Text Templates 與 SqlExector 整合'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-RnyeCWsKnFA/Thjsq2jnKII/AAAAAAAAAMg/usYqcoxbaUY/s72-c/Capture0.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-7101920408719197669</id><published>2011-07-04T15:44:00.004+08:00</published><updated>2011-07-04T16:07:44.820+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vsix'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Visual Studio 2010 SqlExector - 快速執行.sql檔案</title><content type='html'>這是一個Visual Studio 2010的自訂Package,主要的目的是希望可以在方案總管直接點選一個.sql的檔案或目錄,來快速執行SQL的語法.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;1. 開啟包含.sql檔案的專案,並在.sql檔案上點選滑鼠右建,可以看到一個自訂的選單"SqlExector".&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-iVyEYp8lDz8/ThFzwQO0hDI/AAAAAAAAAJ4/B4ZXjgmflhs/s1600/Capture1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-iVyEYp8lDz8/ThFzwQO0hDI/AAAAAAAAAJ4/B4ZXjgmflhs/s320/Capture1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625404682390504498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;2. 選擇"Execute Sql Files"後,選擇要執行的.sql項目.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-3bIqwZEoUkg/ThFzwDK3orI/AAAAAAAAAJw/2ugsXyj2iRE/s1600/Capture2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-3bIqwZEoUkg/ThFzwDK3orI/AAAAAAAAAJw/2ugsXyj2iRE/s320/Capture2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625404678884270770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;3. 完成選擇後,選擇要用來執行的ConnectionString,在這裡選擇的Connection的項目是直接由專案中Web.Config檔案中所設定的configuration\connectionStrings項目.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-YOQZvVOdibc/ThFzvwtrSVI/AAAAAAAAAJo/K3aEoSPhpQs/s1600/Capture3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-YOQZvVOdibc/ThFzvwtrSVI/AAAAAAAAAJo/K3aEoSPhpQs/s320/Capture3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625404673929988434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;4. 確定完畢後,就會開始執行選擇的項目,可以在Visual Studio 2010的Output Window中看到執行的結果&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-2N7PbulkeUw/ThFzvoumLxI/AAAAAAAAAJg/GbSopkQoVec/s1600/Capture4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 77px;" src="http://4.bp.blogspot.com/-2N7PbulkeUw/ThFzvoumLxI/AAAAAAAAAJg/GbSopkQoVec/s320/Capture4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625404671786364690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;預設如果你是點選一個目錄執行sql語法,尚未儲存的檔案將會自動存檔,如果僅選擇一個檔案,該檔案尚未存檔,將會跳出訊息框讓使用者確認.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-75AlFCqpb7E/ThFzvjKUdSI/AAAAAAAAAJY/KSdLFwVm0IU/s1600/Capture5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://2.bp.blogspot.com/-75AlFCqpb7E/ThFzvjKUdSI/AAAAAAAAAJY/KSdLFwVm0IU/s320/Capture5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5625404670292030754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;感謝您把這篇文章看完了,也幫我按個讚吧!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-7101920408719197669?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/7101920408719197669/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/visual-studio-2010-sqlexector-sql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7101920408719197669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/7101920408719197669'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/visual-studio-2010-sqlexector-sql.html' title='Visual Studio 2010 SqlExector - 快速執行.sql檔案'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-iVyEYp8lDz8/ThFzwQO0hDI/AAAAAAAAAJ4/B4ZXjgmflhs/s72-c/Capture1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-1242334596131943050</id><published>2011-07-01T09:33:00.008+08:00</published><updated>2011-07-09T21:59:42.105+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T4 Text Templates'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>Visual Studio 2010 T4 Text Templates - 文字範本與程式碼產生</title><content type='html'>T4 Text Templates在Visual Studio 2010中,算是一個滿不錯的功能,可以用範本的方式來快速產生相同格式的程式碼或是檔案內容.這裡我試著讀取資料庫中的Table Schema來產生相對應的Class.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;1. 在專案中新增一個項目,Add New Item -&gt; General 選擇 Text Template&lt;br /&gt;&lt;br/&gt;2. 新增完成後可以看到剛剛新增的項目(.tt)與它底下包含的項目(.txt)&lt;br /&gt;&lt;br/&gt;3. 修改output extension="&lt;b&gt;.txt&lt;/b&gt;",就可以改變產生檔案的附檔名&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-a3BV-Isb2Bo/Tg0riLX_k-I/AAAAAAAAAJQ/Oia-z1XjmPw/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 249px; height: 301px;" src="http://3.bp.blogspot.com/-a3BV-Isb2Bo/Tg0riLX_k-I/AAAAAAAAAJQ/Oia-z1XjmPw/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5624199375824589794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;4. 透過一些自行寫的程式就可以產生一些固定格式的內容如下:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Product.tt&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;&amp;lt;#@ template debug="true" hostspecific="true" language="C#" #&amp;gt;&lt;br /&gt;&amp;lt;#@ output extension=".cs" #&amp;gt;&lt;br /&gt;&amp;lt;#@ assembly name="Likol.VisualStudio" #&amp;gt;&lt;br /&gt;&amp;lt;#@ import namespace="Likol.VisualStudio.Template" #&amp;gt;&lt;br /&gt;&amp;lt;#&lt;br /&gt;&lt;br /&gt;string ConnectionName = "Template"; // ConnectionString Name in Web.Config&lt;br /&gt;string TableName = "Product"; // Table Name&lt;br /&gt;&lt;br /&gt;TableTemplate tableTemplate = new TableTemplate(this.Host, ConnectionName, TableName);&lt;br /&gt;tableTemplate.Fill();&lt;br /&gt;#&amp;gt;&lt;br /&gt;//------------------------------------------------------------------------------&lt;br /&gt;// &amp;lt;auto-generated&amp;gt;&lt;br /&gt;// This code was generated by Likol.VisualStudio.Template Tool.&lt;br /&gt;// Last generater time: &amp;lt;#= DateTime.Now.ToString()#&amp;gt;&lt;br /&gt;// &amp;lt;/auto-generated&amp;gt;&lt;br /&gt;//------------------------------------------------------------------------------&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using Likol.Web.Validation;&lt;br /&gt;&lt;br /&gt;namespace Likol.Web.TestWebSite.Data&lt;br /&gt;{&lt;br /&gt;　public class &amp;lt;#= tableTemplate.TableName #&amp;gt;&lt;br /&gt;　{&lt;br /&gt;&amp;lt;#&lt;br /&gt;foreach(TableColumn tableColumn in tableTemplate.Columns)&lt;br /&gt;{&lt;br /&gt;#&amp;gt;&lt;br /&gt;　　private &amp;lt;#= tableColumn.DataType #&amp;gt; _&amp;lt;#= tableColumn.Name #&amp;gt;;&lt;br /&gt;&amp;lt;#&lt;br /&gt;}&lt;br /&gt;#&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;#&lt;br /&gt;foreach(TableColumn tableColumn in tableTemplate.Columns)&lt;br /&gt;{&lt;br /&gt;#&amp;gt;&lt;br /&gt;&amp;lt;# if (!tableColumn.Nullable){ #&amp;gt;&lt;br /&gt;　　[Required]&lt;br /&gt;&amp;lt;#}#&amp;gt;&lt;br /&gt;&amp;lt;# if (tableColumn.Length != 0){ #&amp;gt;&lt;br /&gt;　　[Length(&amp;lt;#= tableColumn.Length.ToString() #&amp;gt;)]&lt;br /&gt;&amp;lt;#}#&amp;gt;&lt;br /&gt;　　public &amp;lt;#= tableColumn.DataType #&amp;gt; &amp;lt;#= tableColumn.Name #&amp;gt;&lt;br /&gt;　　{&lt;br /&gt;　　　get { return this._&amp;lt;#= tableColumn.Name #&amp;gt;; }&lt;br /&gt;　　　set { this._&amp;lt;#= tableColumn.Name #&amp;gt; = value; }&lt;br /&gt;　　}&lt;br /&gt;&lt;br /&gt;&amp;lt;#&lt;br /&gt;}&lt;br /&gt;#&amp;gt;&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Product.cs - 產生的結果&lt;/b&gt;&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;//------------------------------------------------------------------------------&lt;br /&gt;// &amp;lt;auto-generated&amp;gt;&lt;br /&gt;// This code was generated by Likol.VisualStudio.Template Tool.&lt;br /&gt;// Last generater time: 2011/7/1 上午 09:54:25&lt;br /&gt;// &amp;lt;/auto-generated&amp;gt;&lt;br /&gt;//------------------------------------------------------------------------------&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using Likol.Web.Validation;&lt;br /&gt;&lt;br /&gt;namespace Likol.Web.TestWebSite.Data&lt;br /&gt;{&lt;br /&gt;　public class Product&lt;br /&gt;　{&lt;br /&gt;　　private int _ID;&lt;br /&gt;　　private Guid _CategotyID;&lt;br /&gt;　　private string _Name;&lt;br /&gt;&lt;br /&gt;　　[Required]&lt;br /&gt;　　public int ID&lt;br /&gt;　　{&lt;br /&gt;　　　get { return this._ID; }&lt;br /&gt;　　　set { this._ID = value; }&lt;br /&gt;　　}&lt;br /&gt;&lt;br /&gt;　　[Required]&lt;br /&gt;　　public Guid CategotyID&lt;br /&gt;　　{&lt;br /&gt;　　　get { return this._CategotyID; }&lt;br /&gt;　　　set { this._CategotyID = value; }&lt;br /&gt;　　}&lt;br /&gt;&lt;br /&gt;　　[Required]&lt;br /&gt;　　[Length(50)]&lt;br /&gt;　　public string Name&lt;br /&gt;　　{&lt;br /&gt;　　　get { return this._Name; }&lt;br /&gt;　　　set { this._Name = value; }&lt;br /&gt;　　}&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;TableTemplate是一個用來與SQL Server溝通讀取Table Schema的Class,它會讀取Table中欄位相關的資訊,並做一些轉換.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-1242334596131943050?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/1242334596131943050/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/07/visual-studio-2010-t4-text-templates.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1242334596131943050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/1242334596131943050'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/07/visual-studio-2010-t4-text-templates.html' title='Visual Studio 2010 T4 Text Templates - 文字範本與程式碼產生'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-a3BV-Isb2Bo/Tg0riLX_k-I/AAAAAAAAAJQ/Oia-z1XjmPw/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6843849724870323178</id><published>2011-06-28T09:44:00.010+08:00</published><updated>2011-07-14T21:36:54.181+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='GridView'/><category scheme='http://www.blogger.com/atom/ns#' term='Fixed Header'/><title type='text'>ASP.NET自訂控制項 - 固定欄位標題列 ScrollGridView</title><content type='html'>ASP.NET中GridView是一個非常好用的控制項,但一直以來並無法像Windows Form的控制項一樣可以固定欄位的標題列.其實透過Javascript也是有辦法做到相同的功能,以下是一個展示:&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;1. 自訂一個ScrollGridView的控制項,使用下列的標記&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;Likol:ScrollGridView ID="ScrollGridView1" runat="server" Width="100%"&amp;gt;&lt;br /&gt;　&amp;lt;Columns&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:TextField HeaderText="ProductID" DataField="ProductID" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:TextField HeaderText="Name" DataField="Name" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:TextField HeaderText="ProductNumber" DataField="ProductNumber" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:TextField HeaderText="Color" DataField="Color" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:TextField HeaderText="Size" DataField="Size" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:TextField HeaderText="ListPrice" DataField="ListPrice" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:TextField HeaderText="Weight" DataField="Weight" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:DateTimeField HeaderText="SellStartDate" DataField="SellStartDate" /&amp;gt;&lt;br /&gt;　　&amp;lt;Likol:DateTimeField HeaderText="SellEndDate" DataField="SellEndDate" /&amp;gt;&lt;br /&gt;　　&amp;lt;asp:TemplateField&amp;gt;&lt;br /&gt;　　　&amp;lt;HeaderTemplate&amp;gt;&amp;lt;div&amp;gt;&amp;nbsp;&amp;lt;/div&amp;gt;&amp;lt;/HeaderTemplate&amp;gt;&lt;br /&gt;　　　&amp;lt;ItemTemplate&amp;gt;&amp;lt;div&amp;gt;&amp;nbsp;&amp;lt;/div&amp;gt;&amp;lt;/ItemTemplate&amp;gt;&lt;br /&gt;　　&amp;lt;/asp:TemplateField&amp;gt;&lt;br /&gt;　&amp;lt;/Columns&amp;gt;&lt;br /&gt;　&amp;lt;HeaderStyle CssClass="ScrollGridViewHeader" /&amp;gt;&lt;br /&gt;　&amp;lt;RowStyle CssClass="ScrollGridViewItem" /&amp;gt;&lt;br /&gt;&amp;lt;/Likol:ScrollGridView&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br/&gt;2. 連結資料來源&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;3. 顯示結果&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-QwFSqsPjW-0/Tgk2EavBhVI/AAAAAAAAAIE/tYaUuTHWE_E/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://2.bp.blogspot.com/-QwFSqsPjW-0/Tgk2EavBhVI/AAAAAAAAAIE/tYaUuTHWE_E/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5623085059272705362" /&gt;&lt;/a&gt;&lt;br /&gt;當顯示範圍超過目前視窗大小會自動顯示出水平與垂直的卷軸&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-OGYFpV8JzDU/Tgk2EN8W3DI/AAAAAAAAAH8/gsYudLXMVHo/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://2.bp.blogspot.com/-OGYFpV8JzDU/Tgk2EN8W3DI/AAAAAAAAAH8/gsYudLXMVHo/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5623085055838968882" /&gt;&lt;/a&gt;&lt;br /&gt;當拉動垂直的卷軸時,GridView的標題列一樣會固定於最上方&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-GI0i8XCt4tQ/Tgk2EM46RyI/AAAAAAAAAH0/y5WTNf7doh0/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://2.bp.blogspot.com/-GI0i8XCt4tQ/Tgk2EM46RyI/AAAAAAAAAH0/y5WTNf7doh0/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5623085055556077346" /&gt;&lt;/a&gt;&lt;br /&gt;當拉動水平的卷軸時,GridView的標題列會跟著內容一起移動&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;4. 這個控制項的行為一樣可以相容於Google Chrome與Mozilla Firefox&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-JDqwEJxE4VM/Tgk2Do-hw-I/AAAAAAAAAHk/C8SeAF91MMc/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://3.bp.blogspot.com/-JDqwEJxE4VM/Tgk2Do-hw-I/AAAAAAAAAHk/C8SeAF91MMc/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5623085045915960290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-jfEi6CQFb50/Tgk2D2suoaI/AAAAAAAAAHs/NZXnMm48sd0/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://1.bp.blogspot.com/-jfEi6CQFb50/Tgk2D2suoaI/AAAAAAAAAHs/NZXnMm48sd0/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5623085049599402402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;基本上這個控制項是繼承ASP.NET原本的GridView來進行開發,並加入Ajax一些應用來達到這樣的功能.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Updated:  &lt;a href="http://twlikol.blogspot.com/2011/07/demo-aspnet-scrollgridview.html"&gt;Demo - ASP.NET自訂控制項 - 固定欄位標題列 ScrollGridView&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6843849724870323178?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6843849724870323178/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/06/aspnet-scrollgridview.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6843849724870323178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6843849724870323178'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/06/aspnet-scrollgridview.html' title='ASP.NET自訂控制項 - 固定欄位標題列 ScrollGridView'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-QwFSqsPjW-0/Tgk2EavBhVI/AAAAAAAAAIE/tYaUuTHWE_E/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-3138055242017766975</id><published>2011-06-22T10:27:00.003+08:00</published><updated>2011-06-22T10:43:59.902+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Custom Field'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Visual Studio 2010與SharePoint 2010 - Send Code To SharePoint</title><content type='html'>在前幾篇中介紹了&lt;a target="_blank" href="http://twlikol.blogspot.com/2011/06/visual-studio-2010-menu.html"&gt;Visual Studio的選單功能延伸&lt;/a&gt;與&lt;a  target="_blank" href="http://twlikol.blogspot.com/2011/06/sharepoint-2010-custom-field.html"&gt;SharePoint 2010自訂欄位&lt;/a&gt;,以下將會展示如何把這兩個功能整合起來:&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;1. 開啟一個新的專案,並編輯任一的程式碼檔案,選擇要傳到SharePoint的程式碼&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;2. 點選滑鼠右鍵,並選擇"SharePoint-&gt;Send Code To SharePoint"&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-tK3V-VWqQow/TgFWWIabzqI/AAAAAAAAAG8/MVZI-3m9a_E/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://3.bp.blogspot.com/-tK3V-VWqQow/TgFWWIabzqI/AAAAAAAAAG8/MVZI-3m9a_E/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620868748150558370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;3. 上傳視窗中的參數分別代表 SharePoint中的SiteUrl,WebID,ListID與傳送到SharePoint上的標題與內容&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-4qA90R3_Y4k/TgFWWmG3x2I/AAAAAAAAAHE/3AKa_B-BQO0/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 226px;" src="http://1.bp.blogspot.com/-4qA90R3_Y4k/TgFWWmG3x2I/AAAAAAAAAHE/3AKa_B-BQO0/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620868756121569122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;4. 傳送完成&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-N0G1abr4k_I/TgFWX2JuERI/AAAAAAAAAHM/vpgbZKenHOg/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 233px;" src="http://1.bp.blogspot.com/-N0G1abr4k_I/TgFWX2JuERI/AAAAAAAAAHM/vpgbZKenHOg/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620868777608352018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;5. 開啟上傳的SharePoint網頁,就可以看到經由Visual Studio所建立的項目&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-IjNvSo2VO2A/TgFWYK_W9pI/AAAAAAAAAHU/J3MRo7JjBVo/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 122px;" src="http://2.bp.blogspot.com/-IjNvSo2VO2A/TgFWYK_W9pI/AAAAAAAAAHU/J3MRo7JjBVo/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620868783202039442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;6. 選擇項目標題瀏覽,可以看到在檢視模式中的程式碼&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-w2BlSSPf8s4/TgFWY00N5lI/AAAAAAAAAHc/D2EDNUOcsTs/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 286px;" src="http://4.bp.blogspot.com/-w2BlSSPf8s4/TgFWY00N5lI/AAAAAAAAAHc/D2EDNUOcsTs/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620868794429597266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;P.S. 在這裡與SharePoint整合的方式是透過"SharePoint 2010 Managed Client Object Model"來存取相關的資訊&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-3138055242017766975?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/3138055242017766975/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/06/visual-studio-2010sharepoint-2010-send.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3138055242017766975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3138055242017766975'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/06/visual-studio-2010sharepoint-2010-send.html' title='Visual Studio 2010與SharePoint 2010 - Send Code To SharePoint'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-tK3V-VWqQow/TgFWWIabzqI/AAAAAAAAAG8/MVZI-3m9a_E/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-76950120199946757</id><published>2011-06-21T22:39:00.005+08:00</published><updated>2011-06-21T22:52:32.883+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Custom Field'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 自訂欄位 - Custom Field with SyntaxHighlighter</title><content type='html'>SharePoint 2010的Custom Field對於擴充性是非常有幫助的,可以藉由自訂欄位提供一些比較實用的功能.&lt;br /&gt;&lt;br /&gt;以下的部份是自訂是一個欄位,並結合SyntaxHighlighter來顯示程式碼的範例&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;1. 於網站中新增一個自訂清單(Custom List).&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;2. 新增完成後,進到清單設定畫面建立一個新的欄位,選擇SourceCodeField與設定欄位要顯示的Source Code是C#或XML&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-AZUVtwelXxI/TgCu6jXAVRI/AAAAAAAAAGc/WaVu7AyoQaQ/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 195px;" src="http://1.bp.blogspot.com/-AZUVtwelXxI/TgCu6jXAVRI/AAAAAAAAAGc/WaVu7AyoQaQ/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620684655905756434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;3. 設定完成後新增一筆資料到清單中,可以在清單顯示頁面上看到附圖&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-OOi7httMhIs/TgCu7Cyn9-I/AAAAAAAAAGk/WLl2NAdLZKU/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 110px;" src="http://2.bp.blogspot.com/-OOi7httMhIs/TgCu7Cyn9-I/AAAAAAAAAGk/WLl2NAdLZKU/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620684664343099362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;4. 選擇View Code的按鈕,會開啟一個新視窗,並顯示內容&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-36cV4uPXRnw/TgCu7obOm1I/AAAAAAAAAGs/Hd-D7_d3R_o/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 199px;" src="http://3.bp.blogspot.com/-36cV4uPXRnw/TgCu7obOm1I/AAAAAAAAAGs/Hd-D7_d3R_o/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620684674445515602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;5. 選擇項目名稱進到檢視畫面&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-FU_UkeNfNFA/TgCu7092ouI/AAAAAAAAAG0/AOv0QC07QGo/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 196px;" src="http://4.bp.blogspot.com/-FU_UkeNfNFA/TgCu7092ouI/AAAAAAAAAG0/AOv0QC07QGo/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5620684677811970786" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-76950120199946757?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/76950120199946757/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/06/sharepoint-2010-custom-field.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/76950120199946757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/76950120199946757'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/06/sharepoint-2010-custom-field.html' title='SharePoint 2010 自訂欄位 - Custom Field with SyntaxHighlighter'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-AZUVtwelXxI/TgCu6jXAVRI/AAAAAAAAAGc/WaVu7AyoQaQ/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6955890002987171956</id><published>2011-06-16T07:01:00.012+08:00</published><updated>2011-07-09T21:53:29.234+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><title type='text'>自訂Visual Studio專案建置項目 - Target</title><content type='html'>在Visual Stduio中專案進行建置時會透過MSBuild進行編譯,它的定義檔會是以XML方式呈現,試著打開由Visual Studio所建立的專案檔(*.csproj)可以看到類似以下的內容:&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;br /&gt;&amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;  &amp;lt;Configuration Condition=" '$(Configuration)' == '' "&amp;gt;Debug&amp;lt;/Configuration&amp;gt;&lt;br /&gt;  &amp;lt;Platform Condition=" '$(Platform)' == '' "&amp;gt;AnyCPU&amp;lt;/Platform&amp;gt;&lt;br /&gt;  &amp;lt;ProductVersion&amp;gt;8.0.30703&amp;lt;/ProductVersion&amp;gt;&lt;br /&gt;  &amp;lt;SchemaVersion&amp;gt;2.0&amp;lt;/SchemaVersion&amp;gt;&lt;br /&gt;  &amp;lt;ProjectGuid&amp;gt;{B6B8C599-6FA9-4E30-8985-5D50B048FB6B}&amp;lt;/ProjectGuid&amp;gt;&lt;br /&gt;  &amp;lt;OutputType&amp;gt;Library&amp;lt;/OutputType&amp;gt;&lt;br /&gt;  &amp;lt;AppDesignerFolder&amp;gt;Properties&amp;lt;/AppDesignerFolder&amp;gt;&lt;br /&gt;  &amp;lt;RootNamespace&amp;gt;MyBuild&amp;lt;/RootNamespace&amp;gt;&lt;br /&gt;  &amp;lt;AssemblyName&amp;gt;MyBuild&amp;lt;/AssemblyName&amp;gt;&lt;br /&gt;  &amp;lt;TargetFrameworkVersion&amp;gt;v4.0&amp;lt;/TargetFrameworkVersion&amp;gt;&lt;br /&gt;  &amp;lt;FileAlignment&amp;gt;512&amp;lt;/FileAlignment&amp;gt;&lt;br /&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;&amp;lt;PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "&amp;gt;&lt;br /&gt;  &amp;lt;DebugSymbols&amp;gt;true&amp;lt;/DebugSymbols&amp;gt;&lt;br /&gt;  &amp;lt;DebugType&amp;gt;full&amp;lt;/DebugType&amp;gt;&lt;br /&gt;  &amp;lt;Optimize&amp;gt;false&amp;lt;/Optimize&amp;gt;&lt;br /&gt;  &amp;lt;OutputPath&amp;gt;bin\Debug\&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;  &amp;lt;DefineConstants&amp;gt;DEBUG;TRACE&amp;lt;/DefineConstants&amp;gt;&lt;br /&gt;  &amp;lt;ErrorReport&amp;gt;prompt&amp;lt;/ErrorReport&amp;gt;&lt;br /&gt;  &amp;lt;WarningLevel&amp;gt;4&amp;lt;/WarningLevel&amp;gt;&lt;br /&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;&amp;lt;PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "&amp;gt;&lt;br /&gt;  &amp;lt;DebugType&amp;gt;pdbonly&amp;lt;/DebugType&amp;gt;&lt;br /&gt;  &amp;lt;Optimize&amp;gt;true&amp;lt;/Optimize&amp;gt;&lt;br /&gt;  &amp;lt;OutputPath&amp;gt;bin\Release\&amp;lt;/OutputPath&amp;gt;&lt;br /&gt;  &amp;lt;DefineConstants&amp;gt;TRACE&amp;lt;/DefineConstants&amp;gt;&lt;br /&gt;  &amp;lt;ErrorReport&amp;gt;prompt&amp;lt;/ErrorReport&amp;gt;&lt;br /&gt;  &amp;lt;WarningLevel&amp;gt;4&amp;lt;/WarningLevel&amp;gt;&lt;br /&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;&amp;lt;ItemGroup&amp;gt;&lt;br /&gt;  &amp;lt;Reference Include="System" /&amp;gt;&lt;br /&gt;  &amp;lt;Reference Include="System.Core" /&amp;gt;&lt;br /&gt;  &amp;lt;Reference Include="System.Xml.Linq" /&amp;gt;&lt;br /&gt;  &amp;lt;Reference Include="System.Data.DataSetExtensions" /&amp;gt;&lt;br /&gt;  &amp;lt;Reference Include="Microsoft.CSharp" /&amp;gt;&lt;br /&gt;  &amp;lt;Reference Include="System.Data" /&amp;gt;&lt;br /&gt;  &amp;lt;Reference Include="System.Xml" /&amp;gt;&lt;br /&gt;&amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;&amp;lt;ItemGroup&amp;gt;&lt;br /&gt;  &amp;lt;Compile Include="Class1.cs" /&amp;gt;&lt;br /&gt;  &amp;lt;Compile Include="Properties\AssemblyInfo.cs" /&amp;gt;&lt;br /&gt;&amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;&amp;lt;Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /&amp;gt;&lt;br /&gt;&amp;lt;!-- To modify your build process, add your task inside one of the targets below and uncomment it.&lt;br /&gt;     Other similar extension points exist, see Microsoft.Common.targets.&lt;br /&gt;&amp;lt;Target Name="BeforeBuild"&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;Target Name="AfterBuild"&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;在最後可以看到Visual Studio本身就提供了兩個Target(BeforeBuild,AfterBuild)給使用者進行自定,但是如果不用這兩個該如何處理?&lt;br /&gt;&lt;br /&gt;1. 複寫BuildDependsOn屬性(位於C:\Windows\Microsoft.NET\Framework\'vVersion'\Microsoft.Common.targets)&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;&amp;lt;BuildDependsOn&amp;gt;&lt;br /&gt;  MyCustomTarget1;&lt;br /&gt;  $(BuildDependsOn);&lt;br /&gt;  MyCustomTarget2&lt;br /&gt;&amp;lt;/BuildDependsOn&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;2. 新增上述加入的新Target&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;Target Name="MyCustomTarget1"&amp;gt;&lt;br /&gt;&amp;lt;Message Importance="High" Text="Running MyCustomTarget1..."/&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;Target Name="MyCustomTarget2"&amp;gt;&lt;br /&gt;&amp;lt;Message Importance="High" Text="Running MyCustomTarget2..."/&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;完成後,就可以在Visual Stduio進行編譯,並可以在Output的視窗看到以下結果:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-acBbNHIX7k4/Tfk_K7yhkpI/AAAAAAAAAGU/stoO7wNv3HM/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 65px;" src="http://4.bp.blogspot.com/-acBbNHIX7k4/Tfk_K7yhkpI/AAAAAAAAAGU/stoO7wNv3HM/s320/Capture1.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5618591467202253458" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6955890002987171956?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6955890002987171956/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/06/visual-studio-target.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6955890002987171956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6955890002987171956'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/06/visual-studio-target.html' title='自訂Visual Studio專案建置項目 - Target'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-acBbNHIX7k4/Tfk_K7yhkpI/AAAAAAAAAGU/stoO7wNv3HM/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-959364385237592532</id><published>2011-06-16T06:19:00.006+08:00</published><updated>2011-07-09T22:03:49.171+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><title type='text'>如何延伸Visual Studio 2010功能 - Menu</title><content type='html'>Visual Studio 2010是一個非常好的程式開發工具,不過它也具備了很不錯的延展性,你可以透過一些Add-In的方式,或Integration Package來將自己需要用的功能加到Visual Studio中.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;先介紹一下如何在Menu上加上自己的項目.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;1. 開啟Visual Studio選擇新增一個專案,並選擇Extensibility-&gt;Visual Studio Package,命名為"MyVSPackage"&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-v51c1DyT-nA/Tfk3NOGkMeI/AAAAAAAAAF0/ckKwpc9iHwk/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://4.bp.blogspot.com/-v51c1DyT-nA/Tfk3NOGkMeI/AAAAAAAAAF0/ckKwpc9iHwk/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5618582710384865762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;2. 接下來會出先專案的精靈畫面,基本上都先以預設值方式進行,除了選擇VSPackage Options,你必須勾選Menu Command.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-kgaKZE7zlAc/Tfk3NWdQ3lI/AAAAAAAAAF8/DwedrAWdeh0/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="http://1.bp.blogspot.com/-kgaKZE7zlAc/Tfk3NWdQ3lI/AAAAAAAAAF8/DwedrAWdeh0/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5618582712627551826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;3.專案建立完成後,可以直接使用F5建置,並看到在Tools選單中多了一個My Command name的選項.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-FLfN_L16Gy8/Tfk3NlK0i_I/AAAAAAAAAGE/yVirmD4LRxM/s1600/Capture3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 174px;" src="http://2.bp.blogspot.com/-FLfN_L16Gy8/Tfk3NlK0i_I/AAAAAAAAAGE/yVirmD4LRxM/s320/Capture3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5618582716576730098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;當然如果想要直接到主選單上也是可以做到,你可以參考以下的步驟:&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;1. 開啟專案中的MyVSPackage.vsct檔案.&lt;br /&gt;&lt;br/&gt;2. 找到&amp;lt;GuidSymbol name="guidMyVSPackageCmdSet"...&amp;gt;區段,加上以下的XML元素:&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;IDSymbol name="MyMenu" value="0x3000"/&amp;gt;&lt;br /&gt;&amp;lt;IDSymbol name="MyMenuGroup2" value="0x3001"/&amp;gt;&lt;br /&gt;&amp;lt;IDSymbol name="MyMenuCommand" value="0x3002" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;3. 找到&amp;lt;Groups&amp;gt;區段,加上以下的XML元素:&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;Group id="MyMenuGroup2" guid="guidMyVSPackageCmdSet" priority="0x0000"&amp;gt;&lt;br /&gt;  &amp;lt;Parent id="MyMenu" guid="guidMyVSPackageCmdSet"/&amp;gt;&lt;br /&gt;&amp;lt;/Group&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;4. 在&amp;lt;Commands package="guidMyVSPackagePkg"&amp;gt;區段中,多加一個&amp;lt;Menus&amp;gt;的新區段,並加入以下內容:&lt;br /&gt;&lt;div style="font-size:9pt;"&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;Menu id="MyMenu" guid="guidMyVSPackageCmdSet"&lt;br /&gt;  priority="0x0200" type="Menu"&amp;gt;&lt;br /&gt;  &amp;lt;Parent guid="guidSHLMainMenu" id="IDG_VS_MM_TOOLSADDINS" /&amp;gt;&lt;br /&gt;  &amp;lt;Strings&amp;gt;&lt;br /&gt;    &amp;lt;ButtonText&amp;gt;MyMenu&amp;lt;/ButtonText&amp;gt;&lt;br /&gt;    &amp;lt;CommandName&amp;gt;My Menu&amp;lt;/CommandName&amp;gt;&lt;br /&gt;  &amp;lt;/Strings&amp;gt;&lt;br /&gt;&amp;lt;/Menu&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;5. 重新使用F5編譯專案,就可以在主選單上看到定義的Menu.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-EQr93lIEDVE/Tfk3N4ExV9I/AAAAAAAAAGM/rAXYTFJxmkQ/s1600/Capture4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 219px; height: 87px;" src="http://4.bp.blogspot.com/-EQr93lIEDVE/Tfk3N4ExV9I/AAAAAAAAAGM/rAXYTFJxmkQ/s320/Capture4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5618582721651627986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-959364385237592532?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/959364385237592532/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/06/visual-studio-2010-menu.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/959364385237592532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/959364385237592532'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/06/visual-studio-2010-menu.html' title='如何延伸Visual Studio 2010功能 - Menu'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-v51c1DyT-nA/Tfk3NOGkMeI/AAAAAAAAAF0/ckKwpc9iHwk/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6163914464930710852</id><published>2011-04-13T00:14:00.005+08:00</published><updated>2011-04-13T00:28:50.174+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>案例三:Active Directory帳號建立Web系統</title><content type='html'>在一般有使用Active Directory管理權限的公司中,建立一個新的使用者帳號往往需要經過很多相關的程序,包含人員屬性設定、授予權限或者由HR系統匯入,都是一個滿煩瑣的步驟.&lt;br /&gt;&lt;br /&gt;透過一個Web化的介面就能將此作業自動化,並加入Workflow的一些應用就可以有效的進行這些步驟的整合與異動上的處理.以下是一個簡單的概念圖:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-YTco1QaKJFI/TaR9ZZCR3iI/AAAAAAAAAFo/amRizcTvPfQ/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 237px;" src="http://1.bp.blogspot.com/-YTco1QaKJFI/TaR9ZZCR3iI/AAAAAAAAAFo/amRizcTvPfQ/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5594734512271646242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在這個案例中採用的是Windows Workflow Foundation 4.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6163914464930710852?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6163914464930710852/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/04/active-directoryweb.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6163914464930710852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6163914464930710852'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/04/active-directoryweb.html' title='案例三:Active Directory帳號建立Web系統'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-YTco1QaKJFI/TaR9ZZCR3iI/AAAAAAAAAFo/amRizcTvPfQ/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-8652177211833690731</id><published>2011-04-11T03:11:00.004+08:00</published><updated>2011-04-11T03:23:51.624+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>案例二:WCF Proxy系統</title><content type='html'>這是一個WCF的相關應用案例,系統概念如下圖:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-q3NhgeuvDHI/TaIBEF-Lj7I/AAAAAAAAAFg/hFdTyUZRy_M/s1600/Capture5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 189px;" src="http://4.bp.blogspot.com/-q3NhgeuvDHI/TaIBEF-Lj7I/AAAAAAAAAFg/hFdTyUZRy_M/s320/Capture5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5594034856981663666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;簡單來說,主要是提供一個WCF的Proxy機制,讓所有的WCF Server登錄在這個系統上,使用者如果需要呼叫服務就直接與這個系統溝通,不需要知道實際的服務位址.管理人員可透過系統提供的介面進行服務註冊.&lt;br /&gt;&lt;br/&gt;系統所提供的功能大概如下:&lt;br /&gt;&lt;br/&gt;1. WCF服務註冊與版本管理&lt;br /&gt;&lt;br/&gt;2. 服務Schema發佈功能&lt;br /&gt;&lt;br/&gt;3. 即時的服務狀態監控&lt;br /&gt;&lt;br/&gt;4. 服務的Policy與Endpoint管理&lt;br /&gt;&lt;br/&gt;5. 存取記錄與報表&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-8652177211833690731?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/8652177211833690731/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/04/wcf-proxy.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8652177211833690731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8652177211833690731'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/04/wcf-proxy.html' title='案例二:WCF Proxy系統'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-q3NhgeuvDHI/TaIBEF-Lj7I/AAAAAAAAAFg/hFdTyUZRy_M/s72-c/Capture5.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-8850249270155983265</id><published>2011-04-10T16:11:00.005+08:00</published><updated>2011-04-10T16:28:27.560+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>案例一:寄賣管理系統 - UI開發</title><content type='html'>這篇主要介紹一下在開發時如何實做UI,請先參考一下以下第一張圖片&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-5XTmSP6LBWU/TaFmZJYK9PI/AAAAAAAAAFE/nQb4snzD5Pw/s1600/Capture1.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 225px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5593864794370929906" border="0" alt="" src="http://2.bp.blogspot.com/-5XTmSP6LBWU/TaFmZJYK9PI/AAAAAAAAAFE/nQb4snzD5Pw/s320/Capture1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;每一個紅色框起來的部份,都是一個自行開發的WebControl,透過組合這些控制項可以很快的完成一個清單的頁面.&lt;br /&gt;&lt;br/&gt;1. 上方Toolbar的功能選項,組合一個DropDownButton與ContextMenu就可以做到,選了按鈕就跳出一個浮動的Panel.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-O80Joprxknk/TaFmYk597AI/AAAAAAAAAE8/riybVjJZ7_w/s1600/Capture2.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 83px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5593864784580570114" border="0" alt="" src="http://3.bp.blogspot.com/-O80Joprxknk/TaFmYk597AI/AAAAAAAAAE8/riybVjJZ7_w/s320/Capture2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;2. 一般來說如果想要顯示查詢的條件,需要自行透過程式取得每一個控制項的值進行顯示,在這個控制項我採用與DataSource控制項同樣的方式,透過設定ControlID與PropertyName,來自動取得要顯示的條件,這樣可以在開發過程中只要透過設定就可以很簡單的使用.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-T0AfeBNyYjM/TaFmYmR1-1I/AAAAAAAAAE0/B03SpyTstYs/s1600/Capture3.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 87px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5593864784949148498" border="0" alt="" src="http://3.bp.blogspot.com/-T0AfeBNyYjM/TaFmYmR1-1I/AAAAAAAAAE0/B03SpyTstYs/s320/Capture3.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;3. 資料分頁也是透過一個控制項與GridView關聯就可以處理分頁的行為&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-0H7kt5lx1gk/TaFmYe-wnGI/AAAAAAAAAEs/_IHXOGPwUc4/s1600/Capture4.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 21px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5593864782990056546" border="0" alt="" src="http://1.bp.blogspot.com/-0H7kt5lx1gk/TaFmYe-wnGI/AAAAAAAAAEs/_IHXOGPwUc4/s320/Capture4.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;開發控制項本身就有點難度,但其實如果要讓開發過程更順利,更要注意的地方是Design-Time(設計階段)的支援,因此在設計控制項時,一定要考量到控制項的寫法是否符合設計階段的一些規則.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-8850249270155983265?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/8850249270155983265/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/04/ui.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8850249270155983265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/8850249270155983265'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/04/ui.html' title='案例一:寄賣管理系統 - UI開發'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-5XTmSP6LBWU/TaFmZJYK9PI/AAAAAAAAAFE/nQb4snzD5Pw/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-3812820150928872184</id><published>2011-04-10T15:18:00.004+08:00</published><updated>2011-04-10T15:47:30.632+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>案例一:寄賣管理系統 - 權限管理</title><content type='html'>先來介紹一下權限的設計,一般來說權限的設計都是透過一個ㄧ個頁面來進行控管,因此在這裡我透過了ASP.NET內建的SiteMap功能來處理.&lt;br /&gt;&lt;br/&gt;內建的SiteMap功能,大部分的人都是透過Web.sitemap來定義網頁的結點,我重新繼承了原本的System.Web.StaticSiteMapProvider來進行權限的處理.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-yPDaut_AB-U/TaFaFLgPllI/AAAAAAAAAEM/FA5TWjLAyaw/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="http://3.bp.blogspot.com/-yPDaut_AB-U/TaFaFLgPllI/AAAAAAAAAEM/FA5TWjLAyaw/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593851257204741714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;1. 在資料庫中設計一個儲存所有需要控管頁面的設定資料&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-q-WZpwAjRF8/TaFaFEzr83I/AAAAAAAAAEE/G_9wB86cMdg/s1600/Capture1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://3.bp.blogspot.com/-q-WZpwAjRF8/TaFaFEzr83I/AAAAAAAAAEE/G_9wB86cMdg/s320/Capture1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593851255407244146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;2. 設定可以使用功能的群組設定&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-lzgHyV9PGT0/TaFaFSXxXyI/AAAAAAAAAEU/j03rP4KASHE/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://2.bp.blogspot.com/-lzgHyV9PGT0/TaFaFSXxXyI/AAAAAAAAAEU/j03rP4KASHE/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593851259048255266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;3. 在Web.Config中定義自訂的SiteMapProvider&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-0QX7Rq7z73A/TaFeheDM0fI/AAAAAAAAAEc/4tl2ixwTWyY/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://1.bp.blogspot.com/-0QX7Rq7z73A/TaFeheDM0fI/AAAAAAAAAEc/4tl2ixwTWyY/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593856141266047474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;4. 接下來只要在每一個Page上加入一個SiteMapPath的WebControl,就可以做到權限的驗證,在這個我是把這個控制項放到Master中,這樣就不用每個Page都要重新放一次.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-sxhddQ0MSyM/TaFehTYYXqI/AAAAAAAAAEk/zaE8i6KgfRI/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 114px;" src="http://1.bp.blogspot.com/-sxhddQ0MSyM/TaFehTYYXqI/AAAAAAAAAEk/zaE8i6KgfRI/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593856138402094754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;接著下來,我會介紹一些UI的處理與WebControls的使用.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-3812820150928872184?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/3812820150928872184/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/04/blog-post_9219.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3812820150928872184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/3812820150928872184'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/04/blog-post_9219.html' title='案例一:寄賣管理系統 - 權限管理'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-yPDaut_AB-U/TaFaFLgPllI/AAAAAAAAAEM/FA5TWjLAyaw/s72-c/Capture2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-6088127551645952402</id><published>2011-04-10T01:19:00.010+08:00</published><updated>2011-04-10T01:40:33.297+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>案例一:寄賣管理系統</title><content type='html'>這是一個幫家人做的系統,主要用於紀錄將手工做的東西"寄賣"到各個出租格子的商店,並可以知道目前在各家店家的物品有哪些.&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;1.系統首頁,左邊為功能列,右邊則為功能的內容顯示頁面&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-_fkWYI3WevQ/TaCWCor68TI/AAAAAAAAACs/Wfd6caMJR4I/s1600/Capture1.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 231px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5593635709219696946" border="0" alt="" src="http://3.bp.blogspot.com/-_fkWYI3WevQ/TaCWCor68TI/AAAAAAAAACs/Wfd6caMJR4I/s320/Capture1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;2. 資料清單的範例,比較特別的是Grid的標題列是鎖定的,不會因為Scroll Bar的下拉而看不見.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/--ZH4cRQeG3c/TaCXG35IrOI/AAAAAAAAAC0/iVAVbv3biiI/s1600/Capture2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://2.bp.blogspot.com/--ZH4cRQeG3c/TaCXG35IrOI/AAAAAAAAAC0/iVAVbv3biiI/s320/Capture2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593636881532759266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;3. 功能列的行為模式,點了後會才會跳出可選擇的選項,可有效的減少占用的空間&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-iiTqzBZOIbM/TaCXkXk7yFI/AAAAAAAAAC8/XeVn-b5fFkM/s1600/Capture3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://3.bp.blogspot.com/-iiTqzBZOIbM/TaCXkXk7yFI/AAAAAAAAAC8/XeVn-b5fFkM/s320/Capture3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593637388254169170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;4. 搜尋功能,當對於資料有輸入搜尋條件,會多出一個搜尋條建列,可直接點選進行條件的移除&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-INWttCjc_SQ/TaCYI-B-OjI/AAAAAAAAADE/GhDUeu2NZGI/s1600/Capture4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://4.bp.blogspot.com/-INWttCjc_SQ/TaCYI-B-OjI/AAAAAAAAADE/GhDUeu2NZGI/s320/Capture4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593638017051802162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-8mfrm9j4kyI/TaCYO4Y1p9I/AAAAAAAAADM/2b1XN7jiUJE/s1600/Capture5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://3.bp.blogspot.com/-8mfrm9j4kyI/TaCYO4Y1p9I/AAAAAAAAADM/2b1XN7jiUJE/s320/Capture5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593638118616311762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;5. 單筆資料的維護&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-Jls26wWibgY/TaCYucCyxBI/AAAAAAAAADc/dlzRU87_yC0/s1600/Capture7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://2.bp.blogspot.com/-Jls26wWibgY/TaCYucCyxBI/AAAAAAAAADc/dlzRU87_yC0/s320/Capture7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593638660763468818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-l5PZdZdivQU/TaCYuLDJpRI/AAAAAAAAADU/lq27nIIJrmY/s1600/Capture6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://4.bp.blogspot.com/-l5PZdZdivQU/TaCYuLDJpRI/AAAAAAAAADU/lq27nIIJrmY/s320/Capture6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593638656201565458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;6. Master-Detail資料的維護&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-JbCP2_Ye7n4/TaCZHrrPkDI/AAAAAAAAADk/Tnaw3fNi0tY/s1600/Capture8.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://4.bp.blogspot.com/-JbCP2_Ye7n4/TaCZHrrPkDI/AAAAAAAAADk/Tnaw3fNi0tY/s320/Capture8.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593639094456389682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-4WLx6hPFOnw/TaCZHxnSEwI/AAAAAAAAADs/Izf2ejkK6q8/s1600/Capture9.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 213px;" src="http://4.bp.blogspot.com/-4WLx6hPFOnw/TaCZHxnSEwI/AAAAAAAAADs/Izf2ejkK6q8/s320/Capture9.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593639096050389762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;7. 當編輯資料時,需要選擇其他資料當作參考來源,都會以Popou方式來處理,並有一些條件過濾來加速資料的選取&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/--ZVXifwRAhc/TaCZIi0-8bI/AAAAAAAAAD8/Igijw5BiHTY/s1600/Capture11.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 280px;" src="http://3.bp.blogspot.com/--ZVXifwRAhc/TaCZIi0-8bI/AAAAAAAAAD8/Igijw5BiHTY/s320/Capture11.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593639109261193650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-JbGpuN8cT9I/TaCZIanlCyI/AAAAAAAAAD0/IQIzVwxVHAA/s1600/Capture10.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 280px;" src="http://1.bp.blogspot.com/-JbGpuN8cT9I/TaCZIanlCyI/AAAAAAAAAD0/IQIzVwxVHAA/s320/Capture10.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5593639107057486626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;以上為功能的一些展示與UI介紹,我會在接下來的部份,說明一下技術上的用法.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-6088127551645952402?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/6088127551645952402/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/04/blog-post_10.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6088127551645952402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/6088127551645952402'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/04/blog-post_10.html' title='案例一:寄賣管理系統'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-_fkWYI3WevQ/TaCWCor68TI/AAAAAAAAACs/Wfd6caMJR4I/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7321224742622887262.post-2425040846200143869</id><published>2011-04-09T01:51:00.000+08:00</published><updated>2011-04-09T02:15:19.161+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>尋找任何可以合作的機會!?</title><content type='html'>我正在尋找可能的合作機會,我想透過這個Blog介紹自己,讓任何有興趣的人知道我做過什麼或是會什麼? &lt;br/&gt;&lt;br/&gt;1. 我是個.Net Programmer. &lt;br/&gt;2. 開發資歷 10年, 工作經驗 4-5年 &lt;br/&gt;3. 我最擅長的是Web的開發應用(ASP.NET) &lt;br/&gt;4. 使用ASP.NET開發Web時,我會開發Custom WebControls來縮短開發時間 &lt;br/&gt;5. 我對於SQL Server有一定的了解程度 &lt;br/&gt;6. 我對於系統(Infrastructure)也有相關的開發經驗(AD, Exchange) &lt;br/&gt;7. 待續 &lt;br/&gt;&lt;br/&gt;接下來我會更清楚的說明我做過什麼!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7321224742622887262-2425040846200143869?l=twlikol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://twlikol.blogspot.com/feeds/2425040846200143869/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://twlikol.blogspot.com/2011/04/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2425040846200143869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7321224742622887262/posts/default/2425040846200143869'/><link rel='alternate' type='text/html' href='http://twlikol.blogspot.com/2011/04/blog-post.html' title='尋找任何可以合作的機會!?'/><author><name>Likol Lee</name><uri>http://www.blogger.com/profile/05511317678017471787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/-OEz9iZIzHs8/TiuM1tnfjZI/AAAAAAAAANk/p-4lMjmaGIk/s220/Likol4.jpg'/></author><thr:total>0</thr:total></entry></feed>
