2013-08-21 4 views
0

Я пытаюсь вставить 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, и второй повторитель связан с элементами данных 1-го ретранслятора связанных событие. Однако, похоже, мое событие ItemDataBound не вызывается, поскольку 2-й элемент ретранслятора не отображается.

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 
+0

Вы должны DataBind его от внешнего ретранслятора 'ItemDataBound'. Кроме того, вы не должны привязывать его к обратной почте. Поэтому проверьте его с помощью 'If Not IsPostBack Then DataBindRepater()' –

+0

Это привязка данных к ItemDataBound внешнего репитера. Разве это не так? – lucafik

ответ

0

Проблема была с этим:

FolderRepeater.Dispose() 

Похоже отчуждать отключает будущие события? Во всяком случае, теперь, когда я прокомментировал это, это работает.

0

Это хорошо, что вы уже нашли проблему здесь:

FolderRepeater.Dispose() 
FolderRepeater.DataSource = datasetFolders 
FolderRepeater.DataBind() 

Если это не опечатка, вы должны действительно прочитать о правильном использовании функции Dispose(). Существует много информации об этом, когда вы будете искать в Интернете, т.е. .:

Смежные вопросы