時間快跑

2009年最後一天上班好痛苦啊T^T

我要下班下班~阿阿阿阿

下班去買螢光棒

ADO.NET資料服務/Silverlight--建立用戶端應用程式

本文使用前一篇文章建立之 Northwind 資料服務之方案,建立Silverlight應用程式作為新專案。
1.建立Silverlight專案的應用程式
a)在前文的方案中加入新專案,專案類型選擇「Silverlight 應用程式」


b)選取「連結這個 Silverlight 控制項到現有的網站」、「加入參考應用程式的測試頁」、「設為起始頁」



2.在專案中加入服務參考
a)「SilverlightClient」專案按滑鼠右鍵,選擇「加入服務參考」並按一下「探索」,隨即顯示前文建立的 Northwind 資料服務


b)輸入命名空間按下確定

這麼做會在專案中加入新的程式碼檔,包含存取資料服務資源做為物件並與之互動的資料類別。 資料類別建立在用戶端應用程式的預設命名空間中。


3.定義用戶端應用程式使用者介面
a)「SilverlightClient」專案按滑鼠右鍵並選擇「加入參考」,選取 System.Windows.Controls.Data


b)開啟MainPage.xaml並以下列定義應用程式使用者介面的標記取代原本的XAML
程式碼就不貼在這,因為即使用Blogger code block放置,還是限於silverlight無法被blogger看懂還出現奇怪的控制項=..=
程式碼解壓縮後找到SilverlightClient\VisualBasic\SilverlightClient\MainPage.xaml檔案,copy & paste即可!貼完code之後的XAML預覽如下圖





★步驟3b的程式碼在官方網站lost了,請大家去下載才可以把3b完成喔!
參考網址
PS:後來發現3b不是lost,而是網頁本身有問題,網頁載入完成後那段XAML會看不見,如果懶得下載可以直接點選參考網址右上角的「輕量型」即可取得原版XAML!!

ADO.NET資料服務/Silverlight--建立Northwind資料服務

1.建立 ASP.NET Web 應用程式


2.定義資料模型
a)在方案總管按右鍵,新增項目「ADO.NET 實體資料模型」
 

b)選擇「從資料庫產生」


c)除了「資料表」其他都不要勾選



3.建立資料服務
a)在方案總管按右鍵,新增項目「ADO.NET 資料服務」
Visual Studio 將建立新服務的 XML 標記和程式碼檔,根據預設,程式碼編輯器視窗隨即開啟 Northwind 加上副檔名 .svc.cs 或 .svc.vb 的檔案


b)變更Northwind.svc.vb中的資料模型之型別
將「TODO: 以您的資料類別名稱取代 [[class name]]」 這一段註解,替換成你剛剛建立的資料模型型別,也就是 NorthwindEntities
替換完成後會長這樣Inherits DataService(Of NorthwindEntities)

4.啟用資料服務的存取
在InitializeServic函式加入下列4行程式碼,指定可以存取的實體
        config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead)
        config.SetEntitySetAccessRule("Orders", EntitySetRights.All)
        config.SetEntitySetAccessRule("Order_Details", EntitySetRights.All)
        config.SetEntitySetAccessRule("Products", EntitySetRights.All)

ps:若全部開放則為config.SetEntitySetAccessRule("*", EntitySetRights.All)

5.測試
a) 按F5瀏覽器將自動開啟視窗
 http://localhost:2616/northwind.svc
用IE6不能測試,請用IE7以上,用IE7以上及FF的人也請將RSS關閉,才能檢視下圖結果


b) 承上,輸入URI測試資料,傳回特定客戶 ALFKI 的全部訂單
http://localhost:2616/northwind.svc/Customers('ALFKI')/Orders




★我們已經以 Northwind DB建立可存取的資料服務,並於 Web 瀏覽器中完成服務測試。 接下來要建立 Silverlight 用戶端應用程式專案,並在其中加入這個資料服務的參考:請看下一篇

參考網址 

強迫關閉視窗

很多場合需要強迫關閉視窗而不出現詢問視窗(如下圖),我加這個動作是為了防止user直接keyin完整網址去亂玩我的網站,廢話不多說直接說明下面的function如何使用
1.使用checkVersion()判斷IE版本
2.如果是IE6就使用A()把頁面強迫關掉
3.如果是IE7則使用B()把頁面強迫關掉


//IE 6
function A() {
    if (window.opener) {
    } else {
        window.opener = "null";
        window.close();   
    }
}

//IE 7 or 8
function B() {
    if (window.opener) {
    } else {
    window.open('', '_parent', '');
    window.close();
    }
}

