台灣最具影響力的-資訊專家社群 - 讓您成為最有價值的IT專業人才
線上人數
1998
 
會員總數:197934
接案會員:6196
文章總數:2320
討論主題:151331
歡迎您免費加入會員
討論區列表 >> ASP.NET >> GridView不知是否可兩行式的顯示

[變換順序]
[我要回覆]


回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
GridView不知是否可兩行式的顯示
價值 : 50 QP  點閱數:3795 回應數:33

點圖分享到Plurk吧!
樓主

馬克褚
初學者
77 41
528 127
我有一個需求,使用GridView時,每筆紀錄顯示成兩行,第一行是顯示多筆欄位,第二行是顯示此筆資料的備註欄位,不知可否達成?
本篇文章發表於2006-07-31 14:05
VP、EP、QP、HP該如何使用? 免費申請藍色部落
1樓
回應

Hank
中級專家
4565 19
2702 607
檢舉此回應
1.
相對應部分的先改成 ItemTemplate
除了原本的 Label 顯示欄位之外
另外加入 Label 來顯示你要的資料備註

2.
手動建立 DataTable, 依據您的顯示需求
遞迴加入顯示多筆欄位, 或顯示此筆資料的備註欄位



本篇文章回覆於2006-07-31 14:12
2樓
作者回應

馬克褚
初學者
77 41
528 127
檢舉此回應
我懂你第一點的意思!
但加入的資料備註,要顯示在所有欄位的第二行,而不是某欄位的第二行....

如果手動建立DataTable,原先GridView的好處,如分頁、排序..等功能,似乎都享受不到了...


本篇文章回覆於2006-07-31 16:01
3樓
回應

Hank
中級專家
4565 19
2702 607
檢舉此回應
1.
您可能要在排版上要多下一點功夫,
比如每一列每個欄位都塞一個沒有框線的 Table,
設定高度或寬度, 裡面每一列又靠上靠左對齊.
如果遇到沒有相對應的欄位, 就用空白顯示.

2.
還是可以啦, 只是要自己多寫一些 code 來處理.
比起他原來自動產生的, 是會有一些不方便沒錯.

3.
不然您也可以動態產生 Table, 這樣做其實彈性也很大,
不再受限於 GridView 的某些限制後,
您也可以依據自己的需求產生希望的顯示方式.



本篇文章回覆於2006-07-31 16:28
4樓
回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
我想您要的,或許是
http://share.webapp.com.tw/temp/dotnet/gridview2Row.jpg
下方的樣子(地址在第二列)


本篇文章回覆於2006-07-31 16:30
=========================================
網站 : http://www.allenkuo.com/
5樓
作者回應

馬克褚
初學者
77 41
528 127
檢舉此回應
正如圖片所示,不知Allen大人有何解法!


本篇文章回覆於2006-07-31 17:06
6樓
回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
我在 #4 的方法是別人在 asp.net 1.x 時教我的 DataGrid 技巧,由於他當時認為是"秘技",所以我現在也不方便跟你講如何做,不過我想有個方法也可行,而且理論上是比較好的解決方法才對,做法如下:
以 #4 的圖為例,圖片中,上半部是 GridView 的原始狀況,若您寫

也就是說 GridView 跟 DataGrid 差不多,它其實是將資料先轉換成一個 Table web control,而 table 的第一列,就是標題,第6列 Rows[5],就是編號5那一筆, 如果你寫table.Rows.Count,會看到此值是8,也就是說這個Table web control 一共有8列,那麼,就表示第一列是標題,最後二列是別的東西, 中間的就是資料了

接下來,就要發揮你的創造力了, 你可以在 GridView1_PreRender 事件裡,先取得 table 物件(就是我上方寫的 code)後,再根據上述的理論,在資料的列裡插入你要的 TableRow, TableCell, 那麼它就可以長成 #4 中下方的外觀了(css要自己先弄一下,但不難)

我不想實際去寫了,但此法用在一筆 record 以多列呈現應該沒問題才對, 您試試看,若寫好了也請將 code 貼上來嘉惠他人,謝謝

由於我是前天才開始 K asp.net 2.0 的書, 這個 GridView 控制項有沒有更簡便的方法做到您的要求我並不確定,只是用1.x 的觀念來解決而已, 您不妨再等等,或許其他人有更好的解決方法


本篇文章回覆於2006-07-31 18:01
=========================================
網站 : http://www.allenkuo.com/
7樓
作者回應

馬克褚
初學者
77 41
528 127
檢舉此回應
我就#6的方法來試試看好了...


本篇文章回覆於2006-08-01 09:06
8樓
回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
它應該99%可行才對,只是我有點懶得寫了
讓我們分工合作,我負責出點子,您去寫寫看,有問題再來討論,若寫出來,記得貼上來哦,謝謝


本篇文章回覆於2006-08-01 09:27
=========================================
網站 : http://www.allenkuo.com/
9樓
作者回應

馬克褚
初學者
77 41
528 127
檢舉此回應
成功了!多謝你的指導,看來GridView的擴充性很不錯的...

結果:
http://www.markchoo.com.tw/download/gridview2rows.gif
上下兩個Gridview是用來做比較的...



本篇文章回覆於2006-08-01 10:09
10樓
回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
不錯哦,請您先不要關閉討論串,或許有別的比較好的解決方法也說不定


本篇文章回覆於2006-08-01 13:07
=========================================
網站 : http://www.allenkuo.com/
11樓
作者回應

馬克褚
初學者
77 41
528 127
檢舉此回應
今天發現欄位合併的程式,有些未考慮周詳,附上更新後的程式。(多考慮了pager的位置問題)

程式結果




本篇文章回覆於2006-08-03 15:09
12樓
回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
還好還沒關 :)
由於pager可以在上下顯示,只是單純算index 或許較容易凸槌,您也可以試試另一個方法
例如在每列放入一個literal or hidden control,並將datasource先取得(例如用datatable)
再在PreRender中去找找hidden control中保留的PK值,然後再到DataTable中去找到"自我介紹"欄位值,最後再決定要不要塞入一列
那麼應該就比較不會凸槌了,有時你或許要做群組小計加總,就可以用這類技巧


另外,您在第9行寫
If Me.GridView1.PagerSettings
好像怪怪地,您應該有注意到引數中有
ByVal sender As Object
而這sender多半是觸發控制項的元兇, 因此,您可以試著改成
Dim ctrl as GridView = CType(sender, GridView)
If ctrl.PagerSettings.... '<--如此一來,您的程式就不必在乎GridView的ID是什麼了,比較不會有無謂的bug


本篇文章回覆於2006-08-03 15:24
=========================================
網站 : http://www.allenkuo.com/
13樓
作者回應

馬克褚
初學者
77 41
528 127
檢舉此回應
感謝Alen大人指導,第二段更改是沒問題,但第一段就有些看不懂了!


本篇文章回覆於2006-08-04 10:17
14樓
回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
沒關係,看不懂就算了,反正問題暫時有解決了


本篇文章回覆於2006-08-04 10:31
=========================================
網站 : http://www.allenkuo.com/
15樓
回應

Allen
高級顧問
61974 325
19970 15168

捐贈 VP 給 Allen 檢舉此回應
還好沒關,我找到較合理的方法了,請參考
http://www.codeproject.com/useritems/TariqMultiHeaderGridview.asp
我剛才試了一下

雖然程式碼較粗糙,但也已可正確變成二列,剩下的,就由您自行發揮了



本篇文章回覆於2006-08-04 20:49
=========================================
網站 : http://www.allenkuo.com/
[變換順序]
 

回覆
如要回應,請先登入.