2008年2月1日 星期五

自己動手寫的版本 ---- 網站的 Master/Detail程式

自己動手寫的版本 ---- 網站的 Master/Detail程式




Master的程式 http://www.taconet.com.tw/mis2000_aspnet/vs2005_case.htm#333
相當於購物網站的首頁

Detail的程式 http://www.taconet.com.tw/mis2000_aspnet/vs2005_case.htm#222
點選任何一個產品,就會看見這個產品的明細、內容、價格....等等


這種功能,很常見、寫程式的人都該學會~


本文出處 http://www.taconet.com.tw/mis2000_aspnet

SqlDataReader 同時執行多個SQL指令!

SqlDataReader很類似以前ASP時代的「RecordSet」,簡單又好用。
但缺點就是:ASP.NET 的SqlDataReader不像RecordSet,可以在同一個資料庫連線裡面,重複開啟「多個」RecordSet。

Microsoft說:「每次在 SqlConnection 上只能有一個 SqlDataReader 開啟。」

所以,當DataReader尚未關閉之前,是不能連續使用第二個DataReader的.....

這實在很困擾。因為在以前的ASP時代,一個資料庫連線裡面,搞不好同時開好幾個RecordSet來工作呢!

解決方法有兩個:

第一,ASP.NET 2.0搭配MS SQL 2005的話,可以解決。請看微軟的官方文件「MultipleActiveResultSets 屬性」,請將這屬性,寫在資料庫連線字串(ConnectionString)裡面。

第二,就是SqlDataReader的「.NextResult()」方法,請看這篇文章的說明(簡體中文網站)。

本文出處:http://www.taconet.com.tw/mis2000_aspnet/

User Control -- 使用者自訂控制項

透過User Control可以取代以前ASP用的 「#include file =」,而且更靈活好用。
用法與ASP.NET 1.X差不多~


1. User Control 的副檔名,務必為 .ascx


2. 只要是重複使用的程式碼、或是元件、控制項,都可以寫在 User Control裡面,在「主程式的畫面」上(附檔名 .aspx)重複使用。

3. 而且User Control 的引用,務必寫在主程式(副檔名 .aspx)的<form
runat="server">......</form
>裡面

4. User Control 就連控制項的tag名稱(如下圖的<Acme:Address),都可以自己命名喔!

 





本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#14_userc


DataReader的標準範例 for ASP.NET 2.0

DataReader的標準範例 for ASP.NET 2.0
1. Try....Catch....Finally版
2. Using....End Using版


很多時候,用手寫的方式,以 DataReader來列出資料,又快又好用。
相信大家都用的到。

以下是我在微軟SDK文件找到的範本,寫得很標準~這裡提供兩個版本
VS 2005 or VS 2008 一體適用!

第一個版本是採用「 Try....Catch....Finally」等偵錯過程(VB.NET語法解說,抄起來放在手邊一定用的到。
不瞞您說,我衷心推薦微軟這份官方文件(資料和ADO.NET),是介紹最好、最淺顯的文章了!

'----自己寫的----
Imports System
Imports System.Web.Configuration
Imports System.Data
Imports System.Data.SqlClient

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'=======微軟SDK文件的範本=======
Dim Conn As SqlConnection = New SqlConnection '----上面已經事先寫好 Imports System.Web.Configuration ----
Conn.ConnectionString = WebConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString
Dim dr As SqlDataReader = Nothing
Dim cmd As SqlCommand
cmd = New SqlCommand("select id,test_time,summary,author from test", Conn)

Try
Conn.Open() '---- 這時候才連結DB
dr = cmd.ExecuteReader() '---- 這時候執行SQL指令,取出資料
GridView1.DataSource = dr
GridView1.DataBind()

Catch ex As Exception '---- 如果程式有錯誤或是例外狀況,將執行這一段
Response.Write("Error Message---- " + ex.ToString() + "
")
Finally '---- Always call Close when done reading.
If Not (dr Is Nothing) Then
cmd.Cancel()
dr.Close()
End If
If (Conn.State = ConnectionState.Open) Then
Conn.Close()
Conn.Dispose()
End If
End Try
End Sub
End Class

第二個版本是採用「Using....End Using」(VB.NET語法解說),抄起來放在手邊一定用的到。 資料來源:微軟MSDN網站--IDataReader 介面

本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#10_datareader

雙重關聯的下拉式選單,例如:郵遞區號

雙重關聯的下拉式選單

常常有人在問:這種功能要怎麼作?
例如:選擇「縣市」名稱後,就會自動跳出相關的「鄉鎮市區」...... or 郵遞區號

以前很難做到的功能,現在透過Visual Studio 2005(VS 2005)或是VS 2008
只要 30秒就能完成,而且完全不需要寫程式

先做好兩個ListBox控制項,各自搭配一個 SqlDataSource。


本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#9_double_down

Repeater控制項的用法

Repeater也都是源自於ASP.NET 1.x版的產物,算是老前輩了。

Repeater的作法很簡單,就是讓我們免除「自己寫迴圈」,就能重複列出資料庫裡面的內容...... 說真的,這功能還真的不怎麼樣~~囧rz......

抱歉喔!這個BLOG我不太會用,HTML碼怎麼轉都轉不出來,請到我網站去看吧。


本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#8_repeater

多重欄位的搜尋引擎(GridView + 分頁)

關於搜尋引擎的作法,我以前在 ASP.NET 1.X版(文章在此,http://www.find.org.tw/mis2000/search_engine_2.pdf
就有提過,概念完全相同。同時要搜尋多個欄位,是有一點小訣竅的~

比較大的差異,是因為ASP.NET 2.0新增的 SqlDataSource是一個精簡版的資料存取功能,雖然比傳統 ADO.NET更簡便好用,但很多執行細節,也因為精靈帶著我們一步一步走,而讓初學者有點迷惘,甚至遇見問題無法修改。

作法滿簡單的,但初學者只會使用現成工作、只會用精靈來完成.....遇見狀況就不知道該如何下手解決了。

這個問題,是讓初學者必須開始「思考」ASP.NET背後是怎麼運作的! ..........完整的程式碼,請看這裡!


本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#6_search

驗證控制項(Validator)搭配當地語系(Localization)

驗證控制項(Validator)搭配 當地語系(Localization)

ASP.NET 2.0 的 驗證控制項(Validator),用法跟以前的1.x版沒什麼不同。請大家放心~

比較特別的是,台灣的ASP.NET中文書籍,較少提到 Localization的部份。
可是目前撰寫的系統,要應付全球這麼多國的語系,不可能不提到Localization。以我為例,一套系統要給台灣與中國大陸使用,中文就會分成「正體中文」與「簡體中文」兩個版本了。

除了上面的範例之外,我們常用的驗證控制項,也可以搭配Localization,讓驗證控制項的「錯誤訊息(ErrorMessage)」屬性,變成各國語言的文字。

作法跟上一個範例一樣,是透過資源檔( .resx檔)來管理各國語言的內容。如果另一個語系是英文(en),檔名為 xxxxx.en.resx。


本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#5_Vali

http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/06/3804.aspx

TreeView、Menu、SiteMapPath ---- (當地語系,Localization)

台灣的ASP.NET中文書籍,較少提到 Localization的部份。

可是目前撰寫的系統,要應付全球這麼多國的語系,不可能不提到Localization。以我為例,一套系統要給台灣與中國大陸使用,中文就會分成「正體中文」與「簡體中文」兩個版本了。

本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#4_local

http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/06/3803.aspx

TreeView、Menu、SiteMapPath ---- (權限控管,搭配Login控制項)

看看下面的圖片,就知道這三個新功能是在作什麼了?


(不同的帳號 Login,會看見不同的功能列表&URL)



但是,要搭配ASP.NET 2.0的 Login控制項,依照不同帳號、不同權限,看到不同的導覽列。


就需要一點小技巧。
下面的範例,分成三種權限,最高等級 Admin,依次為 Manager與 User。





執行結果:


第一張圖,這位使用者的權限較高,屬於「Admin」管理員,能看見所有節點。 Menu / SiteMapPath / TreeView三種都可以被我們控制。



第二張圖,這位使用者權限最低,屬於「User」基層用戶,只能看見某一部份。
=========================================================
要做到這樣的功能,又不寫程式。

需要修改兩個檔案。市面上幾本書都沒有提到這點,所以我野人獻曝一下。


1. 首先,加入Login控制項,負責帳號、密碼的管理(VS 2005基本功能。市面上每本書都有提到,這裡就不說了)。


2. 在 Web.Config檔(VS 2005會協助產生此檔)裡面,自己手動寫入這些文字:
每一個目錄、每一個網頁檔案,都要「個別」地設定它的權限,讓不同的Role(群組、角色)的使用者登入。...設定有點煩~


3. 搭配 TreeView / Menu / SiteMappath,必須搭配一個XML檔案(Web.sitemap,VS 2005會協助產生此檔。市面上每本書都有提到,這裡就不說了)。


重點在於每一個節點,最後面的「roles = 」這個設定,要跟上一張圖的設定互相搭配!這個檔案,也要自己手動進去修改:
雖然自己手動修改這些設定檔,有點煩人。但,至少不用寫程式來處理,也還OK。......

另外,可以參考中國大陸的網站,這篇文章(http://book.csdn.net/bookfiles/469/10046916551.shtml)也是介紹類似的東西。


本文出處:http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#3_treeView

http://www.dotblogs.com.tw/mis2000lab/archive/2008/05/06/3802.aspx

密技第二份,GridView合併儲存格

密技第二份,GridView合併儲存格......

這功能很多人在問,應該也有很多解答了。
不過,大家交流一下也無妨。
以下是我在微軟MSDN論壇的一些討論,都有我自己改寫的程式碼。僅供大家參考。

1. GridView合併儲存格

2. GridView合併儲存格之後,處理「隔行變底色(AlternatingRowStyle)」的問題



http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#1_gridview

「大腸包小腸」,GridView裡面包裹另外一個小的GridView

秘技一份,「大腸包小腸」,GridView裡面包裹另外一個小的GridView
用來製作「Master-Detail 的功能」~



主程式裡面,裡面用到了使用者控制項(User Control),可以參考本頁下方的說明。



參考資料:黃忠成老師的文章----ASP.NET 2.0 GridView 範例集 黃老師寫的功能非常詳細(果然是大內高手!),但對初學者來說可能有點難,我簡化了一小段,專注在「大腸包小腸,大GridView 包裝 小GridView」的部份。


更詳細的討論,可以參考這個論壇 ,希望這些討論對大家有幫助。






ASP.NET 2.0 的 GridView,取代以前1.x版的DataGrid

ASP.NET 2.0(Visual Studio 2005開發環境)以後,推出 GridView來取代 DataGrid, 搭配新的SqlDataSource但作法大同小異,各位可以簡單的看看我寫的這篇文章.....文章下載(PDF檔)

微軟的文章(逐步解說:Web 網頁中的基本資料存取),圖文並茂,把GridView很詳細地解說一次。您一定要看看。

http://www.taconet.com.tw/mis2000_aspnet/ASP_NET20.htm#1_gridview