ASP.NET 2.0 - 善用 GridView 控制項的 HyperLinkField 資料行

摘要:ASP.NET 2.0 - 善用 GridView 控制項的 HyperLinkField 資料行

借助於 GridView 控制項的 HyperLinkField 資料行,我們便可以在 GridView 控制項中替每一筆資料列顯示出一個超連結,並讓使用者輕易重新導向至特定的目標位置(特定網頁或網頁中的位置)。 

在使用 HyperLinkField 資料行時,首先要考慮的就是超連結上的文字。關於此點,可分為下列兩種狀況來說明: 

q  如果您希望每一筆資料列的超連結都顯示相同的固定文字,請將 HyperLinkField 資料行的 Text 屬性設定成所需的文字。圖表 1 所示者即是一例。 

圖表1 

q  如果您希望使用欄位的內容作為每一筆資料列之超連結的文字,請將 HyperLinkField 資料行的 DataTextField 屬性設定成該欄位。圖表 2 所示者即是一例。

當然,最常與 DataTextField 屬性搭配使用的不外乎就是 DataTextFormatString 屬性。我們經常使用 DataTextFormatString 屬性來格式化取自 DataTextField 屬性所指定之欄位的資料值。圖表 3 所示者即是一例。 

 


圖表
2

 



圖表
3
 

學會如何設定 HyperLinkField 資料行所產生之超連結的文字之後,接下來就是學習設定超連結的目標 URL。如果您要讓所有的超連結都連結至相同的URL,請直接將 NavigateUrl 屬性設定成所需的 URL。這樣的設定雖然最為單純,但是卻也非常不切實際,畢竟就算是連結至相同的網頁,也會每一筆資料列連結至相同網頁中的不同位置(也就是書籤BookMark)。因此,較為實用的應該是 DataNavigateUrlFields 屬性,原因很簡單,它允許您指定某一個欄位中的URL作為連結的目的地(請注意此屬性的名稱是以s結尾,這是有玄機的,稍後會加以說明)。以圖表4所示者而言,表示以「網址」欄位中的 URL 作為連結的目的地,如此一來,不同的超連結將會擁有各自的 URL 

 


圖表
4
 

當然,談到了 DataNavigateUrlFields 屬性,絕對不能忘了它的好兄弟DataNavigateUrlFormatString 屬性。DataNavigateUrlFormatString 屬性最主要的用途是用來格式化超連結的URL。舉例來說,假設您指派給 DataNavigateUrlFields 屬性的欄位並非內含完整的 URL(例如:http://www.gotop.com.tw)而僅僅是內含網頁檔的名稱(例如:AlexPage.aspx),此時如果希望超連結的 URL 能夠在網頁檔的名稱前加上完整的位置路徑的話,您可以採用以下的寫法: 

<asp:HyperLinkField DataNavigateUrlFields="個人網頁"
                    DataNavigateUrlFormatString="~/Members/{0}"

                    HeaderText="個人網頁" Text="檢視個人網頁" /> 

以上面的寫法而言,表示以連結至根目錄下之 Members 資料夾中的網頁檔。又以下面的寫法而言,則表示連結至一個絕對URL(也就是某網站)中之 Members 資料夾中的網頁檔: 

<asp:HyperLinkField
 DataNavigateUrlFields="
個人網頁
"
 DataNavigateUrlFormatString="http://www.alexmember.com/Members/{0}"
 HeaderText="個人網頁" Text="檢視個人網頁" /> 

談到這裡,相信大家對 HyperLinkField 資料行都已經能夠運用自如,現在呢,我們要再回頭研究研究 DataNavigateUrlFields 屬性,為什麼它的名稱要特別以s結尾呢?原因很簡單,因為您可以指派一個以上的欄位名稱給 DataNavigateUrlFields 屬性。什麼時候需要這樣做呢?舉例來說,當每一個超連結的 URL 都是要連結至相同的網頁但是卻要傳遞查詢字串給該網頁(類似如下所示),以便讓目標網頁根據不同的參數值來進行不同的處理時,就有需要這樣做: 

MemberPage.aspx?Name=章立民&MemberLevel=A 

欲使您的超連結擁有類似如上的URL,就必須借助於 DataNavigateUrlFields 屬性來構建之。這個時候,您必須將 NameMemberLevel 欄位同時指派給 DataNavigateUrlFields 屬性(Name MemberLevel 欄位必須以逗號分隔),並利用 DataNavigateUrlFormatString 屬性來加以格式化即可。寫法如下所示: 

<asp:HyperLinkField
 DataNavigateUrlFields="Name, MemberLevel"
 DataNavigateUrlFormatString
="MemberPage.aspx?Name={0}&MemberLevel={1}"
 HeaderText="
會員網頁" Text="檢視會員網頁" /> 

 

章立民研究室 2006/12/12