2014年11月29日 星期六

VS 2012 C# 偵錯與例外處理 -- 20141128

程式的錯誤可分三大類:

  •  編譯時期錯誤(Compile Time):

    在程式編寫過程中,可由開發工具、編譯器檢查出來的語法錯誤。(如:變數未宣告)

     →解決方法:語法不熟悉,可立即查閱線上說明。 
  •  邏輯錯誤:

    當程式已通過語法、語意檢查,可正常編譯執行,但程式執行結果卻非預期或不合理。

     → 解決方法:執行結果不正確實,再回頭檢查與修正。
  •  執行時期錯誤(Runtime Error):

    指程式在執行階段,遭遇程式未預期、且無法有效處理的意外狀況。(如:連線資料庫失敗)

     → 解決方法:利用VWD提供的偵錯(Debug,或稱除錯)功能來找出問題點,並於已修正。

2014年11月27日 星期四

VS 2012 C# AdRotator輪播設計 -- 20141126

經常看網頁有輪播功能,然而看似很難的功能,其實透過VS 2012簡單的幾個步驟就可以輕鬆製作呈現出來。

-------------------------------------------------------------------------------------------------

步驟一、先製作要輪播的圖片(當然要用文字也可以),如下:

banner1.gif

banner2.gif

banner3.gif



步驟二、設定製作資料來源(包含:XML、Access、SQL Server...等)

 ※ 這裡就採用XML檔作為資料來源,加入→加入新項目→XML檔(圖一)
(圖一)
(圖二)














































根據(圖二)中,在XML檔案中輸入程式碼,如下:

<Advertisements>
  <Ad>
    <ImageUrl>img/banner1.gif</ImageUrl>
    <NavigateUrl>http://tw.yahoo.com</NavigateUrl>           <--- (超連結網址)屬性
    <Impressions>20</Impressions>                                          <--- (輪播出現次數的權重)屬性
  </Ad>
  <Ad>
    <ImageUrl>img/banner2.gif</ImageUrl>
   <NavigateUrl>http://www.google.com.tw</NavigateUrl>
    <Impressions>20</Impressions>  
  </Ad>
  <Ad>
    <ImageUrl>img/banner3.gif</ImageUrl>
   <NavigateUrl>http://www.hinet.net</NavigateUrl>
    <Impressions>60</Impressions>  
  </Ad>
</Advertisements>

※上述(圖二)圖片的檔名有錯誤,要注意別照抄!!
※輪播權重的表示,平均每100次連線,圖片出現的次數。假設上述banner3.gif會出現60次。

步驟三、使用AdRotator控制項

(圖三)
(圖四)
(圖五)





(圖六)

根據上述圖片指示操作後,輪播廣告設定就完成。



結論:

很多事情動手去做才學會,千萬別眼高手低,只有自己依樣畫葫蘆才知道來龍去脈,若您和我都是寫程式的新手,就動手製作去做做看,肯定有收穫的!!!


參考書籍:新觀念APS.NET 4.0網頁程式設計-使用Microsoft Visual C#(施威銘研究室 著) 旗標



2014年11月22日 星期六

VS 2012 C# GridView中欄位的日期格式變化(DateTime) -- 20141121

結論:

     將GridView欄位中的「日期時間」格式改成2014/11/21(如下圖)


















--------------------------------------------------------------------------------------------------------------------


由於在資料庫設計時,將日期欄位為DateTime格式,故前端的GridView呈現預設日期欄位2014/11/1 上午 12:00:00(如下圖)




















解決方式一、

在資料欄位DataFormatString屬性中,加入  {0:yyyy/MM/dd}































決方法二、

直接在程式碼中加入   DataFormatString="{0:yyyy/MM/dd}"













-----補充(2015/08/04)--------------------------------------------------------------------------------


※GirdView的編輯欄位對照:










































































































---------※資料格式運算式(DataFormatString),以下是舉幾個例子說明:------------------------------

原本輸入的值 格式(英文大小寫有差別) 輸出的結果
2015/1/1 {0:yyyy} 2015
2015/1/1 {0:yyyy年MM月dd日} 42005
1234 {0:D8} 00001234
123.456 {0:C} 123.46

---------------------------------------------------------------------------------------------------------------------



































參考文獻:微軟的「自訂日期和時間格式字串」


2014年11月18日 星期二

VS 2012 C# 日期變化(DateTime) -- 20141117

讓TextBox1呈現「今天」的日期!!!

  • TextBox1.Text = DateTime.Now.ToString( );
→ 進階-指定日期的格式:DateTime.Now.ToString("yyyy/MM/dd");  
→呈現格式(如):2014/11/17


---------------------------------------------------

昨天日期:

  • DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd");

→呈現格式(如):2014/11/16

----------------------------------------------------

明天日期:

  • DateTime.Now.AddDays(1).ToString("yyyy/MM/dd");

→呈現格式(如):2014/11/18


--------------------------------------------------

上個月日期:

DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd")).AddMonths(-1).ToShortDateString( );

--------------------------------------------------

下個月日期:
DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd")).AddMonths(1).ToShortDateString( );

--------------------------------------------------

