2016年1月6日 星期三

GridView 的 HyperLinkField 資料行

ASP.NET 2.0 - 善用 GridView 控制項的 HyperLinkField 資料行
http://blog.xuite.net/alwaysfuturevision/liminzhang/9302601-ASP.NET+2.0+-+%E5%96%84%E7%94%A8+GridView+%E6%8E%A7%E5%88%B6%E9%A0%85%E7%9A%84+HyperLinkField+%E8%B3%87%E6%96%99%E8%A1%8C

借助於 GridView 控制項的 HyperLinkField 資料行,我們便可以在 GridView 控制項中替每一筆資料列顯示出一個超連結,並讓使用者輕易重新導向至特定的目標位置(特定網頁或網頁中的位置)。 
在使用 HyperLinkField 資料行時,首先要考慮的就是超連結上的文字。關於此點,可分為下列兩種狀況來說明: 
q  如果您希望每一筆資料列的超連結都顯示相同的固定文字,請將 HyperLinkField 資料行的 Text 屬性設定成所需的文字。圖表 所示者即是一例。 
圖表1 
q  如果您希望使用欄位的內容作為每一筆資料列之超連結的文字,請將 HyperLinkField 資料行的 DataTextField 屬性設定成該欄位。圖表 所示者即是一例。
當然,最常與 DataTextField 屬性搭配使用的不外乎就是 DataTextFormatString 屬性。我們經常使用 DataTextFormatString 屬性來格式化取自 DataTextField 屬性所指定之欄位的資料值。圖表 所示者即是一例。 

圖表
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 屬性來構建之。這個時候,您必須將 Name 與 MemberLevel 欄位同時指派給 DataNavigateUrlFields 屬性(Name 與 MemberLevel 欄位必須以逗號分隔),並利用DataNavigateUrlFormatString 屬性來加以格式化即可。寫法如下所示: 
<asp:HyperLinkField  DataNavigateUrlFields="Name, MemberLevel"  DataNavigateUrlFormatString="MemberPage.aspx?Name={0}&MemberLevel={1}"  HeaderText="會員網頁" Text="檢視會員網頁" /> 
章立民研究室 2006/12/12

沒有留言: