ASP.NET 魔法學院

Home Contact Syndicate this Site (RSS 2.0) Syndicate this Site (Atom) Login
  103 Posts :: 1 Stories :: 96 Comments :: 1 Trackbacks

News

☆ 有些事現在不做,就一輩子都不會做了 ☆

每月文章

隨筆分類

影像集

好站連結


Friday, July 11, 2008 #

Strings.Replace 方法是用在字串取代常用方法,常用的呼叫方式如下

可是最近發現一個問題,就是當原字串為 String.Empty (空字串) 時,其傳回值會為 Nothing。

如下程式碼會發生「參考的物件具有 'Nothing' 的值」的錯誤訊息。因為原字串為空字串,透過 Strings.Replace 方法會傳回 Nothing,所以會造成這個錯誤。

所以在使用 Strings.Replace 方法要特別注意這點,防止發生異常的錯誤。而我的作法就是撰寫另一個 StrReplace 方法來取代 Strings.Replace 方法,防止這類錯誤。

posted @ 12:44 AM | Feedback (1)

Sunday, June 22, 2008 #

摘要

之前在「Calendar 動態產生子控制項的 Event Handler」一文中有提到如何處理 Calendar 在 DayRender 事件動態產生按鈕的事件處理,文中最後有提及,若 Calendar 控制項有類似 GridView 控制項中有 RowCommand 事件,在使用上就可以更簡化。所以本文將擴展 Calendar 控制項,新增 DayCommand 事件,就動態產生的按鈕可以可以引發 DayCommand 事件,以便做後序的命令處理。

 

擴展 Calendar 控制項

繼承 Calendar 命名為 TBCalendar,新增 DayCommand 事件,覆寫 RaisePostBackEvent 方法,此方法是在處理引發 PostBack 產生的控制項事件,在此判斷若 PostBack 傳入的引數為 DayCommand${0}${1} 格式 (其中 {0} 為 CommandName,{1} 為日期),則引發 DayCommand 事件。另外新增 GetDayCommandEventReference 方法,提供取得引發 DayCommand 事件的用戶端指令碼。

測試程式

在頁面上放置 TBCalendar 控制項,在 DayRender 事件中動態產生一個 HtmlButton 按鈕,並利用 GetDayCommandEventReference 方法取得引發 DayCommand 事件的用戶端指令碼。在 DayCommand 事件中將 e.CommandName 及 e.Date 輸出在頁面上。

執行程式,按下某一日期的 [刪除] 鈕,就會引發其對應的 DayCommand 事件。

posted @ 7:53 PM | Feedback (0)

Saturday, June 21, 2008 #

摘要

在網路上看到很多 GridView 內含子 GridView 的範例,雖然方法不同不過程式碼都有點小複雜,想說難道沒有更簡單易懂的方法嗎?
在此文章中將用十幾行的程式碼,就教你快速學會並搞定這種 Master-Detail GridView 的需求。

程式碼實作

我們以 Northwind 資料庫為例,首先在頁面上放置二組 GridView+SqlDataSoruce,分別繫結至 [Orders] 、[Order Details] 這二個資料表。

我們先來看一下它的程式碼及執行結果,後續再做進一步的詳細說明。
我們只要在 GridView 的 RowDataBound 事件撰寫下面十幾行的程式碼就完成了,不要懷疑這已經是全部的程式碼。

執行程式,選取 GridView 的某一資料列,就會展開其子 GridView 。執行換頁動作,一樣可以正常展開子 GridView。

接下來說明這個範例的一些細節,Master GridView 繫結 [Orders] 資料表,設定 DataKeyNames="OrderID",當選取某筆資料時,GridView 的 SelectedValue 就是該筆資料的 OrderID 欄位值。另外設定 GridView 的 EnableViewState="False",這個設定主要是讓 GridView 選取時都會重新做 DataBind 的動作。

再來就是 Detail GridView 繫結 [Order Details] 資料表,一樣設定 GridView 的 EnableViewState="False",且設定 Visible="False",也就是初始狀態 Detail GridView 是隱藏的。

Detail GridView 所繫結的 SqlDataSource 控制項,將其 SelectParameters 的 @OrderID 參數關連至 Master GridView 的 SelectedValue。

再來還有一個重要步驟,就是在 aspx 程式碼中,要設定 Page 的 EnableEventValidation="false",因為我們動態將 Detail GridView Render 出來插入 Master GridView 中,整個控制項階層都被異動,這樣會造成事件驗證失敗。

另外在 Master GridView 的 RowDataBound 事件中,有一個 ControlToHTML 方法是取得 Detail GridView 的 HTML 碼,這個方法可以參考筆者另一篇「使用 BasePage 來解決 GridView 執行 RenderControl 產生的錯誤」文章有詳細說明。

posted @ 12:32 PM | Feedback (0)

Firefox3 正式版已開放下載,瀏覽網頁的速度更快了,不過有些舊的附加元件不支援 Firefox3。

http://www.mozilla.com/en-US/

posted @ 12:27 PM | Feedback (0)

若要計算二個日期經過幾月又幾天,需要考慮期間每個月份的天數,每個月的天數是不一樣的。
所以我們可以先計算經過幾個月,然後把起始日期累加異差月份數,再計算差異天數。

posted @ 12:26 PM | Feedback (0)