本年度第一天:

DateTime.Parse(DateTime.Now.ToString("yyyy/01/01")).ToStringDateString( );

--------------------------------------------------

本年度最後一天:

DateTime.Parse(DateTime.Now.ToString("yyyy/01/01")).AddYears(1).AddDays(-1).ToStringDateString( );






2014年11月14日 星期五

使用AJAX Control Toolkit出現錯誤訊息 -- 20141113

緣由:

由於使用AJAX Control Toolkit擴充的元件開發程式,結果出現了下列錯誤訊息「
找不到任何適用特定文化特性或中性文化特性的資源。請確定您已在編譯時期正確地將 AjaxControlToolkit.Properties.Resources.NET4.resources" 嵌入或連結至組件 AjaxControlToolkit" 中,或所有需要的附屬組件均為可載入且已完整簽署。」(如下圖)





解決方式:

透過AJAX擴充功能選項中,將ScriptManager拖曳到開發的畫面中,錯誤訊息即可消失,程式也可正常運作。(如下圖)

結論:

初學者往往都看見錯誤訊息就會放棄,當找到解決方式的話,肯定會更進一步!退縮與逃避是不能解決問題的,希望我也可以對某項東西也可以持之以恆!  哇哈哈




































認識AJAX -- 20141113

何謂AJAX?

    簡單說就是非同步的網頁技術,是J.J Garrett(2005年初)提出來的一種網頁技術,其AJAX的全名為Asynchronous JavaScript And XML。由於傳統的網頁應用,用戶端必須將整個網頁表單傳回伺服器端,經由伺服器端處理後,再回傳整個網頁內容到用戶端,往往造成許多頻寬的浪費。
    為了解決這問題,故採取AJAX技術,僅將網頁部分內容回傳伺服器端,在將更新後的最新消息載入用戶端,減少資料在網路上傳送,降低伺服器負載,提升網頁的處理效率。


--------------------------------------------------------------------------------
網頁「同步」與「非同步」模式的差異?

例子:當網頁中只有最新消息的需要進行更新,而網頁其他部分(選單、廣告、版權...等)不需要進行更新。

同步處理:
根據上述例子,在傳統的動態伺服器網頁,必須將整個網頁全部回傳至伺服器端,經過伺服器端處理並取的資料庫最新消息之後,再將整個網頁全部內容包含網頁其他部分全部回傳至用戶端。缺點:當伺服器端忙碌或網路速度變慢的時候,此時用戶端的使用者只能等待。


非同步處理:
同樣根據上述例子,在不換頁的情形下,只更新最新消的區塊,且整個網頁只將最新消息區怪回傳至伺服器端,再將更新後的最新消息載入至用戶端,其餘的部份(選單、廣告、版權...等)並不會傳至伺服器端也不會刷新頁面。優點:在伺服器和瀏覽器之間交換的資料大量減少(大約只有原來的5%),伺服器回應更快了,因此Web伺服器的負荷也減少了。

--------------------------------------------------------------------------------------------------------

補充:
AJAX網頁屬於用戶端(展示層)的技術,再用戶端的瀏覽器必須使用JavaScriptXMLHttpRequest送出非同步的Http Request,此時只會將指定的欄位資料傳送至伺服器端,而網頁的其他資料並不會進行回傳(PostBack),接著再透過Http Response方式將更新後的執行結果下載至用戶端的瀏覽器,最後透過JavaScript將更新後的執行結果以背景執行的方式寫回DHTML或DOM(Document Object Model)指定的標籤區塊,此時指定的區塊即會進行更新,由於傳送和接收資料是屬於非同步的模式,因此使用者可以在不換頁的情形下繼續在網頁上進行任何操作。



------------補充 20150807-----------------------------------------------

名詞解釋:


  • XMLHttpRequest物件:用途是被設計來透過HTTP在瀏覽器和伺服器之間接收及傳遞XML或其他格式資料。
  • xmlHttp:是經由Javascript程式產生出來的XMLHttpRequest物件,被命名為xmlHttp。

方法名稱說明
abort( ) 中止要求。
getAllResponseHeaders( ) 取得所有標頭字串值,以成對的「標頭字串/值」的方式回傳。
getResponseHeader( ) 傳回指定標頭字串值,send方法成功後,才可呼叫open( )建立和伺服器連線所需資料。
send( ) 向伺服器提出要求。
setRequestHeader( ) 設定標頭字串值。
屬性名稱 說明
onreadystatechange 是件處理器,每次對伺服器要求狀態改變時,就會觸動這個事件。
readyState XMLHttpRequest物件狀態值,可能的回傳值有:
0 = 還沒有開始
1 = 正在載入
2 = 載入完成
3 = 溝通中
4 = 動作完成
responseText 伺服器以文字型式回傳結果。
responseXML 伺服器以XML型式回傳結果,這裡的XML指和DOM相容文件即可。
status 伺服器回傳代表執行結果狀態。如200帶表完成,404代表找不到要求連線的字串。
statusText 伺服器回傳代表執行結果的文字, 和status是相對照的。




參考資料:維基百科、ASP.NET 4.0從零開始(C# 2010)