適用範圍:□ ASP.NET 2.0 □ ASP.NET 3.5
問題
我使用ASP.NET 2.0開發網站, 並且使用GridView來實作會員瀏覽的網頁, 但是我想要在會員有訂單時可以有一個介面來瀏覽訂單資訊,
而且就直接在同一個網頁中顯示, 不另外打開視窗或網頁, 請問我要如何做呢?
問題說明
GridView的能力是超乎許多開發人員或網頁設計人員的想像, 只要能夠善用HTML、Scripting (JavaScript) 以及ASP.NET的能力,
其實可以變化出的花樣, 也許之前想都沒想過。
在多數Master-Detail的應用程式中, 往往都是用不同的視窗來顯示主檔以及附檔的資料, 例如像這樣的模式:
不過這樣子的感覺總是有點怪怪的, 因為每次點了Master (主檔) 的明細時, 它就會跳到最上方, 如果是用在大量資料的話, 這似乎就不是那麼好,
雖可能有方法改善 (這不是本篇文章的重點) , 但是如果將明細直接顯示到Master記錄, 像這樣:
是不是就比較清楚了呢?
如果想要做到這樣的能力, 必須要滿足三件事情:
□ 取得要求明細的主檔列的列位置 (Row-position) 資料。
□ 新增新的資料列, 並將明細資料插入新的資料列中。
□ 將明細資料列插入要求明細的主檔列下方。
其中以第一件事情最難做到, 筆者待會再提, 先提比較容易的第二件與第三件事。
解決方案
GridView本身有一個在技術文件上鮮少看到的功能, 就是它可以由開發人員自行在GridView中自行插入新的列, 這個列物件是GridViewRow,
讀者可以把它當成一般的TableRow來看, 但它多了幾個性質, 從它的建構函式就可以得知:
public GridViewRow (
// 列索引
int rowIndex,
// 資料來源索引
int dataItemIndex,
// 列型態 (DataRow, Pager, Footer, Separator, EmptyDataRow
// 或 Header等)
DataControlRowType rowType,
// 列狀態 (Normal, Selected, Insert, Alternate, Edit等)
DataControlRowState rowState
)
|
而若想要插入GridViewRow到GridView中的話, 必須要在GridView.RowCreated事件常式中, 並且依照順序來插入,
否則新插入的GridViewRow會走位, 而順序是RowIndex+2, 若是RowIndex, 則新的資料列會出現在標題列上方:
而若是RowIndex+1, 則新的資料列會出現在點選的那一列的上方:
|