我想嵌套2箇中繼器。第二個中繼器在第一個中繼器的itemDataBind事件上綁定了數據。嵌套中繼器Asp.net ItemDataBound不叫?
<asp:Repeater ID="FolderRepeater" runat="server" OnItemDataBound="CategoryRepeater_ItemDataBound">
<ItemTemplate>
<p><%# Container.DataItem("DocumentName")%></p>
<asp:Repeater ID="someRepeater" runat="server">
<ItemTemplate>
<p>TEST<%# Container.DataItem("NodeAlias")%></p></br>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
首先中繼勢必在pageLoad的,和第二中繼勢必開往事件一號轉發器的項目數據。但是,似乎我的ItemDataBound事件沒有被調用,因爲沒有顯示第二個重複項目。
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim datasetFolders As New DataSet()
Dim da As SqlDataAdapter = New SqlDataAdapter()
Dim sqlQry As String
Dim conn As New SqlConnection(CMS.DataEngine.SqlHelper.ConnectionString)
sqlQry = "SELECT * FROM dbo.CMS_Document WHERE DocumentNamePath LIKE '/Galerie/%' AND DocumentExtensions IS NULL"
da.SelectCommand = New SqlCommand(sqlQry, conn)
conn.Open()
da.Fill(datasetFolders)
conn.Close()
FolderRepeater.Dispose()
FolderRepeater.DataSource = datasetFolders
FolderRepeater.DataBind()
End Sub
並且這將是itemDataBound事件。 response.write(「test」)中的文本沒有顯示在我的網頁上,所以我懷疑它從來沒有打過電話?
Protected Sub CategoryRepeater_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles FolderRepeater.ItemDataBound
Response.Write("test")
Dim item As RepeaterItem
item = e.Item
Dim imageFolder As New DataSet
Dim da As SqlDataAdapter = New SqlDataAdapter()
Dim sqlQry As String
Dim conn As New SqlConnection(CMS.DataEngine.SqlHelper.ConnectionString)
sqlQry = "SELECT * FROM dbo.View_CONTENT_File_Joined WHERE NodeAliasPath LIKE '/Galerie/" & e.Item.DataItem("DocumentName") & "/%'"
da.SelectCommand = New SqlCommand(sqlQry, conn)
conn.Open()
da.Fill(imageFolder)
conn.Close()
Dim someRepeater As Repeater
someRepeater = e.Item.FindControl("someRepeater")
someRepeater.DataSource = imageFolder
someRepeater.DataBind()
End Sub
你必須從外中繼器的'ItemDataBound'數據綁定它。另外,你不應該在回發上進行數據綁定。所以檢查它'如果不是IsPostBack然後DataBindRepater()' –
它正在外部中繼器的ItemDataBound數據綁定。不是嗎? – lucafik