function checkVersion() {
    for (i = 0; i < 10; i++) {
        for (z = 0; z < 10; z++) {
            if (navigator.appVersion.match("MSIE " + i + "." + z) != null) {              
                y = i;
            }
        }
    }

    if (y == '7' || y == '8' ) { B(); }
    else { A(); }
}

Smart Defrag

Smart Defrag是個好用的磁碟重組工具,重點是FREE!!!
他不像XP內建的磁碟重組工具需要15%的空間才能重組,重組時電腦也不會lag
現在官方release的最新版本已經有繁體中文嚕,大家可以無痛上手,連Google用法都不必勒。

piggy還發現磁碟重組中的各類小方塊(下圖的目錄、MFT、碎片...等)可自定義顏色~真古錐XD


初學WCF

以HelloWorld為例示範如何快速建立WCF,並以Windows Form呈現結果!

1.新增專案,選擇「Windows Form應用程式 」作為呈現WCF成果的介面
(命名為HelloWorldWinForm)

2.加入新網站,選擇「WCF服務」
(命名為HelloWorldService)

3.服務內容使用預設的HelloWorld範例,暫不更改service中的contract、operation...等

4.對HelloWorldWinForm按右鍵「加入服務參考」
(VSTS將自動為你搜尋可用的服務--*.svc檔)

5.於HelloWorldWinForm加入TextBox、Button各一
(為了測試HelloWorld第1個方法:input數字→output字串)

6.於Button_Click事件觸發第1個方法(GetData),程式碼如下
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myService As New HelloWorldService.ServiceClient
        MessageBox.Show(myService.GetData(TextBox1.Text))
End Sub

7.按下F5,執行 成果如下

消失的Scroll Lock

相信廣大的Logitech用戶都會發現,越新版的鍵盤越見不到冷門鍵,反而還多出一堆花俏的快速鍵,例如快速開啟word、excel等。但是,今天要連KVM就發現沒有Scroll Lock超不方便,因多數KVM都是利用連按2下Scroll Lock把server清單叫出來...囧rz

話說公司用的這套Raritan蠻貼心的,可將預設的Scroll Lock自行更改為Num Lock或是Caps Lock,無奈Raritan在更改後無動於衷,只好回頭找尋Scoll Lock大爺的蹤影XD

後來找到2個方式:
1.Fn+Pause Break:因為我不是用NB..沒有Fn鍵,所以放棄
2.小鍵盤:有點虛不過至少KVM終於起反應勒,暫且一用,使用方法如下

叫出「執行」視窗並輸入「osk」,可愛小鍵盤就出現在你眼前,下圖的「slk」便是消失的Scroll Lock!

C# v.s VB對照表

這幾天將C#改寫VB,以下列出一些函示的對照表,之後會陸陸續續更新!

C#                         VB
typeof                                          GetType
continue                                       Continue{Do | For | While}
as                                                 CType

地圖輸出列印

因為ESRI提供的PrintTask不很好用,中文化又麻煩(這才是重點XXD),所以這次就不再依賴元件,希望以coding方式方式直探底層元件,開發出可提供使用者動態設計地圖的彈性頁面!

之前參考viswaug先生的部落格有挖到寶,目前自動產生legend的測試情況是OK,不過還是使用C#,我打算進一步改寫為VB,並結合其他要一併動態輸出的物件!之後會陸續把code貼上來...
以下為viswaug部落格的相關參考資料
1.作者自行開發的緣由
2.實作的簡略說明
3.開發成果(原碼)

VS2008快速鍵

今天開發到一半,突然想到切換頁面時有沒有快速鍵呢?
因為寫程式寫到一半要去動滑鼠實在很不順XXD
查了一下發現微軟有提供說明檔,以下列出我愛用的快速鍵以及下載網址

F7:檢視程式碼
F7+shift:檢視設計頁面
ALT+CTR+DOWN ARROW:切換頁面

VB說明檔
C#說明檔

asp:Menu無法在IE8正常顯示

這個禮拜Demo系統給業主看,沒想到同事剛好前一天把NB更新到IE8,就在一進入初始頁面時就發現所有的功能都找不到勒@@(因為功能都塞在menu裡面),本來以為是我有塞圖片給menu導致IE8無法正常顯示,後來發現是微軟的問題=..=

後來google找到很多網頁都是大同小異,列出一個我覺得不錯的給大家參考
解決方法寫得很詳細,就不多說勒~

上一半的課

昨天參加MSDN研討會,努力聽到下午終於可以聽到最期待的SILVERLIGHT勒!
沒想到微軟的小姐竟然以晚上還有人要用場地為由,硬生生把未完的課終止,有夠囧的!!沒想到大公司如微軟,其員工處理調度的手法竟如此粗糙Orz..

