巢狀ListView的缺點就是設計時看不到內層的長相...
一般來說巢狀ListView後端DataBind後再往下一層便無ItemDataBound事件可用了所以需要自行另寫委派。
我的方法基本的步驟如下:
第一層ListView層的DataSource指定好後直接DataBind上去即可:
m_vVdb.View.ForumForum.Clear()
m_vVdb = m_uco.QueryForumForumList(m_vVdb)
Me.ListViewNewByForumCategory.DataSource = m_vVdb.View.ForumForum
Me.ListViewNewByForumCategory.DataBind()
第二層則在第一層的ListView的ItemDataBound事件中先取得ListView物件:
Dim ListViewNewFormThreadByFormFormList As ListView = e.Item.FindControl("ListViewNewFormThreadByFormFormList")
然後委派第二層ListView的ItemDataBound事件函式:
'將ListViewNewFormThreadByFormFormList.ItemDataBound的工作委派給ListViewNewFormThreadByFormFormList_ItemDataBound
AddHandler ListViewNewFormThreadByFormFormList.ItemDataBound, AddressOf ListViewNewFormThreadByFormFormList_ItemDataBound
(記得要另外寫第二層ListView的ItemDataBound事件函式)
Private Sub ListViewNewFormThreadByFormFormList_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs)
.......程式碼....
.......
End Sub
接下來可以在第一層的ListView的ItemDataBound事件中依需要取得要再做一層查詢的參數值:
Dim tmpForumUpId As Integer = Integer.Parse(CType(e.Item.FindControl("HiddenFieldForumUpId"), HiddenField)
再來以上面的參數值再一次查詢撈出所需資料後,把第二層ListView層的DataSource指定好後DataBind上去:
Dim NewForumPostQryRecCnt As Integer = 10 '查詢筆數的參數
m_vVdb.View.ForumThreadForIndex.Clear()
m_vVdb = m_uco.QueryForumPostForIndexListByCategoryNew(m_vVdb, tmpForumUpId, NewForumPostQryRecCnt)
ListViewNewFormThreadByFormFormList.DataSource = m_vVdb.View.ForumThreadForIndexListViewNewFormThreadByFormFormList.DataBind()
PS.
程式碼中ListViewNewByForumCategory為第一層ListView
ListViewNewFormThreadByFormFormList為第二層ListView
如此便可達到巢狀的顯示,不需要使用到DataSource的控制項。
重點是在ListView的ItemDataBound事件中先取得下一層的ListView物件並委派其ItemDataBound事件函式,這樣每層ListView就都有ItemDataBound可用,甚至可以在往下層發展。
沒有留言:
張貼留言