ASP.NET DataGrid 控件深入研究
2024-07-10 12:57:35
供稿:網友
 
中國最大的web開發資源網站及技術社區,
首先我們將從一個示范開始,在這個示范中我將使用一個按鈕點擊事件排序表格中的數據。然后介紹的是一組屬性——hyperlinkcolumn、bottoncolumn 和 boundcolumn,使用這些屬性可以為 datagrid 添加一些有趣的自定義功能。
下面我們首先從上一次結束的地方——清單a開始。下面是清單a中代碼的輸出。
 
datagrid 的輸出
要注意的第一個變化是表頭中的列名現在是可點擊的。自己運行一下這個示例,你會發現在點擊每個字段時,數據會自動排序。
現在我們看一下引發這個變化的代碼。首先我將介紹 strsortby 變量,這個變量用于存儲排序參數的名字。page_load() 函數也已有改動:當頁面第一次被裝載時,id字段被選作默認的排序參數。
下面創建 dataview 對象的一個實例,用于在運行時期改變排列順序。只要把這個屬性設置為要排序的列,dataview 就會替我們完成排序工作。
最后,使用 datagird 控件的一些新屬性將這些東西粘合到一起。allowsorting激活排序,而 onsortcommand屬性指定在接收到一個排序請求時需要調用的事件處理器。第二個屬性已經設置為dgsuperheroes_sort(),這個函數將在我們點擊頭部的字段名時由 .net 編譯器自動調用。在這個函數中,sortexpression屬性保存被選作排序參數的字段名,然后根據這個字段重新綁定 datagrid,從而實現排序。
 
向 datagrid 中添加鏈接
 
 
接著,我們可以通過以下方式改進 datagrid 的界面:只在前面展示信息的摘要,并在 datagrid 中插入一些超鏈接,然后在點擊這些鏈接時顯示詳細信息。清單b 展示了如何實現這一效果,圖b 展示了相應的輸出:
圖b 
在 datagrid 中插入超鏈接
這里 datagrid 只包含兩列——第一列是 id,第二列是名字。如果點擊任何一個名字,就會調出另外一個 asp.net 腳本,顯示被選項的所有詳細信息。
在這個腳本中最重要的東西是 autogeneratecolumns 屬性。該屬性如果設為 false,那么就可以保證 .net 編譯器不會根據表的字段自動產生 datagrid 的列。
很明顯的問題是,然后該怎樣生成列?很簡單,使用 <columns> 元素,這一元素將圍起需要顯示的列的定義。
第一種列是 <asp:boundcolumn> 類型,該類型允許我們將 datagrid 的一列綁定到數據庫表的一個字段。所需的字段被賦予 <asp:boundcolumn> 元素的 datafield屬性。
然后,<asp: hyperlinkcolumn> 元素允許我們插入一個特殊列,在該列中有 datagrid 每一行的一個鏈接。datatextfield屬性控制列中要顯示的表字段,datanavigateformatstring屬性控制超鏈接的 url 目標(注意 {0} 格式用于變量填補),datanavigateurlfield屬性指定用于填補的數據庫字段。
如果點擊超級英雄(super hero)的名字,會進入 more.aspx 腳本,該腳本以 id 作為一個 get 參數傳遞,然后從數據庫中獲取信息,并將信息顯示在頁面上。
命令中心
前面的例子引入了一個包含超鏈接的列。現在,你將看到如何引入一個能夠在用戶點擊時運行自定義命令的列。比如說,當用戶點擊一個列時,在頁面上隱藏或者顯示一個元素。
 
 
首先,在前面創建的 datagrid 中添加兩個列。第一個新列使用被選記錄的詳細信息填充另外一個 datagrid(位于同一頁面),而第二個列用于在用戶點擊一個按鈕時顯示或隱藏這個新的 datagrid。
清單c是產生的代碼,下圖是清單以中代碼的簡單輸出:
圖c
 
使用 datagrid 顯示/隱藏詳細信息
腳本中實際上包含兩個 datagrid:第一個是“dgsuperheroes”,用于顯示超級英雄(superheroes)的名字,第二個是“dgsuperheroes_details”,用于顯示被選英雄的詳細信息。默認情況下,第二個 datagrid 在頁面加載時是不可見的,因為其 visible 屬性設置為 false。
現在回到“dgsuperheroes” datagrid,你會發現我們已經把 autogeneratecolumns 屬性設置為“false”并且引入了四個自定義列:兩個用于記錄 id 和名稱的 <asp:boundcolumn>,還有兩個用于保存命令的 <asp:buttoncolumn>。
每個 <asp:buttoncolumn> 都有三個有用的屬性:headertext,控制表頭行顯示的文字;text,控制每一行顯示的文字;commandname,用于為每個命令指定一個唯一標識符。
“dgsuperheroes” datagrid定義還引入了 onitemcommand 屬性,這個屬性指定在用戶點擊一個 <asp:buttoncolumn> 鏈接時被調用的事件處理器。在這個例子中,事件處理器叫做 superhero_details(),它使用 commandname 區分對“顯示詳細信息(show details)”和“隱藏詳細信息(hide details)”請求的調用。注意這里顯式地將事件(作為事件處理器的一個輸入參數)轉型為一個 linkbutton。
分享你的 datagrid 技巧和竅門
在學習完本文的這兩部分課程之后,我已經嘗試盡量深入地講解了 asp.net 中非常酷的 datagrid 控件的很多東西。此外還展示了如何使用最簡單的方法向 datagrid 中添加排序列,之后我還快速地介紹了 datagrid 控件的三個有用但有點復雜的屬性:<asp:boundcolumn> 元素,用于將 datagrid 列綁定到數據庫表的具體字段;<asp:hyperlinkcommand> 元素,用于在 datagrid 中插入超鏈接;<asp:buttoncolumn> 元素,使得將自定義命令引入到 datagrid 中更加容易。不妨到discussion board 跟大家分享你最愛的 datagrid 技巧或竅門。