重點是該研討會的表定時間明明就是到5:30pm,就算真的有無法調度的苦衷好勒,可是老師也只提早上課5分鐘,竟然要老師提早半小時下課,這有天良嗎T^T

希望老師再補開一堂,不然「狀態」沒上到就好像SILVERLIGHT沒有升級到3一樣@"@

HongkongToolbar

許多電台都有提供網上收聽免費服務,香港商業電台881903最顯誠意,在08年進一步提供toolbar與廣大聽眾使用,安裝完後就像google toolbar一樣會鑲在瀏覽器上,更貼心的是同時支援IE與Firefox!另外,最大的優點是避免使用商業軟體接收影音串流lag造成瀏覽器掛掉的狀況,是個小巧、介面簡單的小工具!

非常適合我這香港控啦XXXD
by the way 古巨基的聲音真是令人印象深刻,久沒聽他的歌竟然還認的出來...pu
Toolbar下載網址

安裝Northwind資料庫

開發測試階段常使用Northwind資料庫,之前偷懶都直接使用Server計畫案中的既存資料庫,今天心血來潮想說改用local端的Northwind,這才發現Express版本沒有XXD

後來google一下發現不少資訊,最後還是選擇台灣微軟官方網站之說明(個人認為說明詳細且排版清晰易讀),參考一下網址按步操作即可
http://msdn.microsoft.com/zh-tw/library/ms165732(SQL.90).aspx


小抱怨一下,剛剛使用google的Post to Blogger!小工具,結果本篇文章只要是中文字的部分全部變成亂碼,看來Andy Monat先生沒有考慮到廣大亞洲user的需求...囧

懶懶的

期末驗收通過就一直處於不想上班的狀態@@可能趕案子的壓迫感突然沒了?!
不過這幾天終於可以好好研究SL,發現還需要不少其他技術輔助才能做出實用又炫麗的網站,希望接下來可以陸陸續續寫點東西嚕 : -)

無法檢視DBML

昨天想說試試LINQ,想當然就是開個網站再加入新項目「LINQ to SQL 類別」,可是光是新增此類別就有error,造成dbml無法以檢視模式觀看,當然我們也不可能硬來...直接編輯XML,後來Google了一下找到解決的方法,參考網址如下
http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/af45e2b7-98c5-4e12-9bc9-890ae4d03542

在這邊註明一下我的錯誤訊息,因為piggy在尋求解答時發現用英文比較好找=..=,可能使用中文版的朋友們比較少在用LINQ吧~撲
中文版錯誤訊息:自訂工具 'MSLinqToSQLGenerator' 失敗。無法擷取目前的專案
英文版錯誤訊息:The custom tool 'MSLinqToSQLGenerator' failed. Could not retrieve the current project.

以下簡單說明一下solution
1.使用Visual Studio Tools裡面的「Visual Studio 2008 Itanium Cross Tools 命令提示字元」
2.輸入devenv /ResetSkipPkgs後按下enter
3.收工

此時VSTS已經被修復並且會重新開啟,這時候再去新增一次LINQ類別就會是下面漂亮的畫面勒

共用事件處理常式

承上篇,判斷檔案存在與否已解決,下載頁面的HyperLink只要在Load事件中判斷檔案是否存在,就可動態決定要導向download page或自訂的error page,此時出現另一個窘境:如果頁面有20個載點,那就要寫20個HyperLinks_Load事件,為了不使用這種浪費資源、維護困難的笨方法,就要善用「共用事件處理常式」!


首先列出可以共用的事件處理常式如下(以下簡稱H)
Protected Sub HyperLinks_Load(ByVal sender As Object, ByVal e As System.EventArgs)
  '因為這邊的物件都是hyperlink我就偷懶不做轉型,直接以其Text屬性動態產生zip檔名
  Dim pathToCheck As String = "../download/" & sender.Text & ".zip"

 If (System.IO.File.Exists(Server.MapPath(pathToCheck))) Then
  '檔案路徑存在,將hyperlink之sender.NavigateUrl指定為動態產生的pathToCheck
   sender.NavigateUrl = pathToCheck
 Else
   '檔案路徑不存在,將hyperlink之sender.NavigateUrl指向自訂的錯誤頁面
  sender.NavigateUrl = "../myError.htm"
 End If
End Sub


再來和一般的事件處理常式比較(以下簡稱AA)
Protected Sub HyperLink1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles HyperLink1.Load
  Dim pathToCheck As String = "../download/" & HyperLink1.Text & ".zip"
  If (System.IO.File.Exists(Server.MapPath(pathToCheck))) Then
   HyperLink1.NavigateUrl = pathToCheck
 Else
  HyperLink1.NavigateUrl = "../myError.htm"
 End If
End Sub
用一般的事件處理常式,控制項越多程式碼會越龐大,在你仿照第1個控制項,做copy/paste動作撰寫其他控制項事件處理常式後,還要一個一個去改控制項的ID(注意粉紅色)!
所以事件處理常式的共用是非常重要的,除了精簡code還能避免手動更改控制項ID或其他變數時有漏改的情況產生,而且漏改通常不會無法編譯,可是每當在執行各事件處理常式時,漏改的part就是無法如願以償去執行正確的動作,此時code已經深如大海很難維護!


現在回頭看,我們已經有單一方法H來處理問題,但是H要怎麼知道是哪個控制項可引發事件?這時仔細觀察AA之所以能觸發HyperLink1的Load事件是因為有「Handles HyperLink1.Load」,所以只要在H後面加上要觸發的控制項事件即可,完整H如下
Protected Sub HyperLinks_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles HyperLink1.Load, HyperLink2.Load, HyperLink3.Load _ , HyperLink4.Load, HyperLink5.Load, HyperLink6.Load, HyperLink7.Load, HyperLink8.Load, HyperLink9.Load, HyperLink10.Load
 Dim pathToCheck As String = "../download/" & sender.Text & ".zip"
 If (System.IO.File.Exists(Server.MapPath(pathToCheck))) Then
   sender.NavigateUrl = pathToCheck
 Else
  sender.NavigateUrl = "../myError.htm"
 End If
End Sub

【注意】
1.參考網址http://msdn.microsoft.com/zh-tw/library/4ac48519.aspx
2.不想keyin也可用VSTS設計頁面(下圖),在每個控制項事件中指定「共用事件處理常式」,H就會自動為您加上要觸發的事件(黃色)。

判斷檔案是否存在

最近作了下載zip的頁面,其中載點連結都是寫死的,寫死的缺點是萬一Server還沒拿到全數的zip檔,使用者在點擊超連結時會被導向HTTP 404頁面,
我的解決方式是直接更改IIS中的「自訂錯誤頁面」。但後來PM要求不要所有的HTTP 404都導向同一個頁面,只好放棄前面偷懶的方法,乖乖去判斷載點是否存在!

Sub getFile()
  Dim pathToCheck As String = "../download/ABC.zip"
  If (System.IO.File.Exists(Server.MapPath(pathToCheck))) Then
    '檔案存在,這邊可以讓使用者下載
  Else
    '檔案不存在,跳出說明頁面或提示訊息
  End If
End sub

【注意】
1.本例之pathToCheck使用指定的路徑,亦可以用動態的!
2.若pathToCheck像本例一樣是使用相對路徑,記得在判斷檔案存在與否時使用Server.MapPath函示
3.參考網址http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.fileupload.saveas(VS.80).aspx

演唱會嘉賓

2004年何韻詩是演唱會的超重要嘉賓,不...他不是嘉賓,他根本是場場都要和mi一起演出的重要歌手!!那時候剛接觸粵語歌,認識的香港歌手沒幾個@@,以致於我現在完全想不起來2004年最精彩的紅磨坊劇中劇...哭哭>""<

現在看youtube每看一次感動一次,覺得自己真是笨蛋=..=

希望27那場來的都是我認識的歌手XXD

again

又來勒~不想再跟沒sense的人合作

改支小程式很簡單沒錯,花不到幾分鐘時間,問題是資料有問題怎麼可以叫RD偷改程式去掩飾資料的錯漏咧!!!?本末倒置嘛

唉..什麼時候才可以組成有系統、正統開發流程的開發團隊,重點是還要有決策權!
不然你幾萬筆資料隨便爛個幾筆,我都改到死嘛(@__@)

Bad Request(解決request中文傳值亂碼)

雖然撰寫程式時可盡量避免使用中文,但有些情況還是避免不了,就必須解決編碼的問題

可以使用的函數有Server.UrlDecode和Server.UrlEncode
如果是在前端(javascript)就要進行編碼工作,則是透過escape()以及unescape(),不過它們已經算是舊版的函示,建議還是使用decodeURIComponent()與encodeURIComponent()。

PS:piggy在開發時使用escape()在IE6、IE7都是沒問題的!

2009香港行-行前準備3

本篇針對HK的"交通",今天來寫下第3篇行前準備,之後會陸陸續續更新交通相關訊息...

★機場快線
提供旅客機場/市區之往返,可依需求選擇票種,這次是6天5夜所以選擇「來回票」,車票可以到香港MTR官網訂購,或是透過y拍之類的購物網站取得。
注意事項:
(a)如果有購買機場快線、著名景點觀光套票的需要,可以和港簽一起搞定,因為購買多項產品可以在y拍取得更優惠的價格。
(b)機場快線的下車點其實不是很方便,大家要善用酒店的接駁車,或是免費的機場快線接駁車,而且班次非常多,只要在車收班前都可輕易搭到。

★八達通
悠遊HK絕對少不了的必備品,功能類似我國悠遊卡,但功能更強大,連機場快線的扣款也可以靠他,即使要去馬場小賭一下,都可以拿八達通付入場費喔ㄎ
注意事項:
(a)離開香港前記得拿去退款喔,不過要扣手續費就是勒


★2009香港行前準備系列
1. 行前準備1
2. 行前準備2
3. 行前準備4


2009香港行
1. Day1
2. Day2
3. Day3
4. Day4
5. Day5

REST API Admin

相信有玩ArcGIS的都知道「ArcGIS Services Directory」可用來瀏覽目前已啟動之服務,及該服務相關資訊、支援之檔案格式等,但是piggy常遇到不論用ArcCatalogArcGIS Server Manager重新啟動/關閉某服務(以下簡稱S),S仍然不存在/存在於起使頁面的怪情況(因為cache還在),這時候就要靠「REST API Admin」出馬了!以下簡單把步驟一一切圖下來給大家參考。

1.
在瀏覽器上輸入網址,導向RST API Admin頁面
http://
架設服務的伺服器IP/ArcGIS/rest/admin/

2.輸入帳號與密碼
登入方式與ArcGIS Server Manager一樣,帳號一定要給機器電腦名稱\帳號(例如pc-21\admin),成功登入之畫面如下圖


3.承上圖,API提供—Clear Cache OptionsServices Directory Options兩種設定工具,請按下Clear Cache Options進入手動清除服務Cache的頁面


4.按下頁面左上方的「Clear Cache Now」即刻清除cache,若出現「Cache Cleared.」的字樣表示您已經成功清除Scache

5.接著我們再回去檢查「ArcGIS Services Directory」,本來怎麼找都找不到的S已經順利出現在Directory的列表中!

2009香港行-行前準備2

12月底才去香港,所以上篇提到的電子簽證就不急著辦勒,可以拖到12月初!接下來最最重要的當然是「機票」嚕!要是其他東西都安排好就缺機票~那搞屁啊ㄎ

機票原則上可透過旅行社或直接向航空公司購買,這次使用背包客棧的"便宜機票查詢系統",雖然查出一堆結果卻一點也不便宜XXD即使搭配信用卡且在2:00pm後登機,單程不包機場稅也要約4100大洋/人,而且後來經由網友指點發現「開票」、「定位」是兩碼子事,降越來越覺得定機票是一件棘手的事情@@

最後和同行友人討論,決定把事情簡單化,直接向航空公司購票!
皇天不負苦心人!後來在長榮找到搭配MASTER CARD的168優惠專案,台北-香港往返只要7712/人,重點是7712包含機場稅那些哩哩摳摳的稅金,往返班次完全不限制,想玩夠本的人就可以早去晚回!

第1次線上購買機票,使用經驗還蠻不錯的,迅速買票後可以馬上選位、選餐,不到一個小時就搞定(因為在半小時後如果尚未付款,系統會踢你出去:p),只要小心別錯手選錯航班~◎_◎~,因為退費非常耗時間、金錢,可能尚未出國就已經玩興大失。

購買機票要注意的二三事:
1.稅金通常是另外計算
2.機票可能受匯率影響
3.優惠票通常不易更改航班
4.單程航班多以電子機票方式登機,記得攜帶電子機票
5.要注意優惠票的限制,ex:信用卡持卡本人必須為機票使用者其中一人
6.若以信用卡購票,務必攜帶該信用卡以完成登機前的確認
7.機票分年票、月票balabala很多種,請依需求購買,免得成了冤大頭
8.貨比三家不吃虧!既然要自助就要認真比價,不然像piggy之前找到的都約略落在13000-11000(單人往返含稅)

另外另外,買完機票的好處是可搭配該航空公司與酒店合作的方案,還有購買機票前最好先加入該航空公司之會員,可以累積里程!


★2009香港行前準備系列
1. 行前準備1
2. 行前準備3
3. 行前準備4 


2009香港行
1. Day1
2. Day2
3. Day3
4. Day4
5. Day5

2009香港行-行前準備1

第2次自助旅行、第2次去香港、第2次為了演唱會出國~哈哈!


出國旅遊除了攜帶快樂心情、夠用的摳摳,一定要做好行前規劃,除非對當地熟到不行,只是單純去度假閒晃那真的就是衝上飛機就可以勒。這次因為打算看完演唱會後順便感受一下當地跨年氣氛,而且同行友人對於香港已經印象模糊勒,所以本來要採free style亂晃一通的想法就作罷勒,還是來好好規劃行程,反正日後應該都是自助旅行,總不能每次都耍懶去現成的:p(朋友規劃好的),或許慢慢規劃出心得以後常常自己一人跑國外去逍遙也說不定cc。


目前暫訂4天3夜港澳遊,會去香港當然是鄭四萬要開演唱會>////<,這次加入澳門則是考慮到4天都待在香港可能會有點膩,反正現在持有中華民國護照的台灣民眾即可免簽證進入澳門,最多停留30天,所以現在要搞定的就是護照和香港簽證的部分。

護照:就是看有沒有過期,沒什麼要特別說的XD

港簽有以下幾種,不過最新的簽證形式還是以香港入境事務處 的網站為準
(a)電子簽證(HK稱網上快證):有效期限2個月,可出入香港2次,費用為港幣50元,只能請特許 航空公司及旅行社代辦,但是各代辦機構會收取不等的手續費,費用從300到上千元都有=..=
(b)單次簽:有效期限3個月,憑證最長可逗留90天
(c)多次簽:有效期限分1年、3年兩種,憑證入境每次可逗留30天

辦理電子簽證要注意2件事:
1.委託代辦後通常領到的是電子簽證的單據真正的簽證需到香港國際機場的專櫃領取(不過有些代辦機構會先幫你把電子簽證送到台灣)
2.護照的有限期限至少要6個月以上


這次是單純旅遊,近期內鄭四萬也不會再開演唱會,今年的香港行我會採用電子簽證的方式,也不用像上次那樣辦台胞證,硬是跑去作廣九鐵路晃到大陸去XD


★2009香港行前準備系列
1. 行前準備2
2. 行前準備3
3. 行前準備4


2009香港行
1. Day1
2. Day2
3. Day3
4. Day4
5. Day5

高估

原來沒有想像中堅強‧‧

真是太高估自己

MS Chart

MS Chart雖然釋出好一陣子了,卻沒有好好花時間去玩它,只好就開發上的一些經驗稍做紀錄還是記一下在使用上的一點小發現好勒,不然我每次都失憶也不是辦法。之後就都用這一篇來持續記錄此元件的細節好勒!

1.IsEndLabelVisible
作單一年度的月份人口報表(X軸為月份、Y軸為人口數)時,月份照理說是1-12月,但是Chart每次都會自動+1,直接將X軸延伸至13月=..=

後來試勒二種方法
(a)指定X軸的資料型態為月份:造成X軸會顯示詳細"西元年月",無法只顯示"月份"
(b)指定X軸最大值等於12:會造成12月份的直條圖被切一半

最後找到Chart→ChartAreas→AxisX→LabelStyle裡面的「IsEndLabelVisible」屬性才解決這個問題,將此屬性設為False即可讓Chart認為的最後一個標籤(13月)不被顯示,這樣12月的資料就不會被切到,可以完整顯示!

感謝強者

今天工作很不順,幸好最後有強者加持,總算把大問題解決了!!
以後我也要像強者一樣,除了功力深厚還要多幫助其他有需要的同事~不過前提是自己也要加把勁,努力朝強者之路邁進,不然也沒什麼可以鼎力相助的ˇˍˇ≡

anyway,要再次感謝今日鼎力相助的仁兄,希望不要害你被老婆念太晚回家@"@

RD的辛酸

RD真的是地位低卻責任大,身為RD基本上業主多機車都會盡量滿足(業主說:加一支程式就好啦,RD:好T.T),最糟糕的是小RD通常幾乎無話事權,尤其是遇到強硬的PM,所以也只能乖乖照作,等到驗收前就會有下面的狀況出現:

主管:我非常同意業主的說法,架構搞成這樣太沒sense,連我都看不下去勒
PM:可是照著合約走啊!
主管:我才不管你什麼合約,這麼離譜的東西你敢交給人家
PM & RD:....
.......接下來的冗長會議,PM已經失去立場說話只能點頭稱是....當然也就沒人管RD...最後結果就是RD改到死


小妹覺得業主也不是都無理取鬧,意見當然是源自於需求,但是我真的很想請問PM,怎麼沒有和業主建立良好的溝通??如果只是照著合約依PM個人意思解讀,再對RD下達指令,那你當PM跟我當PM有差嗎????!!PM都不PM了嘛
說RD是Redo & Delay真是一點也不為過 <‵▽′>

父子視窗傳值

承前面一篇的民國年份之月曆開發,在點選完日期後當然要將日期傳回至本來的父視窗,這時就面臨傳值的問題,以下為透過javascript的2個小方法。
(假設父視窗叫做parent.aspx,用來放置小月曆的子視窗叫做child.aspx)

1.方法一
開啟方式:window.open
傳值方式:opener

開啟方式ex:window.open('child.aspx','月曆選取器','width=300,height=300')
傳值方式ex:opener.form1.SelectDay.value = day;
(form1是父視窗的form名稱,SelectDay是父視窗裡面的一個text input,day就是子視窗小月曆提供的值)


2.方法二
開啟方式:window.showModalDialog
傳值方式:window.dialogArguments.form1.SelectDay.value = day;

開啟方式ex:window.showModalDialog('child.aspx',window,'dialogWidth:300;dialogHeight:300;')
傳值方式ex:window.dialogArguments.form1.SelectDay.value = day;
(form1是父視窗的form名稱,SelectDay是父視窗裡面的一個text input,day就是子視窗小月曆提供的值)

[心得]
★上述2種方法都可,要注意的是方法二要能讓父子視窗互動的話,一定要在showModalDialog的第2個參數填上window
★之所以後來採用方法二,是為了讓視窗永遠focus在child.aspx並顯示為最上層,這樣使用者在開啟child.aspx視窗後,就不會有忘記視窗已開啟而誤以為網頁無法傳值的問題!

使用民國年的小月曆

一般的AJAX頂多透過更改當地文化之設定可以讓CalendarExtender顯示中文,但並未提供民國年份的Calendar,以下提供4個相關網址供大家參考。
http://epaper.blueshop.com.tw/board/show.asp?subcde=BRD200410280805412Y2&fumcde=FUM20041006161839LRJ&rplcnt=13

http://blog.miniasp.com/post/2007/12/04/I-Found-two-very-useful-Calendar-for-Taiwan.aspx

http://74.125.153.132/search?q=cache:W_fdFPRc6_cJ:www.dotblogs.com.tw/chhuang/archive/2008/03/18/1861.aspx+calendar+%E6%B0%91%E5%9C%8B+AJAX&cd=3&hl=zh-TW&ct=clnk&gl=tw

http://msdn.microsoft.com/zh-tw/library/cc464124(VS.71).aspx

我是使用Calendar並搭配DropdownList讓控制項更靈活,考量到重複使用其實是應該要作成「自訂控制項」。
以上是一點心得,如果有需要的話我再把程式碼放上來。

處理樣板欄位中的空值

使用諸如GridView之類的控制項,若binding之資料有空值,可以透過元件本身提供的NullDisplayText屬性來設定空值時要呈現的訊息。
一般來說,我們並不會滿足於使用基本的GridView,而是透過樣版的設計客製化符合業主的表格,但是樣板並不具備NullDisplayText屬性讓我們直接操控,這時候需要寫一點小程式來處理,說明如下。

假設樣板中有一Textbox1,其Text屬性是binding「金額」這個欄位 Eval("金額")<%# Eval("金額") %>,如果我們希望金額是零元的時候顯示「目前無存貨」的字樣,有金額時則改以錢字符號加上金額來顯示(例如$100),可以透過以下函示完成

Public Function GetReportsTo(reportsTo As Object) As String
 If reportsTo Is DBNull.Value Then
  Return "目前無存貨"
 Else
  Return "$" & CStr(reportsTo)
 End If
End Function


最後把Textbox1之Text屬性之binding改為GetReportsTo(Eval("金額"))即可!



【附上參考來源】
使用資料來源控制項處理 Null 資料庫值
http://msdn.microsoft.com/zh-tw/library/ms366709%28VS.80%29.aspx

tr標籤的可見性

相信大家在撰寫網頁時,多少會需要隱藏某些標籤(tr、td..),之前piggy都是用<tr id="tr1" ruant="server" />,在後台指定「tr1.visible="True"」。
今天在寫一支javascript,希望滑鼠移動到image時可以改變顏色,當滑鼠再進一步click則開啟某個tr,因為這次想要全都使用javascript去控制,而不是透過後台的方式,所以作了一些嘗試,以下是一點心得。

-----------------------------上面是廢話-----------------------------
1.tr的設定
<tr id="tr1" style="VISIBILITY: hidden">
 略
<tr/>
2.控制可見性
< a="#" onmousedown="document.getElementById('tr1').removeAttribute('style'); document.getElementById('tr1').style.visibility='visible';" <a/>
簡單來說,本範例是用onmousedown事件觸發,首先清空tr1的style設定接著再給予新的設定值即可,如果style的設定有很多的話,可以考慮獨立一個專門設置style的function給onmousedown叫用。

PS:piggy本來是用onmousedown="document.getElementById('tr1').visible='True';",可是都不work後來才改用設定style的方式,提供給跟我遇到一樣問題的人參考。

關於GridView的CommandName

大家都知道GridView很強大可以直接提供新增、修改、刪除的功能,

不過有時候因為種種原因需要以程式binding動態的dataSet,就要自己處理GridView各類behavior,相關處理方式請參考http://www.dotblogs.com.tw/topcat/archive/2009/02/23/7266.aspx



------今天要分享一點關於「GridView的RowCommand事件」的心得------

GridView可能包含多個自行設計的Colume,每個Colume各有各的CommandName...並且分別執行不同的事情,透過取得e.CommandName就可以在事件中撰寫他們要執行的程式碼,如下面的範例

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
 Select Case e.CommandName
  Case "Hello"
   '當CommandName=Hello時處理本段程式
   '(略..)
  Case "ByeBye"
   '當CommandName=ByeBye時處理本段程式
   '(略..)
Case Else
    Exit Sub
 End Select
End Sub

上面的"Hello"和"ByeBye"都是正確的,但是如果用"Delete"就會出現如下圖的錯誤,piggy還想說都已經自訂程序勒,怎麼錯誤訊息還要我去處理RowDeleteing,如果大家以後遇到情況可能要檢查一下CommandName的命名,而不是傻傻的跑去撰寫RowDeleteing事件!!


〔心得〕CommandName命名絕對不可和GridView事件之名稱相同!

在網頁中加入Silverlight控制項

距離上篇安裝說明已過3個月~本來要寫「如何新增Silverlight專案」也作罷

========以上是廢話,接下來進入本篇的重點=========
在進行Silverlight專案測試,習慣上都是對布置好的場景按滑鼠右鍵以「在瀏覽器中檢視」或是透過Silverlight的測試頁來觀看結果,一直沒有把Silverlight的角色搞清楚,因此對於Silverlight的使用場合一直沒有feel,今天仔細拜讀章立民老師所出的「Silverlight2.0 精華技術手冊」第3章才開竅(暈...不知道之前在笨什麼),以下是範例Demo。
1.新增1個Asp.NET網站


2.首先一定要放置ScripManager
3.從工具箱的拖曳一個Silverlight控制項到Default.aspx的設計頁面
4.接著設定此控制項的Source屬性,將它指向某一個你已經設計好的xaml檔案
5.大功告成(如果覺得控制項變化太少可以再自己更改高度、寬度..等屬性)
前述步驟引用的xaml為他人資料,就不放上最後Demo畫面!
只要每個步驟都有作到,一定可以成功在您設計的網頁上看到豐富的Silverlight控制項!
[心得]:學習如何在網頁中載入Silverlight控制項,瞭解Silverlight並不是一個真正可獨立執行的網頁而是用來開發豐富的元件以輔助之前我們所熟知的ASP.NET網站。

如何安裝Silverlight 2.0

1.執行 Service Pack 準備工具(如果您之前曾經安裝 Visual Studio 2008 Hotfix 或 Visual Studio 2008 SP1 發行前版本,必須先執行它,才能安裝 Visual Studio 2008 SP1。)



安裝的時候忘記抓畫面勒,只好用最後的完成頁面給大家參考(上圖)。安裝過程都很簡單,只要看一下這個工具提供的訊息並且按Next就可以了!


2.安裝VS2008 SP1
SP1有exe執行檔和iso檔兩種可供選擇,網路不穩定的朋友可以考慮下載iso,因為piggy在第一次安裝執行檔的時候不幸在1個多小後才失敗=..=


3.安裝 Silverlight Tools for Visual Studio 2008 SP1


4.安裝Blend 2試用版以及Blend 2 SP1 繁體中文


5.安裝Silverlight Toolkits
裡面有很多Samples,並且包含原始碼~對學習很有幫助,建議安裝!


6.安裝Deep Zoom Composer
目前只release英文版,繁體中文可能還要在等等

Silverlight 2.0

最近開始注意到Silverlight(其實1.0就注意到勒...無奈惰性=..=) ~想要開始來好好研究一下

剛剛查勒一下資料好像1.0真的陽春很多,就直接2.0下手吧,希望可以做出很酷的網站!

說不定之後可以開始寫自己的「技術文件」,為學習留點心得^^